📄 irdecoder_int.h
字号:
//12.000MHZ 外部中断解码
#ifndef RedKeyScan_C51_DEFINE_2003_8_31_ZY_YKB_1
#define RedKeyScan_C51_DEFINE_2003_8_31_ZY_YKB_1
#define word unsigned int
#define byte unsigned char
byte code RedCode []={0x90,0x00,0x10,0x08,0x18,0x04,0x14,0x0c,0x1c,0x80, //0~9
0x40,0x88,0x4C, //OFF 10+ silent (10, 11, 12 )
0x44,0x54,0x50,0x48, //UP,DOWN, LEFT,RIGHT, (13, 14, 15, 16)
0xEC,0xF4,0xE8,0x5C}; //INC,SEL,TIME,TV/AV (17, 18, 19, 20)
void InitRedKey(void)
{
TMOD|=0x10; //选择定时器1的模式1, 16位定时器
ET1=0; //关闭定时器1的中断
TR1=1; //启动定时器1,
IT1=1; //选择外部中断触发类型为下降沿触发
EX1=1; //开启外部中断0
EA=1; //允许中断
//BeepIO=0; //close beep
}
/*
void Delay50us(word count)
{
word i,j;
for(i=0;i<count;i++)
for(j=0;j<6;j++);
}
*/
word FullCode=0xFFFF;
byte TestCode=0xFF;
byte value=0, i=0,key;
RedKeyScan() interrupt 2
{
if(TR1==0)
{
TR1=1;TH1=TL1=0;
}
if(TR1==1);
{
value=TH1;
TH1=TL1=0;
if(value>11)return;
FullCode=FullCode<<1;
if(value>5&&value<9)
{
//TR1=0;
FullCode=FullCode|0x01;
}
i++;
}
if(i>15)
{
if((FullCode&0xFF00)==0xE200) //11100010B,0xE2,sign code
{
TestCode=(byte)(FullCode&0x00FF);
for(i=0; i<25; i++)
{
if(TestCode==RedCode[i])
{
key=i;
}
}
}
else return ;
}
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -