最近在实验室研究12864和矩阵键盘结合为计算器的仿真,然后看了一篇文章,获益匪浅,也在此感谢。下面是实例程序。
#include <REGX52.H>
unsigned char code key[4][4]=//返回键值
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16
};
unsigned char code xun[]={0xfe,0xfd,0xfb,0xf7};//按键循环扫描
void delay_us(unsigned int zhi) //延时
{
while(zhi--);
}
int scan_key()
{
int number;
for(number=0;number<4;number++)//按键扫描循环
{
P1=xun[number];//按键扫描
delay_us(20);//消抖
if(P1_4==0)
{
while(P1_5==0); //等待松开
return key[number][0];//按下返回键值
}
if(P1_5==0)
{
while(P1_6==0);//等待松开
return key[number][1];//按下返回键值
}
if(P1_6==0)
{
while(P1_7==0); //等待松开
return key[number][2];//按下返回键值
}
if(P1_7==0)
{
while(P3_2==0); //等待松开
return key[number][3];//按下返回键值
}
}
return 0xff; //未按下
}
void main()
{
int zhi;//返回值
while(1)
{
zhi=scan_key(); //获取按键返回值
if((zhi==1)||(zhi==2)||(zhi==3)||(zhi==4)) //第一组按下第一个led亮
{
P2_0=0;
}
if((zhi==5)||(zhi==6)||(zhi==7)||(zhi==8)) //第二组按下第二个led亮
{
P2_1=0;
}
if((zhi==9)||(zhi==10)||(zhi==11)||(zhi==12)) //第三组按下第三个led亮
{
P2_2=0;
}
if((zhi==13)||(zhi==14)||(zhi==15)||(zhi==16))//第四组按下第四led亮
{
P2_3=0;
}
}
}
看看按下后的图片。第一个按键按下。
第二个按键按下。
第三个按键按下。
第四个按键按下。
参考文章:https://blog.csdn.net/nanfeibuyi/article/details/80469909