- #include<reg51.h>
- unsigned char n[]={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x81};
- unsigned char k;
- void Timer1Init() //1毫秒@12.000MHz
- {
- TMOD= 0x10; //设置定时器模式
- TL1 = 0x18; //设置定时初始值
- TH1 = 0xFC; //设置定时初始值
- TF1 = 0; //清除TF0标志
- TR1 = 1; //定时器0开始计时
- }
- void scan_key(void)
- {
- static bit sign;
- static unsigned char count;
- unsigned char temp;
- P1=0x0f;
- if(P1!=0x0f)
- {
- if(++count>=10 && sign==0)
- {
- sign=1;
- temp=P1;
- temp|=0xf0;
- P1=temp;
- switch(P1)
- {
- case 0xee:k=1;break;
- case 0xde:k=2;break;
- case 0xbe:k=3;break;
- case 0x7e:k=4;break;
- case 0xed:k=5;break;
- case 0xdd:k=6;break;
- case 0xbd:k=7;break;
- case 0x7d:k=8;break;
- case 0xeb:k=9;break;
- case 0xdb:k=10;break;
- case 0xbb:k=11;break;
- case 0x7b:k=12;break;
- case 0xe7:k=13;break;
- case 0xd7:k=14;break;
- case 0xb7:k=15;break;
- case 0x77:k=16;break;
- default:break;
- }
- }
- }
- else
- {
- sign=0;
- count=0;
- }
- }
- void main() //主函数
- {
- Timer1Init();
- while(1)
- {
- if(TF1)
- {
- TF1=0;
- TL1 = 0x18;
- TH1 = 0xFC;
- scan_key();
- }
- P2=n[k/10];
- P3=~n[k%10];
- }
- }
复制代码
|