51单片机矩阵按键程序
文中所述的单片机为STC单片机
开发板具体型号我忘了。
上面有一个4*4的矩阵按键
可以通过程序来实现当依从左向右从上到下的次序按下时,第一个数码管显示0~15的十六进制数。下面就说一下具体实现
操作方法
- 01
下述为程序: #include <reg51.h>#define Keyvalue P1 //按下的键的代号#define Digvalue P0 //用宏定义来定义一下数码管的发送数据端口typedef unsigned int ut;typedef unsigned char uc;ut k;sbit LSA=P2^2; //定义三八译码器的三个输入端口sbit LSB=P2^3;sbit LSC=P2^4; ut smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //从0~15的十六进制编码void delay(ut i) //延时函数{ while(i) i--;}void anjian() //检测按键是否按下,若按键按下则给k附上按下的键的序号{ ut a; Keyvalue=0x0f; if(Keyvalue!=0x0f) { delay(1000); if(Keyvalue!=0x0f) { Keyvalue=0x0f; switch(Keyvalue) { case(0x07):k=0;break; case(0x0b):k=1;break; case(0x0d):k=2;break; case(0x0e):k=3;break; } Keyvalue=0xf0; switch(Keyvalue) { case(0x70):k=k;break; case(0xb0):k=k+4;break; case(0xd0):k=k+8;break; case(0xe0):k=k+12;break; } } } while((a<50)&&(Keyvalue!=0x0f)) { delay(1000); a++; }}void main(){ LSA=0; //让第一个数码管显示数字 LSB=0; LSC=0; while(1) { anjian(); Digvalue=smgduan[k]; //显示数字 }}