矩阵键盘+数码管动态显示

我把矩阵键盘和数码管动态显示综合起来写了个程序。这个代码的意思是在一开始8个数码管什么也不显示,因为p0的初始值是0x00,当我们按下矩阵按键里的按键时,8个数码管动态显示该按键的键值,直到按下了下一个按键,8个数码管显示的内容才可能改变。


#include<reg52.h>//目的是每按下一个按键,8个数码管就动态显示对应的键值
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
#define duanxuan P0
#define keyboard P1
int zxm[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int x,y;
void delay(int i)
{
	while(i--);
}
void keyproc()
{
    int a=0;
	P1=0x0f;//检测是哪一列有按键按下;
	if(P1!=0x0f)
	{
		delay(1000);
		if(P1!=0x0f)
		{
			P1=0x0f;
			switch(P1)
			{
				case(0x07):y=1;break;
				case(0x0b):y=2;break;
				case(0x0d):y=3;break;
				case(0x0e):y=4;break;
			}
		}
		P1=0xf0;//检测是哪一行有按键按下
		switch(P1)
		{
			case(0x70):x=1;break;
			case(0xb0):x=2;break;
			case(0xd0):x=3;break;
			case(0xe0):x=4;break;
		}
		P0=zxm[(x-1)*4+y-1];
		
		

	}
}
int main()
{
	P0=0x00;
	while(1)
	{   
	    lsa=0;lsb=0;lsc=0;//位选选了第1个
		lsa=1;lsb=0;lsc=0;//位选选了第2个
		lsa=0;lsb=1;lsc=0;//位选选了第3个
		lsa=1;lsb=1;lsc=0;//位选选了第4个
		lsa=0;lsb=0;lsc=1;//位选选了第5个
		lsa=1;lsb=0;lsc=1;//位选选了第6个
		lsa=0;lsb=1;lsc=1;//位选选了第7个
		lsa=1;lsb=1;lsc=1;//位选选了第8个
		keyproc();

		

		
		
		
	}
	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/qq_40642465/article/details/80343547