基于51单片机矩阵键盘程序

时间:2022-01-08 19:46:40
/*用矩阵键盘输入数字在数码管显示*/
矩阵键盘代码的编写有点像VHDL 编码器的书写,很多那些数字都是根据唯一的扫描位置来定,也就是说这些数字可以任意设置,主要就是巧妙在“
0xf0&0xfe” 通过这样确定出一定的位置,然后“编码”为你想要位置所代表的数字。矩阵键盘其实代码都很固定,很多东西其实也可以算是一沉不变的,
作为初学者继续加油吧!
 
#include<reg52.h>
#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};uchar num,temp,num1;void delay(uint z){	uint x,y;	for(x=z;x>0;x--)		for(y=110;y>0;y--);}uchar keyscan();void display(uchar aa);void main(){	num=17;	dula=1;	P0=0;	dula=0;	wela=1;	P0=0x00;	wela=0;		while(1)		{			display(keyscan());		}}void display(uchar aa){			dula=1;			P0=table[aa-1];			dula=0;		}uchar keyscan(){			P3=0xfe;			temp=P3;			temp=temp&0xf0;	  //0xf0&0xfe			while(temp!=0xf0)				{					delay(5);					temp=P3;					temp=temp&0xf0;	//延时消抖					while(temp!=0xf0)					{						temp=P3;					switch(temp)						{							case 0xee:num=1;								break;							case 0xde:num=2;								break;							case 0xbe:num=3;								break;							case 0x7e:num=4;								break;						}					while(temp!=0xf0)						{							temp=P3;							temp=temp&0xf0;						}					}				}			P3=0xfd;			temp=P3;			temp=temp&0xf0;			while(temp!=0xf0)				{					delay(5);					temp=P3;					temp=temp&0xf0;					while(temp!=0xf0)					{						temp=P3;					switch(temp)						{							case 0xed:num=5;								break;							case 0xdd:num=6;								break;							case 0xbd:num=7;								break;							case 0x7d:num=8;								break;						}					while(temp!=0xf0)						{							temp=P3;							temp=temp&0xf0;						}					}				}			P3=0xfb;			temp=P3;			temp=temp&0xf0;			while(temp!=0xf0)				{					delay(5);					temp=P3;					temp=temp&0xf0;					while(temp!=0xf0)					{						temp=P3;					switch(temp)						{							case 0xeb:num=9;								break;							case 0xdb:num=10;								break;							case 0xbb:num=11;								break;							case 0x7b:num=12;								break;						}					while(temp!=0xf0)						{							temp=P3;							temp=temp&0xf0;						}					}				}			P3=0xf7;			temp=P3;			temp=temp&0xf0;			while(temp!=0xf0)				{					delay(5);					temp=P3;					temp=temp&0xf0;					while(temp!=0xf0)					{						temp=P3;					switch(temp)						{							case 0xe7:num=13;								break;							case 0xd7:num=14;								break;							case 0xb7:num=15;								break;							case 0x77:num=16;								break;						}					while(temp!=0xf0)						{							temp=P3;							temp=temp&0xf0;						}					}				}return num;}