📄 getmain.c
字号:
#include <regx52.h>
#define REDUSER 0x09
sbit control1 = P0^0 ;
sbit control2 = P0^1 ;
sbit control3 = P0^2 ;
unsigned char redcode[4];
bit reddata ; /*读数据标志*/
bit firstcode ; /*引导码标志*/
bit getcode ;
void setred(void)
{
TMOD = 0x01;
TH0 = 0 ;
TL0 = 0 ;
TR0 = 1 ;
EA = 1 ;
ET0 = 1 ;
EX0 = 1 ;
IT0 = 1 ;
reddata = 0 ;
firstcode = 0 ;
getcode = 0 ;
}
void sethome(void)
{
control1 = 0 ;
control2 = 0 ;
control3 = 0 ;
}
void int_t0(void) interrupt 1
{
TH0 = 0 ;
TL0 = 0 ;
reddata = 0 ;
firstcode = 0 ;
}
void int_ex0(void) interrupt 0
{
static unsigned char num ;
static unsigned char wei;
if(reddata == 0)
{ /*引导码判断*/
if( firstcode == 0 )
{
firstcode = 1 ;
}
else
{
if( TH0 >= 0x2B && TH0 <= 0x3E )
{
reddata = 1 ;
num = 0 ;
wei = 0 ;
getcode = 0 ;
}
firstcode = 0 ;
}
}
else
{ /*代码判断*/
if( TH0 > 0x0C) /*大于3MS出错*/
{
reddata = 0 ;
num = 0 ;
wei = 0 ;
}
else if(TH0 >= 0x07 ) /*大于1.8MS小于3MS 为1 */
{
redcode[num] >>= 1 ;
redcode[num] |= 0x80;
wei++ ;
}
else if (TH0 >= 0x03) /*大于0.8小于1.8MS 为0*/
{
redcode[num] >>= 1 ;
redcode[num] &= 0x7f ;
wei++ ;
}
else
{ /*出错*/
reddata = 0 ;
num = 0 ;
wei = 0 ;
}
if(wei == 8 )
{ /*转下一个8位码*/
wei = 0 ;
num++;
}
if(num == 4)
{ /*接收完毕*/
wei = 0 ;
num = 0 ;
reddata = 0 ;
if( (redcode[0] == ~redcode[1]) && (redcode[2] == ~redcode[3])) /*校验收到的码*/
getcode = 1 ;
}
}
TH0 = 0 ;
TL0 = 0 ;
return;
}
void main(void)
{
setred();
sethome();
while(1)
{
if(getcode)
{
if(redcode[0] == REDUSER)
{
switch(redcode[2])
{
case 0 :control1 = 1 ;
break;
case 1 :control2 = 1 ;
break;
case 2 :control3 = 1 ;
break;
case 3 :control1 = 0 ;
break;
case 4 :control2 = 0 ;
break;
case 5 :control3 = 0 ;
break;
}
getcode = 0 ;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -