📄 mainbak.c
字号:
#include <reg52.h>
#define TIMEH 12 //基于22.1184M时钟晶振,数字越大,时间越长
#define TIMEL 50
#define ROW P3
#define LINE P2
extern void timer_init(void);
extern void delay(unsigned int);
extern unsigned char scan_key(void);
unsigned char irm_code,turn_flag;
sbit QD = P1^0;
void main()
{
unsigned char tmp=0;
irm_code=0;
turn_flag=0;
timer_init();
while(1){
if(turn_flag==0) {
tmp = scan_key();
if(tmp!=0xff) {
irm_code = tmp;
TR0 = 1;
turn_flag=0xff;
}
}
}
}
void timer_init(void)
{
TMOD = 0x01;
TH0 = 0xff;
TL0 = 0xff;
EA = 1;
ET0 = 1;
TR0 = 0;
}
void timer_int(void) interrupt 1
{
static unsigned char i=0,flag=0;
QD=~QD;
if(i<10) {
TH0 = 255-TIMEH/2;
TL0 = 255-TIMEL/2;
i++;
}
else if(i<18) {
if((irm_code & 0x80)==0x80) {
TH0 = 255-TIMEH;
TL0 = 255-TIMEL;
irm_code <<= 1;
i++;
}
else {
TH0 = 255-TIMEH/2;
TL0 = 255-TIMEL/2;
if(flag) {
irm_code <<= 1;
i++;
}
flag ^= 0x01;
}
}
else {
TR0 = 0;
i=0;
QD=1;
turn_flag=0;
TH0 = 0xff;
TL0 = 0xff;
}
}
void delay(unsigned int t)
{
unsigned char i;
while(t--) for(i=0;i<230;i++);
}
unsigned char scan_key(void)
{
static unsigned char i;
unsigned char tmp,j;
unsigned char code row_code[]={0xfe,0xfd,0xfb,0xf7};
unsigned char code lin_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ROW=row_decode[i];
tmp=LINE;
for(j=0;j<8;j++) {
if(tmp==lin_code[j]) return j;
}
switch (tmp)
{
case 0xfe:
return 0x01;
break;
case 0xfd:
return 0x02;
break;
case 0xfb:
return 0x03;
break;
case 0xf7:
return 0x04;
break;
case 0xef:
return 0x05;
break;
case 0xdf:
return 0x06;
break;
case 0xbf:
return 0x07;
break;
case 0x7f:
return 0x08;
break;
default:
break;
}
ROW=0xfd;
tmp=LINE;
switch (tmp)
{
case 0xfe:
return 0x09;
break;
case 0xfd:
return 0x0a;
break;
case 0xfb:
return 0x0b;
break;
case 0xf7:
return 0x0c;
break;
case 0xef:
return 0x0d;
break;
case 0xdf:
return 0x0e;
break;
case 0xbf:
return 0x0f;
break;
case 0x7f:
return 0x10;
break;
default:
break;
}
ROW=0xfb;
tmp=LINE|0x80;
switch (tmp)
{
case 0xfe:
return 0x11;
break;
case 0xfd:
return 0x12;
break;
case 0xfb:
return 0x13;
break;
case 0xf7:
return 0x14;
break;
case 0xef:
return 0x15;
break;
case 0xdf:
return 0x16;
break;
case 0xbf:
return 0x17;
break;
case 0x7f:
return 0x18;
break;
default:
break;
}
ROW=0xf7;
tmp=LINE;
switch (tmp)
{
case 0xfe:
return 0x19;
break;
case 0xfd:
return 0x1a;
break;
case 0xfb:
return 0x1b;
break;
case 0xf7:
return 0x1c;
break;
case 0xef:
return 0x1d;
break;
case 0xdf:
return 0x1e;
break;
case 0xbf:
return 0x1f;
break;
case 0x7f:
return 0x20;
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -