当前位置:首页 > 技术学院 > 热搜器件
[导读]STC89C52单片机红外遥控器解码

实现功能: 按实验板所佩带的红外遥控器上面的数字键,把所按的数字显示在实

验板上的数码管上,一定注意要跟红外探测头的距离不要太远,而且

程序里只编写了遥控器上的数字键的部分

实验板型号:KBL-XYD-C52

实验名称: 红外控制数码管的显示

#include

#define uchar unsigned char

#define uint unsigned int

sbit IR = P3^3; //红外接收器数据线

sbit Duan=P2^6; //定义数码管的段选使能端

sbit Wei =P2^7; //定义数码管的位选使能端

#define Digital_tube_Wei_Enable Wei=1; //开启控制数码管的位选使能端

#define Digital_tube_Wei_Disable Wei=0; //关闭控制数码管的位选使能端

#define Digital_tube_Duan_Enable Duan=1; //开启控制数码管的段选使能端

#define Digital_tube_Duan_Disable Duan=0; //关闭控制数码管的段选使能端

#define Digital_tube_Duan P0 //定义数码管数据端口

uchar cIRReceiveData[7];

uchar code Dis_table[]= //将BCD码转换成数码管扫描码的数组

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};

函数名称:毫秒延时函数

函数功能:实现毫秒级的延时

参数介绍:Delay_MS: 定义需要延时的毫秒的数值

iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时

iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得

返回值: 无

注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形

式完成,所以如果改变了晶振的频率,请做相应的改变

void DelayMs(uint Delay_MS)

{

uint iNumber,iValue;

for(iNumber=0;iNumber

{

iValue=107; //107这个数值是通过测定而得

while(iValue--);

}

}

函数名称:Delay

函数功能:延时0.14毫秒,主要是用于红外解码

参数介绍:cDelay:延时0.14ms的次数

返回值: 无

注意事项:无

void Delay(unsigned char cDelay) //x*0.14MS

{

unsigned char cNumber;

while(cDelay--)

{

for (cNumber=0;cNumber<13;cNumber++) {}

}

}

函数名称:One_DigitalTube_display

函数功能:把数字显示在数码管上,因为实验板上用了锁存器573控制数码管

参数介绍:无

返回值: 无

注意事项:无

void One_DigitalTube_display(unsigned char uData)

{

Digital_tube_Duan_Enable; //使能数码管的段选

Digital_tube_Duan=Dis_table[uData];//输入所要显示的数值

Digital_tube_Duan_Disable; //关闭数码管的段选

DelayMs(1); //调整时序,以实现稳定显示

}

函数名称:Init_INT1

函数功能:配置外部中断1,让其为下降沿触发,同时打开全局中断

参数介绍:无

返回值: 无

注意事项:无

void Init_INT1()

{

IT1=1; //外部中断1,为下降沿触发

EX1=1; //允许外部中断1中断

EA=1; //CPU开放中断

}

函数名称:main

函数功能:初始化外部中断1,让实验板上所用数码管的公共端接为低电平,然后进入

while(1)的循环,等待中断的发生

参数介绍:无

返回值: 无

注意事项:实验板上所用的数码管为共阴极数码管

void main()

{

Init_INT1(); //初始化外部中断1

IR=1; //I/O口初始化

Digital_tube_Wei_Enable; //打开控制数码管锁存器的使能端

P0=0x00; //给所有数码管的公共端低电平

Digital_tube_Wei_Disable;//关闭控制数码管锁存器的使能端

while(1);

}

函数名称:IR_Routine

函数功能:对红外接收头接收到的红外信号进行解码,解码后,把遥控器上的数字显示

在数码管上

参数介绍:无

返回值: 无

注意事项:具体的协议,请看光盘里所带的名为“红外控制”的数据手册

void IR_Routine() interrupt 2

{

unsigned char cNumber1,cNumber2,cCount=0;

EX1 = 0; //关闭中断

Delay(15);

if (IR==1) //然后再检测红线接收脚是有数据招收,有继续,没有则退出

{

EX1 =1; //打开中断

return; //跳出去

}

while (!IR) //确认IR信号出现

{ //等IR变为高电平,跳过9ms的前导低电平信号。

Delay(1);

}

for (cNumber1=0;cNumber1<4;cNumber1++) //收集四组数据,前两组为地址码,仅

{ //仅接着是两个命令码,这是NEC公司所定义的协议里规定的

for (cNumber2=0;cNumber2<8;cNumber2++)//每组数据有8位

{

while (IR) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。

{

Delay(1);

}

while (!IR) //等 IR 变为高电平

{

Delay(1);

}

while (IR) //计算IR高电平时长

{

Delay(1);

cCount++;

if (cCount>=30)

{

EX1=1;

return;

} //太长了就自动推出中断服务程序

} //高电平计数完毕

cIRReceiveData[cNumber1]=cIRReceiveData[cNumber1] >> 1;//数据最高位补“0”

if(cCount>=8) //协议里定义‘1’的电平为2.25ms,因为Delay(1)延时为0.14ms

{ //加上其他指令执行时的延时,所以大于等于8时,为高电平

cIRReceiveData[cNumber1] = cIRReceiveData[cNumber1] | 0x80;

} //数据最高位补“1”

cCount=0;

}//end for k

}//end for j

if(cIRReceiveData[2]!=~cIRReceiveData[3])//判断接收到指令是不是正确,协议里规定

{ //第一次发指令和第二次发的正好的按位取反的,以此保证接收数据的可靠性

EX1=1;

return;

}

switch(cIRReceiveData[2]) //把解码得到的数据转换成实验板上能够显示的数字

{

case 0x16:

One_DigitalTube_display(0); break;

case 0x0c:

One_DigitalTube_display(1); break;

case 0x18:

One_DigitalTube_display(2); break;

case 0x5e:

One_DigitalTube_display(3); break;

case 0x08:

One_DigitalTube_display(4); break;

case 0x1c:

One_DigitalTube_display(5); break;

case 0x5a:

One_DigitalTube_display(6); break;

case 0x42:

One_DigitalTube_display(7); break;

case 0x52:

One_DigitalTube_display(8); break;

case 0x4a:

One_DigitalTube_display(9); break;

}

EX1 = 1; //打开中断,解码完成,以进行下次解码

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

采用芯科科技MG21无线SoC的控客智能家居解决方案为杭州亚运会媒体村打造智能、舒适、便捷、安全的生活体验

关键字: 无线SoC 红外遥控器 工业物联网

电视、空调、音响、电暖器、等日常家电中,最常见的遥控器就是红外线遥控式了,遥控器是一种用来远控机械的装置。现代的遥控器,主要是由集成电路电板和用来产生不同讯息的按钮所组成。因其造价成本低,对其它的电器不存在干扰的优点被大...

关键字: 红外遥控器 遥控发射器

在如今,我们的无线遥控器在我们的生活中比比皆是,每家每户都在使用,例如我们的电视、空调等家电是极为普遍的,无线遥控器给我们日常生活带来极大的便利,遥控器的发明者是谁已无从知晓,我们如今的遥控器,是一种采用远程来控制机器的...

关键字: 无线遥控器 红外遥控器

ML-L3是用于尼康部分型号相机的无线红外遥控器,可以通过红外方式来控制快门的释放,支持B门拍摄。官方售价100RMB左右,山寨版售价10RMB左右。虽然也能实现基本的遥控功能,但是功能还是比较单一,如不能实现定时拍摄,...

关键字: 相机 红外遥控器

下班刚回到家,天气很热~空调遥控器呢?找不到!躺平不想动~风扇遥控器呢?找不到!想看电视,不想动~电视遥控器呢?找不到!好不容易找到了,遥控器没电?崩溃!!!!想不想拥有一个万能红外遥控器?本期开发者实战营,手把手教你,...

关键字: 红外遥控器

你的生活中是否也有这样的场景,要打开电视,满屋子找遥控器,翻了一大堆遥控器却愣是没找到哪个是电视机的?我们走访了不少家庭,得到了一个惊人的数据,至少一个三口之家的家庭会有6个遥控板,更多的甚至达到了10多个。越来越多的电...

关键字: 51单片机 红外遥控器

本程序采用的芯片为SAA3010, 参考资料有:1.常用红外遥控接收头引脚图解2.红外遥控编码资料3.RC-5红外遥控程序4.GIRDER中文教程与电脑遥控器制作资料5.Girder网站(一个需要钱买的遥控)6.再度出击...

关键字: 单片机 红外遥控器 pc遥控器

本电路用于检查一个红外遥控器的基本操作的理想选择。该电路是基于压电蜂鸣器直接连接到一个红外线接收器IC精辟简单的想法。红外遥控器测试仪原理图:

关键字: 原理图 测试仪 红外遥控器

家电遥控器通信距离往往要求不高,而红外的成本比其它无线设备要低的多,所以家电遥控器应用中红外始终占据着一席之地。遥控器的基带通信协议很多,大概有几十种,常用的就有 ITT 协议、NEC 协议、Sharp 协议、Phili

关键字: nec 协议 红外遥控器

在很多人的家中,都会闲置有各种红外线遥控器(IR),如TV、VCD、DVD等,利用这些闲置的遥控器,可以用来控制通用遥控接收器,如附图所示。I.遥控接收器电路组成在附图电路中的IC1(PNA4602M)是一只三引脚的红外...

关键字: 红外遥控器 遥控器电路图 遥控电路 通用遥控接收器
关闭
关闭