#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define duan P0 //段选
#define wei P2 //位选
#define key P1 //矩阵键盘
unsigned char n;
unsigned char s;
unsigned char shu;
unsigned char b;
void dispiay();//函数显示函数
void delayms(uint);//延时程序
char key_shu; //按键值
unsigned char code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选函数
unsigned char code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar keydown()//定义按键值
{
unsigned char a=0;
key=0xfe;
if(key!=0xfe)
{
switch(key)
{
case(0xee): key_shu=1;break;
case(0xde): key_shu=2;break;
case(0xbe): key_shu=3;break;
case(0x7e): key_shu=10;break;
}
}
key=0xfd;
if(key!=0xfd)
{
switch(key)
{
case(0xed): key_shu=4;break;
case(0xdd): key_shu=5;break;
case(0xbd): key_shu=6;break;
case(0x7d): key_shu=11;break;
}
}
key=0xfb;
if(key!=0xdf)
{
switch(key)
{
case(0xeb): key_shu=7;break;
case(0xdb): key_shu=8;break;
case(0xbb): key_shu=9;break;
case(0x7b): key_shu=12;break;
}
}
key=0xf7;
if(key!=0xf7)
{
switch(key)
{
case(0xe7): key_shu=0;break;
case(0xd7): key_shu=15;break;
case(0xb7): key_shu=13;break;
case(0x77): key_shu=14;break;
}
}
while((a<50) && (key!=0xf0)) //检测按键松手检测
{
delayms(1);
a++;
}
return key_shu;
}
void display()
{
while(1)
{
unsigned long int baiwan,qianwan,shiwan,wan,qian,bai,shi,ge;
//keydown();
//if(key_shu==1)
//shu=987;
//else
//duan=0x00;
//shu=key_shu;
//shu=12345678;
wei=w[7];
duan=0x00;
qianwan=shu/10000000;
duan=d[qianwan];
delayms(1);
duan=0x00;
wei=w[6];
shu=shu%10000000;
baiwan=shu/1000000;
duan=d[baiwan];
delayms(1);
duan=0x00;
wei=w[5];
shu=shu%1000000;
shiwan=shu/100000;
duan=d[shiwan];
delayms(1);
duan=0x00;
wei=w[4];
shu=shu%100000;
wan=shu/10000;
duan=d[wan];
delayms(1);
duan=0x00;
wei=w[3];
shu=shu%10000;
qian=shu/1000;
duan=d[qian];
delayms(1);
duan=0x00;
wei=w[2];
shu=shu%1000;
bai=shu/100;
duan=d[bai];
delayms(1);
duan=0x00;
wei=w[1];
shu=shu%100;
shi=shu/10;
duan=d[shi];
delayms(1);
duan=0x00;
wei=w[0];
ge=shu%10;
duan=d[ge];
delayms(1);
}
}
void main()
{
n=0;
while(1)
{
keydown();
display();
//shu=12345678;
if((key_shu>=0)&&(key_shu<=9))
{ //n++;
if(n==1)
shu=key_shu;
else if(n==2)
shu=shu*10+key_shu;
else if(n==3)
shu=shu*100+key_shu;
else if(n==4)
shu=shu*1000+key_shu;
else if(n==5)
shu=shu*10000+key_shu;
else if(n==6)
shu=shu*100000+key_shu;
else if(n==7)
shu=shu*1000000+key_shu;
else if(n==8)
shu=shu*10000000+key_shu;
key_shu=0;
}
if(key_shu==14)
{b=shu;
shu=0;
n=0;
}
if(key_shu==10)
{s=b+shu;
}
display();
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);} |