51单片机红外遥控器程序
时间: 2023-07-15 09:13:09 浏览: 122
下面是一个简单的51单片机红外遥控器程序,可以通过红外遥控器控制LED灯的开关。
```
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR=P3^2; // 红外接收管引脚定义
sbit LED=P1^0; // LED灯引脚定义
uchar ir_code; // 红外遥控器码值
// 延时函数
void delay(uint i)
{
while(i--);
}
// 红外接收函数
void get_IR()
{
uint x=0;
uchar i;
while(IR);
delay(500); // 延时5ms
if(IR) return;
delay(500); // 延时5ms
for(i=0;i<8;i++)
{
while(!IR); // 等待引导码高电平结束
delay(30); // 延时1.5ms
x=x<<1; // 左移一位
if(IR) x++; // 如果高电平持续时间大于1.5ms,则该位为1
while(IR); // 等待引导码低电平结束
}
ir_code=x; // 将接收的码值保存到全局变量中
}
// 主函数
void main()
{
EA=1; // 允许中断
EX0=1; // 外部中断0允许
IT0=1; // 下降沿触发外部中断0
while(1)
{
if(ir_code==0x18) // 如果接收到红外码0x18,则点亮LED灯
{
LED=0;
}
else if(ir_code==0x08) // 如果接收到红外码0x08,则熄灭LED灯
{
LED=1;
}
ir_code=0; // 清空红外码值
}
}
// 外部中断0中断服务函数
void int0() interrupt 0
{
get_IR(); // 红外接收
}
```
以上程序中,通过外部中断0来触发红外接收函数,将接收到的红外码值保存到全局变量中。然后在主函数中判断接收到的红外码值,根据不同的码值来控制LED灯的开关。
阅读全文