网站空间站,专业的外贸行业网站开发,四川十大设计院,职业装定制前言
实验#xff1a;通过4*4的矩阵键盘#xff0c;按下某个按钮之后会在数码管上面显示对应的键号。#xff08;0~F#xff09;
基础操作参考这篇博客#xff1a;
LED数码管的静态显示与动态显示#xff08;KeilProteus#xff09;-CSDN博客https://blog.csdn.net/w…前言
实验通过4*4的矩阵键盘按下某个按钮之后会在数码管上面显示对应的键号。0~F
基础操作参考这篇博客
LED数码管的静态显示与动态显示KeilProteus-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/134101256
Keil
实验采用的是共阳极的接法。所以这个二进制的数据里面的元素都是共阳极的。
通过逐行的扫描假设当前扫描第一行对应的P1^0~P1^3中有0则说明是该行有键被按下结合if判断可以确定是哪一列。
#includereg51.h
#define uchar unsigned char
#define uint unsigned intsbit L1P1^0;//定义列
sbit L2P1^1;
sbit L3P1^2;
sbit L4P1^3;
//共阳极字符0~F的段码
uchar dis[16]{0xC0,0XF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint time;
//延时放键盘抖动
void delay(uint time);void main(void){uchar temp;uchar i;while(1){P10xEF;//行扫描初值1110 1111(扫描P1^4)for(i0;i4;i){//逐行为低按行扫描一共4行if(L10)P0dis[i*40];//判断第一列有无键被按下if(L20)P0dis[i*41];//判断第二列有无键被按下if(L30)P0dis[i*42];//判断第三列有无键被按下if(L40)P0dis[i*43];//判断第四列有无键被按下delay(500);//延时tempP1;//读入P1口的状态temptemp|0x0F;//将P1^3~P1^0为1temptemp1;//左移准备扫描下一行temptemp|0x0F;P1temp;//为扫描下一行做准备}}
}
//软件消除抖动延时
void delay(uint time){uint i;for(i0;itime;i);
}
Proteus
相信大家已经轻车熟路了就直接放原理图了。
所需要的器件
元件名称Proteus关键字51单片机AT89C51复位按钮BUTTON电阻RES共阳极八位数码管7SEG-MPX1-CA电源POWER 矩阵键盘 总结
继续加油