51单⽚机矩阵键盘扫描程序51单⽚机矩阵键盘扫描程序 萨纳克#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit 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 code KEY_TABLE[]=//按键表 {
0xEE,0xDE,0xBE,0x7E,
iphd0xED,0xDD,0xBD,0x7D,
0xEB,0xDB,0xBB,0x7B,
0xE7,0xD7,0xB7,0x77
};
uchar temp,i,key;
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()
{
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
display(keyscan());
}注浆瓷器
}
void display(uchar aa)
{
dula=1;
P0=table[aa];
dula=0;
}
uchar keyscan()
{
//列扫描初值1111 0000变1110 0000则为第⼀列
P3 =0xF0;//⾏扫描初值0000 1111变0000 1110则为第⼀⾏
if(P3 !=0xF0)//⾏,列各四种变化对应了4*4=16键位,可通过按位或的⽅式得到
{//16个8位⼆进制数构成⼀个按键表
delay(5);//
if(P3 !=0xF0)隐私保护通话
{
temp = P3;
P3 =0x0F;//⼀旦按键处于按下状态P3⼝的电平将⽴即变化
key = temp | P3;//即此处的P3⼝将不为0x0f。
key = temp | P3;//即此处的P3⼝将不为0x0f。
for(i =0; i <16;++i)//查按键表的过程
空调节能器if(key == KEY_TABLE[i])
break;
}
}
return(i);//若松⼿按键释放"i"依然保持原值,即数码管会保持原来的值不熄灭。}