#include
#define uint unsigned int
#define uchar unsigned char
uint key=200,temp,i,a,num,num1,num2,qian,bai,shi,ge;
void keyscan()
{
//第一行键送低电平
P2=0xfe;
temp=P2;
if((temp&0xfe)!=0xfe)
{
delay(10);
if((temp&0xfe)!=0xfe)
{
switch(temp)
{
case 0xee: key=0; break;
case 0xde: key=1; break;
case 0xbe: key=2; break;
case 0x7e: key=3; break;
}
while(temp!=0xfe)
temp=P2;
num++;
P0=0xf0;
wela=1;
wela=0;
P0=table[key];
dula=1;
dula=0;
delay(5);
//按一次键 num 自加一次,从而实现累加
//把当前被按下的键值显示在中间的数码管
//第二行键送低电平
上
}
}
P2=0xfd;
temp=P2;
if((temp&0xfd)!=0xfd)
{
delay(10);
if((temp&0xfd)!=0xfd)
{
switch(temp)
{
case 0xed: key=4; break;
case 0xdd: key=5; break;
case 0xbd: key=6; break;
case 0x7d: key=7; break;
}
while(temp!=0xfd)
temp=P2;
num++;
P0=0xf0;
wela=1;
wela=0;
P0=table[key];
dula=1;
dula=0;
delay(5);
上
}
}
//把当前被按下的键值显示在中间的数码管
//第三行键送低电平
P2=0xfb;
temp=P2;
if((temp&0xfb)!=0xfb)
{
delay(10);
if((temp&0xfb)!=0xfb)
{
switch(temp)
{
case 0xeb: key=8; break;
case 0xdb: key=9; break;
case 0xbb: key=10; break;
case 0x7b: key=11; break;
}
while(temp!=0xfb)
//检测键盘是否被释放
temp=P2;
num++;
P0=0xf0;
wela=1;
wela=0;
P0=table[key];
dula=1;
dula=0;
delay(5);
上
//把当前被按下的键值显示在中间的数码管
//第四行键送低电平
}
}
P2=0xf7;
temp=P2;
if((temp&0xf7)!=0xf7)
{
delay(10);
if((temp&0xf7)!=0xf7)
{
switch(temp)
{
case 0xe7: key=12; break;
case 0xd7: key=13; break;
case 0xb7: key=14; break;
case 0x77: key=15; break;
}
while(temp!=0xf7)
//检测键盘是否被释放
temp=P2;
num++;
P0=0xf0;
wela=1;
wela=0;
P0=table[key];
dula=1;
dula=0;
delay(5);
}
}
}
Void main()
{
While(1)
{
for(i=0;i<8;i++)
{
P0=0xff;
le=1;
le=0;
P1=display[(8*key)+i];
P0=tab[i];
le=1;
le=0;
delay(1);
//把当前被按下的键值显示在中间的数码管上
//移位,P1 控制阳极
//消影
//P0 控制阴极
//延时使点阵显示更亮,不写不行,延时太长会闪动
}
Keyscan();
}
}