51单片机红外学习示例
时间: 2023-09-26 22:06:54 浏览: 34
以下是一个基于51单片机的红外学习示例,希望对您有帮助:
1. 硬件连接
将红外接收头连接到P3.3口,将学习到的红外码输出到LCD1602显示器上。
2. 程序代码
```c
#include <reg51.h>
#include <intrins.h>
#include "lcd1602.h"
sbit IR = P3^3; //红外接收头连接到P3.3口
unsigned char IR_data[4]; //存放红外码的数组,最多4字节
unsigned char IR_count = 0; //红外码字节数
/* 延时函数 */
void Delay500ms()
{
unsigned char a,b,c;
for(c=20;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
/* 读取IR信号 */
void IR_Read()
{
unsigned char i,j;
unsigned int k;
while(IR); //等待红外信号
_nop_();
_nop_();
_nop_();
if(IR) return; //判断是否为红外信号
for(k=0;k<60000;k++) //等待信号开始
{
if(!IR) break;
}
if(k>=60000) return;
for(i=0;i<4;i++) //读取4个字节的数据
{
for(j=0;j<8;j++) //读取每个字节的8位数据
{
for(k=0;k<60000;k++)
{
if(!IR) break;
}
if(k>=60000) return;
Delay500ms();
IR_data[i] >>= 1; //接收最高位
if(IR) IR_data[i] |= 0x80;
}
}
IR_count = 4; //设置接收到4字节数据
}
/* 将学习到的红外码输出到LCD1602显示器上 */
void IR_Output()
{
unsigned char i;
LcdInit(); //初始化LCD1602显示器
for(i=0;i<IR_count;i++)
{
LcdWriteCom(0x80+i); //设置显示位置
LcdWriteData(IR_data[i]); //输出数据
}
}
void main()
{
while(1)
{
IR_Read(); //读取红外信号
IR_Output(); //输出红外码
}
}
```
3. 程序说明
本程序通过红外接收头读取红外信号,并将学习到的红外码输出到LCD1602显示器上。首先定义了红外接收头连接的口、存放红外码的数组和红外码字节数等变量。然后定义了一个延时函数,用于延时等待红外信号。接着定义了IR_Read()函数,用于读取红外信号,并将读取到的红外码存放到IR_data数组中。最后定义了IR_Output()函数,用于将学习到的红外码输出到LCD1602显示器上。在主函数中不断执行IR_Read()和IR_Output()函数,从而实现了红外学习的功能。
注意:本程序只是一个示例,需要根据具体红外接收头的型号和使用情况进行适当修改和调整,以保证程序的正常运行。