|
本帖最后由 145056710 于 2018-5-13 20:55 编辑
#include<reg51.h>
sbit L1=P2^2;
sbit L2=P2^3;
sbit L3=P2^4;
sbit KIN1=P1^4;
sbit KIN2=P1^5;
sbit KIN3=P1^6;
sbit KIN4=P1^7;
sbit KOUT1=P1^3;
sbit KOUT2=P1^2;
sbit KOUT3=P1^1;
sbit KOUT4=P1^0;
unsigned char code LEDchar[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char keysta[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
void main()
{
unsigned i,j;
unsigned char backup[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
EA=1;
L1=0;
L2=1;
L3=0;
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
ET0=1;
TR0=1;
P0=LEDchar[1];
while(1)
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(backup[j] != keysta[j])
{
if(backup[j] != 0)
{
P0=LEDchar[i*4+j];
}
backup[j] = keysta[j];
}
}
}
}
}
void InterruptTimer0() interrupt 1
{
unsigned char i;
static unsigned char keyout = 0;
static unsigned char keybuf[4][4]={{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00}};
TH0=0xFC;
TL0=0x67;
keybuf[keyout][0] = (keybuf[keyout][0]<<1)|KIN1;
keybuf[keyout][1] = (keybuf[keyout][1]<<1)|KIN2;
keybuf[keyout][2] = (keybuf[keyout][2]<<1)|KIN3;
keybuf[keyout][3] = (keybuf[keyout][3]<<1)|KIN4;
for(i=0;i<4;i++)
{
if((keybuf[keyout]&0x0F) == 0x00)
{
keysta[keyout] = 0;
}
else if((keybuf[keyout]&0x0F) == 0x0F)
{
keysta[keyout] = 1;
}
keyout++;
keyout = keyout&0x03;
switch(keyout)
{
case 0: KOUT4 = 1;KOUT1 = 0;break;
case 1: KOUT1 = 1;KOUT2 = 0;break;
case 2: KOUT2 = 1;KOUT3 = 0;break;
case 3: KOUT3 = 1;KOUT4 = 0;break;
default: break;
}
}
}
|
|