📄 hongwai.c
字号:
#include <at89x52.h>
#define DAT P2_1 //模拟串口数据发送端
#define CLK P2_0 //模拟时钟控制端
unsigned char code //数码管显示段码
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
unsigned char HongwaiCommand;
unsigned char DaiMa;
unsigned char HongwaiInt;
unsigned char BiaoZhi1,BiaoZhi2;
void SysConfig(void);
bit HongwaiDecode(void);
void sendbyte(unsigned char byte);
void putnum(unsigned char i);
void KeyAction(unsigned char key);
void main(void)
{
SysConfig();
putnum(123);
while(1)
{
if(BiaoZhi1 == 1)
{
BiaoZhi1 = 0;
if(HongwaiDecode())
{
if(BiaoZhi2 == 1)
{
KeyAction(HongwaiCommand);
BiaoZhi2 = 0;
}
}
}
}
}
void SysConfig(void)
{
TMOD = 0x11;
IT1 = 1;
EX1 = 1;
ET0 = 0;
EA = 1;
}
bit HongwaiDecode(void)
{
static idata unsigned char INTCount = 0;
static unsigned long idata HongwaiData = 0;
unsigned char HongwaiData1,HongwaiData2,HongwaiData3,HongwaiData4;
if(HongwaiInt)
{
if((DaiMa>0x32)&&(DaiMa<0x36))
{
HongwaiData = 0;
INTCount = 0;
}
else if((DaiMa>0x07)&&(DaiMa<0x09))
{
HongwaiData = (HongwaiData<<1)+1;
INTCount++;
}
else if((DaiMa>0x03)&&(DaiMa<0x05))
{
HongwaiData = (HongwaiData<<1)+0;
INTCount++;
}
else if((DaiMa>0x2a)&&(DaiMa<0x2c))
{
HongwaiInt = 0;
HongwaiData = 0;
// HongwaiCommand = 0xff;
return 0;
}
else
{
INTCount = 33;
HongwaiData = 0;
}
HongwaiInt = 0;
if(INTCount == 32)
{
HongwaiData1 = (unsigned char)(HongwaiData>>24);
HongwaiData2 = (unsigned char)(HongwaiData>>16);
HongwaiData3 = (unsigned char)(HongwaiData>>8);
HongwaiData4 = (unsigned char)(HongwaiData);
HongwaiData = 0;
if(HongwaiData3 = ~HongwaiData4)
{
HongwaiCommand = HongwaiData3;
BiaoZhi2 = 1;
return 1;
}
else return 0;
}
else return 0;
}
else return 0;
}
void sendbyte(unsigned char byte)
{
unsigned char num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x80;
CLK=1;
num<<=1;
}
}
void putnum(unsigned char i)
{
unsigned char a,b,c;
a = i/100;
b = (i%100)/10;
c = i%10;
sendbyte(c);
sendbyte(b);
sendbyte(a);
}
void KeyAction(unsigned char key)
{
switch(key)
{
case 144:
key = 0;
putnum(1);
break;
case 184:
key = 0;
putnum(2);
break;
case 248:
key = 0;
putnum(3);
break;
case 176:
key = 0;
putnum(4);
break;
case 152:
key = 0;
putnum(5);
break;
case 216:
key = 0;
putnum(6);
break;
case 136:
key = 0;
putnum(7);
break;
case 168:
key = 0;
putnum(8);
break;
case 232:
key = 0;
putnum(9);
break;
case 128:
key = 0;
putnum(10);
break;
case 72:
key = 0;
putnum(11);
break;
case 240:
key = 0;
putnum(12);
break;
case 192:
key = 0;
putnum(13);
break;
case 88:
key = 0;
putnum(15);
break;
case 112:
key = 0;
putnum(16);
break;
default :
key = 0;
break;
}
}
void Int1(void) interrupt 2 using 2
{
EX1 = 0;
TR0 = 0;
BiaoZhi1 = 1;
HongwaiInt = 1;
DaiMa = TH0;
TH0 = 0;
TL0 = 0;
TR0 = 1;
EX1 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -