51单片机红外遥控其控制风扇开关程序
时间: 2023-08-13 08:04:29 浏览: 100
下面是一个简单的51单片机红外遥控器程序,可以通过红外遥控器控制风扇的开关。
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR = P3^2; // 红外接收管引脚定义
sbit FAN = P1^0; // 风扇引脚定义
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,则打开风扇
{
FAN = 1;
}
else if(ir_code == 0x08) // 如果接收到红外码0x08,则关闭风扇
{
FAN = 0;
}
ir_code = 0; // 清空红外码值
}
}
// 外部中断0中断服务函数
void int0() interrupt 0
{
get_IR(); // 红外接收
}
```
以上程序中,通过外部中断0来触发红外接收函数,将接收到的红外码值保存到全局变量中。然后在主函数中判断接收到的红外码值,根据不同的码值来控制风扇的开关。当接收到红外码0x18时,打开风扇;当接收到红外码0x08时,关闭风扇。
阅读全文