📄 16_2_3.c
字号:
//红外遥控接收程序
#include < REG51.h >
bit leader; //引导码标记
bit user; //用户码标记
unsigned long group; //32位二进制码组
unsigned int code[4] = {0x00,0x00,0x00,0x00};
unsigned int length; //码长
unsigned int *point;
unsigned char status; ∥存放状态寄存器值
void main (void)
{
unsigned int i;
status = PSW; //保护状态字
leader = 0; //清引导码标记
user = 0; //清用户码标记
length = 0; ∥码长清零
while (1)
{ ∥初始化
TMOD = 0x11; //00010001B,定时器0和1均为模式1,16位计数
TCON = 0x05; //00000101B,外部中断0和1均下降沿触发
EA = 1; //允许中断
ETO = 1; //定时器0中断允许
TR0 = 1; //定时器0接通工作
EX0 = 1; //外部中断0允许
EX1 = 1; //外部中断1允许
∥接收完一组符合编码要求的码组,则转到各个键功能处理程序
if ((leader == 1)&&(length == 32))
{
for (i=0,i++,i<4) //code[i]赋值
{
code[i]=(unsigned int)(group>>(4 *i)); //强制类型转换,
}
if ((code[2] == 0xF0)&&(code[2] == code[3])&&(~code[0] = code[1]))
//户码为11110000B
{
user = 1; //置用户码标记
*point = code[1]; //将point 指针指向操作码
key(*point); //转各个键功能子程序
point++;
}
length = 0; ∥码长清零
leader = 0; //清引导码标记
user = 0; //清用户码标记
}
PSW= status; //恢复状态字
}
}
/* INT0 中断,T0 开始计时 */
void service_int0() interrupt 1 using 1
{
status = PSW; //保护状态字
TH0 = 0; //清零TH0和TL0
TL0 = 0;
TR0 = 0; //定时器0停止工作,防止重复中断
ET0 = 1; //定时器0中断允许
EA = 1; //开放中断
PSW = status; //恢复状态字
}
/* INT1 中断 */
void service_int1() interrupt 2 using2
{
status = PSW; //保护状态字
EX0 = 0; //禁止外部中断0中断
TR0 = 0; //停止定时器0工作
ET0 = 0; //禁止定时器0中断
EA = 0; ∥关闭T0
if ((THO > = 0x01)&&(TH0 < = 0x03)) //计数值在0100H~0300H均当作"0"
group = group<<1 + 0; ∥若编码代表"0",则在group 尾部加"0"
else
if ((TH0 > = 0x06)&&(TH0 < = 0x08)) //计数值为0600H~0800H时都当作"1"
group = group << 1 + 1; ∥若编码代表"1",则在group尾部加"1"
else
if (TH0 > = 0x09) //计数值大于0900H视为"引导码"
{ //若编码代表"引导码"则引导码标志为"1",清码长
leader = 1; //设立引导码标记
length = 0; //码长清零
}
else
{ //码组错误
leader = 0; //清引导码标记
user = 0; //清用户码标记
length = 0; //码长清零
}
PSW = status; //恢复状态字
}
/* 键功能子程序 */
void key(unsigned int *k)
{
unsigned int q;
q = &k ; ∥获得操作码地址
switch(q)
{
case 0: key_0_function();break; //转到键"0"的功能子程序
case 1: key_1_function();break; //转到键"1"的功能子程序
//......
//......
//......
defult: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -