51单片机红外遥控器控制led灯 
时间: 2023-05-14 18:02:38 浏览: 122
51单片机红外遥控器控制led灯是一种基于红外线技术的控制系统。系统由红外信号发射器、红外信号接收器、51单片机等元器件组成。在使用过程中,用户通过按下红外遥控器上的按钮,会产生一种特定的红外信号码,信号码通过红外信号发射器传输到红外信号接收器,接收器会将信号码解码后发送给51单片机进行处理。
当51单片机接收到命令后,会判断此命令是否为指定的命令,并根据命令控制led灯的亮度和颜色。如果指定的命令与接收到的红外信号码一致,就会执行控制任务。比如,当红外遥控器上的按钮A被按下时,就会发送一个特定的信号码,51单片机会通过解码识别出该信号码并执行相应的控制任务。
通过此系统,用户可以远程控制led灯的亮度和颜色而不用跨越困难的障碍物来完成这项任务,同时也非常方便快捷。这种系统可以应用于室内照明、家居装修、商店照明等多种场景,给用户带来便利和舒适。
相关问题
51单片机红外遥控器程序
下面是一个简单的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灯的开关。
用51单片机红外遥控器设定报警阈值
首先,你需要一个带有红外解码功能的51单片机,例如STC89C52。然后,你需要一个红外遥控器和一个红外接收头,通常可以在电子元器件市场购买到。
接下来,你需要编写程序来实现以下功能:
1. 通过红外遥控器输入报警阈值:可以通过遥控器的数字键或其他按键来输入阈值。例如,你可以使用数字键0-9来输入数字,使用确认键来确定输入。
2. 显示当前报警阈值:可以在OLED屏幕或数码管上显示当前的阈值。
3. 检测是否超过报警阈值:使用模拟输入引脚来读取传感器的模拟信号,并将其与报警阈值进行比较。如果传感器的信号超过了阈值,则触发报警。
4. 报警处理:可以使用蜂鸣器、LED灯或其他输出设备来发出报警信号。
下面是一个简单的示例程序,用于演示如何使用红外遥控器来设置报警阈值:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IRIN=P3^2; //红外接收器输入引脚
//红外解码函数
uchar IR_Decode(void)
{
uchar i,j,k;
uchar code[4]={0};
//等待开始信号
while(IRIN);
if(IRIN) return 0;
//读取4个字节的数据
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(!IRIN);
_nop_();
_nop_();
k<<=1;
if(IRIN==0) k|=0x01;
while(IRIN);
}
code[i]=k;
}
//检验数据是否正确
if(code[0]+code[1]!=0xFF || code[2]+code[3]!=0xFF) return 0;
//返回按键值
return code[2];
}
//显示函数
void Display(uchar num)
{
//将数字转换为字符串
uchar str[4]={0};
str[0]=num/100+'0';
str[1]=num%100/10+'0';
str[2]=num%10+'0';
//在OLED屏幕或数码管上显示数字
//...
}
//主函数
void main()
{
uchar threshold=0; //报警阈值
uchar key=0; //按键值
while(1)
{
//检测红外遥控器输入
key=IR_Decode();
if(key>=0 && key<=9)
{
//设置报警阈值
threshold=threshold*10+key;
Display(threshold);
}
else if(key==0x0D)
{
//确认输入
//...
}
//检测是否超过报警阈值
if(AnalogInput()>threshold)
{
//触发报警
//...
}
}
}
```
请注意,这只是一个简单的示例程序,你需要根据实际需求进行修改和完善。例如,你可能需要添加更多的红外遥控器功能、修改传感器读取方式、添加报警处理代码等。
相关推荐













