- #include<reg52.h> #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- uchar jia,dengyu,qian,hou,gongneng,yunsuan,key;
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(int num)
- {
- uchar ge,shi;
- switch(num)
- {
- case 1:dula=0;
- P0=table[key];
- dula=1;
- wela=0;
- P0=0xef;
- wela=1;
- delayms(5);
- break;
- case 2:dula=0;
- P0=table[key];
- dula=1;
- dula=0;
- wela=0;
- P0=0xdf;
- wela=1;
- delayms(5);
- case 3:dula=0;
- P0=table[key];
- dula=1;
- dula=0;
- wela=0;
- P0=0xbf;
- wela=1;
- delayms(5);
- case 4:ge=key/10;
- shi=key%10;
- dula=0;
- P0=table[ge];
- dula=1;
- dula=0;
- wela=0;
- P0=0xfe;
- wela=1;
- delayms(5);
- dula=0;
- P0=table[shi];
- dula=1;
- dula=0;
- wela=0;
- P0=0xfd;
- wela=1;
- delayms(5);
- }
-
- }
-
-
- void matrixkeyscan()
- {
- int temp;
- P3=0xfe;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xee:key=1;break;
- case 0xde:key=2;break;
- case 0xbe:key=3;break;
- case 0x7e:key=4;break;
- }
- while(temp!=0xf0) //等待按鍵釋放
- {
- temp=P3;
- temp=temp&0xf0;
- }
-
- }
- }
- delayms(5);
- P3=0xfd;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xed:key=5;break;
- case 0xdd:key=6;break;
- case 0xbd:key=7;break;
- case 0x7d:key=8;break;
-
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- delayms(5);
- P3=0xfb;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xeb:key=9;break;
- case 0xdb:key=0;break;
- case 0x7b:key=dengyu;break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- delayms(5);
- P3=0xf7;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xe7:key=jia;break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- }
- }
- }
- void main()
- {
- while(1)
- {
- matrixkeyscan();//不停用鍵盤掃描程序
- gongneng=jia|dengyu;
- if(gongneng==0)
- {
- qian=key;
- display(1);
- }
- yunsuan=jia;
- if(yunsuan==1)
- {
- display(2);
- }
- if(gongneng==0)
- {
- hou=key;
- display(3);
- }
- if(dengyu==1)
- {
- hou=qian+hou;
- display(hou);
- }
- }
- }
復制代碼
|