标题:
单片机矩阵键盘扫描
[打印本页]
作者:
MeuiosJom
时间:
2020-4-6 00:29
标题:
单片机矩阵键盘扫描
#include"reg52.h"
#define ur unsigned char
#define ut unsigned int
#include"Seg.h" /* 数码管显示程序 */
/* 矩阵键盘接P2口 */
ur zhi; /* 按键返回的值 */
void ms(ut x) /* 延时函数 */
{
ur i;
while(x--)
for(i=0;i<123;i++);
}
void show() /* 显示新数字,并左移 */
{
ur i;
for(i=0;i<7;i++)G[i]=G[i+1];
G[7]=zhi;
}
void clean() /* 清屏 */
{
ur i;
for(i=0;i<8;i++)G[i]=10;
}
ur key() /* 按键扫描 */
{
ur jz;
P2=0xf0;
if(P2!=0xf0)
{
jz=P2;ms(5); //消抖
P2=0x0f;jz=jz|P2; //数据合成
switch(jz) //扫描合成值
{
case 0xee:zhi=0;break;
case 0xde:zhi=1;break;
case 0xbe:zhi=2;break;
case 0x7e:zhi=3;break;
case 0xed:zhi=4;break;
case 0xdd:zhi=5;break;
case 0xbd:zhi=6;break;
case 0x7d:zhi=7;break;
case 0xeb:zhi=8;break;
case 0xdb:zhi=9;break;
case 0xbb:zhi=10;break;
case 0x7b:zhi=11;break;
case 0xe7:zhi=12;break;
case 0xd7:zhi=13;break;
case 0xb7:zhi=14;break;
case 0x77:zhi=15;break;
default:return 16; //按键按下超过两个则跳出
}
if(zhi<15)return 1; //按下数字键
else if(zhi==15)return 2; //按下清屏键
}
return 16;
}
void main()
{
Init();
while(1)
{
switch(key())
{
case 1: show();
while(P2!=0x0f); //当按下松开则跳出
break;
case 2: clean();
while(P2!=0x0f); //当按下松开则跳出
break;
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1