- #include <reg52.h>
- sbit ENLED = P1^1;
- sbit P20 = P2^0;
- sbit P21 = P2^1;
- sbit P22 = P2^2;
- sbit P23 = P2^3;
- sbit KOUT1 = P2^4;
- sbit KOUT2 = P2^5;
- sbit KOUT3 = P2^6;
- sbit KOUT4 = P2^7;
- unsigned char code LedChar[] = {
- 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
- 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
- };
- unsigned char KeySta[4][4] = {
- {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
- };
- void main()
- {
- unsigned char i,j;
- unsigned char backup[4][4] = {
- {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}
- };
- ENLED = 0;
- EA = 1;
- TMOD = 1;
- TL0 = 0x67;
- TH0 = 0xFC;
- ET0 = 1;
- TR0 = 1;
- P0 = LedChar[0];
- while(1)
- {
- for(i=0;i<4;i++)
- {
- for(j=0;j<4;j++)
- {
- if(backup[i][j] != KeySta[i][j])
- {
- if(backup[i][j] != 0)
- {
- P0 = LedChar[i*4+j];
- }
- backup[i][j] = KeySta[i][j];
- }
- }
- }
- }
- }
- void InterruptTimer0() interrupt 1
- {
- unsigned char m;
- static unsigned char kout = 0;
- static unsigned char keybuf[4][4] = {
- {0xFF, 0xFF, 0xFF, 0xFF},{0xFF, 0xFF, 0xFF, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF},{0xFF, 0xFF, 0xFF, 0xFF}
- };
- P21 = 1;
- TL0 = 0x67;
- TH0 = 0xFC;
- keybuf[kout][0] = (keybuf[kout][0]<<1) | P20;
- keybuf[kout][1] = (keybuf[kout][1]<<1) | P21;
- keybuf[kout][2] = (keybuf[kout][2]<<1) | P22;
- keybuf[kout][3] = (keybuf[kout][3]<<1) | P23;
- for(m=0;m<4;m++)
- {
- if((keybuf[kout][m] & 0x0F) == 0x00)
- {
- KeySta[kout][m] = 0;
- }
- else if((keybuf[kout][m] & 0x0F) == 0x0F)
- {
- KeySta[kout][m] = 1;
- }
- else
- {}
- }
- kout++;
- kout = kout & 0x03;
- switch(kout)
- {
- case 0:KOUT1 = 1;KOUT4 = 0;break;
- case 1:KOUT4 = 1;KOUT3 = 0;break;
- case 2:KOUT3 = 1;KOUT2 = 0;break;
- case 3:KOUT2 = 1;KOUT1 = 0;break;
- default: break;
- }
- P20 = 1;
- P21 = 0;
- P22 = 1;
- }
复制代码
|