采用HS0038对万能红外电视遥控器的解码(C51源码)

合集下载

[教学]HS0038红外接收

[教学]HS0038红外接收

[教学]HS0038红外接收红外接收探头,接收红外信号频率为38kHz,周期约26μs随着家用电器、视听产品的普及,自动化办公设备的广泛应用和网络化的不断发展,越来越多的产品具有了待机功能(如遥控开关、网络唤醒、定时开关、智能开关等)。

产品的待机功能实现遥控操作,极大地方便了我们的生活,但也浪费了大量的能源。

中国节能产品认证中心(CECP)调查显示,全球每个家庭处于待机状态下的家电相当于亮着一个15 W,30 W 的长明灯,仅一台彩电每年在“无用待机状态”下浪费电力近100?,在我国彩色电视机待机一项一年就浪费电力150 多亿度,相当于十几个大型火力发电厂白白发电。

澳大利亚电器设备能源委员会新近的研究成果显示,不仅会耗费可观的电能,每月支付数额不小的“冤枉电费”,而且其释放大量有害气体二氧化碳在一定程度上加速了气候的变暖。

利用本系统可以良好的达到节能和环保的效果。

同时在家庭或工业控制现场,一些手动操作不太方便的场合,可以使用现有遥控器通过设置代替手动操作,比如可以利用家中现有的彩电遥控器,控制其它没有遥控功能的电器(如电灯、计算机、音响、电脑、打印机、饮水机、热水器等),方便生活。

1 系统方案论证和选择为了实现系统整体功能,红外解码部分是核心,红外解码指将遥控发射器所产生的红外遥控编码脉冲所对应的键值翻译出来的过程。

下面将系统方案做一论证,通常有硬件解码和软件解码两种方案。

方案一:此方案中,使用专用遥控器作为控制信号发出装置,当按下遥控器的设置键后,一体化红外接收装置接收到遥控器发出的设置控制信号,然后将信号送到专用的解码芯片中进行解码,解码后将信号送到单片机,由单片机查表判断这个信号是不是设置信号,当确认是设置信号后,启动设置子程序,那么以后接收到的红外信号就是设置的时间信号了,红外接收头接收到红外信号后再通过放大器将信号传到解码器中,解码器解完码后送到单片机,单片机再通过查表确定这些数值并进行设置,然后按下确认键,红外接收头接收到这个信号并通过放大送到解码器中,解码后再送到单片机中,单片机通过查表确定这是确认操作后,可以通过可控硅控制电源通断。

采用HS0038对万能红外电视遥控器的解码(C51源码)

采用HS0038对万能红外电视遥控器的解码(C51源码)
if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
{k=10;break;} /*budong/
else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
{while(IRsignal==0);
/************************* 说 明 *********************************/
/* 以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码 */
/* 前16位为8位用户码及其反码,后16位为8位的操作码及其反码 */
}
IRcode[i]=CodeTemp;
CodeTemp=0;
}
Delay();
}
}
EA=1;
}
/**************************主程序*************************/
IRcode[3]=0x00;
P0=IRcode[3];
while(1);
}
}
/************************中断0解码服务子程序**********************/
void int0(void) interrupt 0 using 2
{
EA=0;/*不懂/
for(k=0;k<10;k++)
{Delay0_9ms();
for(j=18;j>0;j--)
for(k=20;k>0;k--) ;
}
/***************************延时1ms子程序**********************/

红外遥控电子密码锁设计

红外遥控电子密码锁设计

福建信息职业技术学院毕业设计(论文) 题目红外遥控电子密码锁设计学生姓名王翔学号**********专业班级通信技术指导教师卓秀钦学院福建信息职业技术学院答辩日期2012.06.12摘要目前大部分的锁采用的都是机械式的,其最大的缺点是利用简单工具就能很容易地把锁打开。

针对这种情况,我们设计了一种红外遥控密码锁,而一般设备都采用专用的遥控编码及解码集成电路,其制作简单、容易,但由于特定功能的限制,只适用于专用的电器产品,其应用范围受到限制。

本设计由红外接收头hs0038(红外接收频率为38khz)和AT89C51控制的接收部分构成。

采用单片机进行遥控系统的应用设计,具有编程灵活多样,电路结构清晰。

整个设计具有遥控开锁,本机控制开锁,密码修改等功能,可在密码外泄的情况下及时修改密码,具有保密性好、安全可靠、成本低廉、连接方便,简单易用,适用范围广等特点,而且特别适合家庭,宾馆,仓库,私家车库等场所。

关键词:红外遥控、红外接收、单片机、密码修改ABSTRACTMost of the lock is adopted, the largest of the mechanical faults are using simple tools can easily open the lock. In view of this situation, we designed a kind of infrared remote locks, and general equipment adopts remote coding and decoding the special-purpose integrated circuits, its production is simple, easy, but due to the particular function limit, applies only to the product, its special electrical application scope is limited.This design by infrared receiving head hs0038 (ir) and 38khz receive frequency for receiving part of AT89C51 control. On the remote control system adopts single-chip microcomputer application programming design, flexible, circuit structure is clear. The design has the remote control of the lock, lock, the password revision and so on the function, may in the circumstance timely leaked password revision password, have good secrecy, safe and reliable, low cost, simple, easy-to-use, and wide application scope, and special features for family, hotel, warehouse, private garage and etc.Keywords: infrared remote control , infrared receiving, MCU, password revisio目录第一章绪论 (1)1.1 设计背景 (1)1.2 市场前景 (2)1.3 设计依据 (2)1.4 设计任务 (2)1.4.1 设计的主要内容及功能 (2)1.4.2 技术指标 (3)第二章方案设计 (4)2.1 设计思路 (4)2.2 系统结构 (4)2.2.1 遥控发射部分 (4)2.2.2 主机接收部分 (5)2.3 红外通信原理 (6)2.3.1 红外通信简介 (6)2.3.2 红外信号编码 (6)2.3.3 遥控信号接收 (8)2.4 单片机串行通信原理 (9)2.4.1 串行通信基础 (9)2.4.2 串行通信中串行I/O和数据的实现 (10)2.4.3 串行口的选择及波特率的计算 (11)第三章硬件电路调试 (12)3.1 系统硬件原理图 (12)3.2 单片机系统 (13)3.2.1 主要特性 (14)3.2.2 管脚说明 (15)3.2.3 振荡器特性 (16)3.2.4 芯片擦除 (16)3.2.5 复位电路 (17)3.2.6 振荡电路 (18)3.3 红外发射电路 (18)3.4 红外接收电路 (19)3.4.1 HS0038概述 (20)3.4.2 特性 (20)3.4.3 工作原理 (21)3.5 矩阵键盘 (21)3.5.1 矩阵键盘原理 (21)3.5.2 矩阵键盘按键识别方法 (22)3.5.3 设计键盘说明 (23)3.6 显示电路 (23)3.6.1 LCD1602引脚连接 (23)3.6.2 指令集 (25)3.7 看门狗电路 (26)3.8 开锁电路 (27)3.8.1 电磁继电器的工作原理和特性 (28)3.8.2 电磁式继电器的主要参数 (28)3.9 报警电路 (29)3.10 电源电路 (29)第四章软件调试 (30)4.1 遥控发射部分程序设计 (30)4.1.1 主程序流程图 (30)4.1.2 中断服务程序 (31)4.1.3 按键子程序 (31)4.1.4 判键闭合子程序 (32)4.1.5 延时10ms子程序 (33)4.1.6 键值判别子程序流程图 (34)4.1.7 脉冲发射子程序流程图 (35)4.2 主机接收部分程序设计 (36)4.2.1 主程序设计 (36)4.2.2 中断服务程序 (36)4.2.3 解码子程序 (38)4.2.4 密码识别子程序 (39)4.2.5 显示子程序 (40)4.2.6 报警子程序 (41)4.2.7 修改密码子程序 (42)第五章总结 (44)参考文献 (46)致谢 (47)附录 (48)附录1 程序清单 (48)附录2 英文资料及其翻译 (65)第一章绪论1.1 设计背景现代社会盗窃事件频频发生,主要因为传统的机械锁具结构简单、制作工艺落后,无法阻止技术手段的破坏。

基于AT89C51单片机红外遥控系统毕业设计(3)

基于AT89C51单片机红外遥控系统毕业设计(3)

常州机电职业技术学院毕业设计(论文)说明书作者:袁水荣学号:40931418系部:电气工程系专业:应用电子(设计与制造)题目:基于AT89C51单片机红外遥控系统指导者:评阅者:年月毕业设计(论文)中文摘要毕业设计(论文)外文摘要目录1 绪论 (5)1.1 课题设计目的及意义 (5)2 系统的硬件结构设计 (6)2.1 AT89C51系列单片机功能特点 (6)2.2 红外发射电路 (9)2.3 红外检测接收电路 (10)2.4 光电耦合控制电路 (11)2.5 电源电路设计 (13)2.6 显示部分的设计 (13)2.7 键盘设计 (15)3 系统软件的设计 (17)3.1 定时/计数器应用 (17)3.2 红外接收 (19)3.3 调速单元 (20)结论 (22)致谢 (23)参考文献 (24)附录 (25)附录1:发射程序 (25)附录2:接收程序 (28)附录3:红外发射电路图 (32)附录4:红外接收电路图 (33)1绪论1.1课题设计目的及意义随着科技的发展,人们生活的节奏也越来越快,随之人们对方便,快捷的要求也随之不断增高。

遥控器的出现,在一定程度上满足了人们这个要求。

遥控器是由高产的发明家Robert Adler在五十年代发明的。

而红外遥控是20世纪70年代才开始发展起来的一种远程控制技术,其原理是利用红外线来传递控制信号,实现对控制对象的远距离控制,具体来讲,就是有发射器发出红外线指令信号,有接收器接收下来并对信号进行处理,最后实现对控制对象的各种功能的远程控制。

红外遥控具有独立性、物理特性与可见光相似性、无穿透障碍物的能力及较强的隐蔽性等特点。

随着红外遥控技术的开发和迅速发展,很多电器都应用了红外遥控,而电风扇也不例外。

从单纯的在电风扇面板上通过按钮控制,到短距离(10M以内)的遥控,虽然改变不大,但其带来的便利无疑是巨大的。

而红外遥控技术的成熟,也使得遥控电风扇变得设计简单,价格低廉。

基于keilc51的红外遥控器解码设计

基于keilc51的红外遥控器解码设计

文章编号:1001-9227(2003)06-0011-04基于keil c51的红外遥控器解码设计戴培山 冯成德 刘 栋(四川大学制造学院人机所 成都,610065) 摘 要:介绍了红外遥控器设计的原理,实现了一种利用MCS-51单片机的外部中断口实现红外遥控的接收装置,设计了简洁的keil c51红外接收程序。

该装置集成化高,接收程序的通用性好,可以防止多个红外遥控器的混用和干扰,易于移植到其他红外遥控接收装置。

关键词:MCS-51单片机 keil c51 脉冲间隔 外部中断 计时/计数器ABSTRACT:The article introduced the design theory and method of the infrared rem ote controller’s decoder system,realize a system with I NT0and I NT1of MCS-51single-chip com puter.The system has high com positive, and the program can be used by other micro controller only changing a little.KEY WORDS:MCS-51 keil c51 Interval of pulse Outer interrupt T imer/C ounter中图分类号:TP274文献标识码:B0 引 言红外遥控器可以通过非接触的方式实现对控制系统的操纵,不影响周边环境、不干扰其它电器设备,编解码容易,可进行多路遥控。

在一些比较恶劣的环境中使用遥控器,可以保护操作者的安全。

它设计简单、价格低廉,是一种应用很广的短程遥控系统。

而由于单片机的型号不同,所编的遥控器汇编语言程序也往往不同,可移植性差。

而c语言在这方面有汇编语言所没有的优势。

keil c51用c语言编写单片机程序,书写方便,易于开发出功能复杂的程序,有良好的开发环境,调试方便,可移植性强,出错率低,开发效率高。

基于c51的红外解码源代码

基于c51的红外解码源代码

#include<reg52.h>sbit DQ=P3^2; //接收头的数据输出引脚sbit FM=P2^3; //蜂鸣器的控制端unsigned char dat[4]; //用于接收4个字节的红外数据unsigned char data_code; //用于保存按键值sbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;bit key_on; //定义一个按键闭合标志位,如果按键被按下了,该位置1/*--毫秒级延时函数,参数为多少则延时多少毫秒--*/void delay_ms(unsigned int t){unsigned int a,b;for(a=0;a<t;a++){for(b=0;b<113;b++){;}}}/*定时器0和中断0的初始化函数*/void init(){TMOD=0x01; //定时器0工作在方式1,为16位的定时器EX0=1; //开中断1IT0=1; //低电平触发中断0EA=1; //开总中断}/*对4个字节的红外遥控数据进行解码操作的函数这4个字节数据保存在了dat[i]的数组中返回值为dat[2],它是我们需要的的按键值如果解码成功,会返回正确的dat[2],如果解码失败那么返回的dat[2]=0 */unsigned char de_code(){unsigned char i,j;unsigned char temp; //用于暂存接收到的数据unsigned int high_time,low_time; //分别用于保存高低电平的时间值for(i=0;i<4;i++) //循环4次才能接收完毕4个字节的数据{for(j=8;j>0;j--) //循环8次才能接收完毕一个字节的数据{temp=temp>>1; //数据整体右移一位,用于接收一个位数据TL0=0x00; //定时器0赋初值0TH0=0x00;TR0=1; //打开定时器0,对低电平时间进行计数while(DQ==0) //如果为低电平就一直while语句中此循环{if(TH0>0x03) //如果低电平时间远超过0.56ms了,说明不是0或者1return dat[2]=0x00; //跳出中断并返回一个值为0的按键码,表明本次解码失败}TR0=0; //关闭定时器0low_time=TH0*256+TL0; //计算低电平时间TL0=0x00; //重新装初值0TH0=0x00;TR0=1; //开定时器0,对高电平时间进行计数while(DQ==1){if(TH0>0x08) //如果高电平时间远超过1.69ms了,说明不是0或者1return dat[2]=0xff; //跳出中断并返回一个值为0的按键码,表明本次解码失败}TR0=0; //关定时器0,计算高电平时间high_time=TH0*256+TL0; //计算高电平时间if((low_time<370)||(low_time>640)) //如果高电平时间不是0.56ms左右(远离这个区间)return dat[2]=0x00; //那么返回0,说明解码失败if((high_time>420)&&(high_time<620)) //如果高电平时间在0.56ms左右(在这个区间即可)temp=temp&0x7f; //说明这个位数据为0,保存数据0else if((high_time>1300)&&(high_time<1800)) //如果高电平时间在1.69ms左右(在这个区间即可)temp=temp|0x80; //说明这个位数据为1,保存数据1else return dat[2]=0x00; //如果高电平时间不是1.69ms左右,那么返回0,说明解码失败}dat[i]=temp; //每解码完成一个字节后,对这个字节进行保存}if(dat[2]==~dat[3]) //解码得到的按键值与按键值的反码取反后进行比较{ //如果一致,则说明解码成功FM=0; //蜂鸣器发声,播报解码成功key_on=1; //置1,表明按键被按下return dat[2]; //返回这个解码成功的按键值}else return dat[2]=0x00; //如果不一致,那么返回0,说明解码失败}void int0_ISR() interrupt 0{unsigned int high_time,low_time; //分别用于保存高低电平的时间值EX0=0; //关闭中断TL0=0x00; //装初值0TH0=0x00;TR0=1; //开定时器0while(DQ==0) //{if(TH0>0x25) //如果低电平时间远超过9ms了,说明不是引导码{EX0=1; //开中断0,准备下次中断return; //跳出此次中断}}TR0=0;low_time=TH0*256+TL0;TL0=0x00;TH0=0x00;TR0=1;while(DQ==1){if(TH0>0x20) //如果高电平时间远超过4.5ms了,说明不是引导码{EX0=1; //开中断0,准备下次中断return; //跳出此次中断}}TR0=0; //关定时器0,计算电平时间high_time=TH0*256+TL0; //计算高电平时间if((low_time>7800)&&(low_time<8800)&&(high_time>3600)&&(high_time<4700))//如果低电平在9ms左右,高电平在4.5ms左右,说明为引导码data_code=de_code(); //对引导码后面的32位数据进行解码接收,并获得按键值EX0=1; //解码接收完成后,开中断delay_ms(30); //延时30ms,让蜂鸣器发声30msFM=1; //停止发声}void main(){init();while(1){if(key_on==1) //如果按键被按下了,那么就执行相应按键的操作{key_on=0; //按键标志位清0switch(data_code){case 0x45: L0=~L0; break; //此按键被按下,就对L0进行控制case 0x46: L1=~L1; break; //此按键被按下,就对L1进行控制case 0x47: L2=~L2; break; //此按键被按下,就对L2进行控制case 0x44: L3=~L3; break; //此按键被按下,就对L3进行控制case 0x40: L4=~L4; break; //此按键被按下,就对L4进行控制case 0x43: L5=~L5; break; //此按键被按下,就对L5进行控制case 0x07: L6=~L6; break; //此按键被按下,就对L6进行控制case 0x15: L7=~L7; break; //此按键被按下,就对L7进行控制default:break;}}}}。

红外设计

红外设计
一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。
(四)、红外光敏二极管
红外接收头也可以采用自己设计红外光敏二极管、放大电路加解调电路。从价格和电路复杂程度方面考虑,红外接收头是首要选择。
四、红外发射头使用
红外发射头结构简单,采用红外线发射管和限流电阻直接接单片机引脚实现。人们习惯把红外线发射管和红外线接收管称为红外对管。红外对管的外形与普通圆形的发光二极管类似。初接触红外对管者,较难区分发射管和接收管。
(三)、
目前市售红外一体化接收头有两种:电平型和脉冲型,绝大部分的都是脉冲型的,电平型的很少。
电平型的,接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。
脉冲型的,只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平。其内部放大及脉冲整形是电容耦合的,所以不能能够接收及输出连续的信号。
TCCR0 |= (1 << CS00) ; //T/C0工作于普通模式,不分频
TCNT0 =-65;
sei(); //使能全局中断
while(1)
{
_delay_ms(1000.0);
SendIRdata(123);
}
}
//T/C0计数溢出中断服务程序
ISR(TIMER0_OVF_vect ) //PORTD口形成38khz信号。
//----38khz-------
#define RC_4m5s171
#define RC_m56s42
#define RC_1m685s126
int main(void)
{

红外遥控解码程序

红外遥控解码程序

红外遥控解码程序红外接收头的型号有很多HS0038 VS838等功能⼤致相同,只是引脚封装不同。

红外接收有⼏种统⼀的编码⽅式,采样哪种编码⽅式取决于遥控器使⽤的芯⽚,接收头收到的都是⼀样的。

电视遥控器使⽤的是专⽤集成发射芯⽚来实现遥控码的发射,如东芝TC9012,飞利浦AA3010T等,通常彩电遥控信号的发射,就是将某个按键所对应的控制指令和系统码(由0和1组成的序列),调制在38KHz的载波上,然后经放⼤、驱动红外发射管将信号发射出去。

不同公司的遥控芯⽚,采样的遥控码格式也不⼀样,较普遍的有两种,⼀种NEC标准,⼀种是PHILIPS标准。

NEC标准:遥控载波的频率为38KHz(占空⽐1:3)当某个键按下时,系统⾸先发射⼀个完整的全码,如果按键超过108ms仍未松开,接下来发射的代码(连发代码)将由起始码(9ms)和结束码(2.5ms)组成。

⼀个完整的全码 = 引导码 +⽤户码 +⽤户码 + 数据码 + 数据码 + 数据反码。

其中,引导码⾼电平9ms,低电平4.5ms;系统码8位,数据码8位,共32位;其中前16位为⽤户识别码,能区别不同的红外遥控设备,以防⽌不同的机种遥控码互相⼲扰。

后16位为8位的操作码和8位的操作反码,⽤于核对数据是否接收准确。

收端根据数据码做出应该执⾏上⾯动作的判断。

连发代码是在持续按键时发送的码。

它告知接收端。

某键是在被连续的按着。

NEC标准下的发射码表⽰发射数据0时⽤”0.56ms⾼电平 + 0.565ms低电平 = 1.125ms”表⽰;数据1⽤”⾼电平0.56ms + 1.69ms = 2.25ms”表⽰。

遥控器发射信号:需要注意的是:当⼀体化接收头收到38kHz红外信号时,输出端输出低电平,否则为⾼电平。

所以⼀体化接收头输出的波形和发射波形是反向的PHILIPS标准:载波频率38KHz:没有筒,点按键时,控制码1和0之间切换,若持续按键,则控制码不变。

⼀个全码 = 起始码’11’ +控制码 + ⽤户码 + ⽤户码数据0⽤“低电平1.778ms + ⾼电平1.778ms”表⽰;数据1⽤“⾼电平1.778ms + 低电平1.778ms”表⽰。

基于MCS51单片机的红外线解码系统设计

基于MCS51单片机的红外线解码系统设计

JNC TT
;如果为0就跳转到TT
MOV R4,#2
;延时1000微秒
Hale Waihona Puke D6:MOV R5,#248
DJNZ R5,$
DJNZ R4,D6
;检测到高电平1的话延时1毫秒等
待脉冲高电平结束
TT:
MOV A,@R1 ;将R1中地址的给A
RRC A
;将C中的值0或1移入A中的最低位
MOV @R1,A ;
DJNZ R3,SS ;接收满8位换一个内存
低成本、高可靠性、体积小、结构简单、避免人身伤害等优
点,是一种先进的控制方式,具有广阔的应用前景。
一、单片机解码程序设计
单片机在进行解码时,首先根据SM0038所传输过来的信号
判断是否有红外信号,若检测红外信号,则单片机产生中断,
进入中断处理程序,对红外线信号进行解码,单片机程序使用
汇编设计,采用查询方式确定是否有红外线信号,其解码查询
基于MCS51单片机的红外线解码系统设计
李春燕
(重庆市铜梁职业教育中心)
摘 要:本文通过对通用红外线遥控器编码系统的研究,
利用MCS51系列单片机对红外线进行解码,实现了红外线解码系
统,并利用单片机的串行通信接口与通用计算机进行通信,实
现了计算机上位机显示软件的设计。
关键词:MCS-C51 红外线 解码 串行通信
INC R1
;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完所有数据
EXIT:
#pragma endasm
上位机程序设计
上位程序使用微软基于.NET的新一代程序设计语言C#(读
作C SHARP),该语言是一种安全的语言,具有内存自动回收功

51单片机红外遥控解码,很详细(汇编语言,C语言等)

51单片机红外遥控解码,很详细(汇编语言,C语言等)
//k[i]=TH0;
//i++;
if(TH0<3)
b=1;
else b=0;
TH0=0;
TL0=0;
}
uchar hw_key()
{
uchar j,m;
//i=0;
hw_start(); //等待低电平到来
hw_pulse();
for(j=0;j<24;j++) //测试用户码脉冲宽度
{
hw_pulse();
}
for(j=0;j<8;j++) //测试键码脉冲宽度
{
hw_pulse();
if(b==1)
m=(m<<1)|1;
else
m<<=1;
}
return m; //键码
}
while(in==0); //高电平到了,
TR0=0; //关闭定+;
TH0=0;
TL0=0;
TR0=1; //高电平到了,启动定时器1,测试高电平宽度
while(in==1); //低电平到了,
TR0=0; //关闭定时器1,高电平宽度测试完
请注意甄别内容中的联系方式诱导购买等信息谨防诈骗
51单片机红外遥控解码,很详细(汇编语言,C语言等)
单片机源程序如下:
#include
#define hw_hs0038_ENTITY
#include "hw_hs0038.h"
sbit in=P3^2;
//uchar i=0;
//uchar k[2];
bit bdata b=0;
/*
void timer0(void) interrupt 1 using 1

HS0038B 红外接收一体头 红外解码

HS0038B 红外接收一体头 红外解码

HS0038B
Vishay Telefunken Absolute Maximum Ratings
Tamb = 25_C Parameter Supply Voltage Supply Current Output Voltage Output Current Junction Temperature Storage Temperature Range Operating Temperature Range Power Consumption Soldering Temperature Test Conditions (Pin 3) (Pin 3) (Pin 1) (Pin 1) Symbol VS IS VO IO Tj Tstg Tamb Ptot Tsd Value –0.3...6.0 5 –0.3...6.0 5 100 –25...+85 –25...+85 50 260 Unit V mA V mA °C °C °C mW °C
0
5
10 time [ms]
15
20
Figure A: IR Signal from Fluorescent Lamp with low Modulation
0
5
10 time [s]
15
20
Figure B: IR Signal from Fluorescent Lamp with high Modulation
HS0038B
Vishay Telefunken
Photo Modules for PCM Remote Control Systems
Description
The HS0038B – series are miniaturized receivers for infrared remote control systems. PIN diode and preamplifier are assembled on lead frame, the epoxy package is designed as IR filter. The demodulated output signal can directly be decoded by a microprocessor. HS0038B is the standard IR remote control receiver series, supporting all major transmission codes.

c51单片机红外解码程序-汇总版和c语言版

c51单片机红外解码程序-汇总版和c语言版

精心整理纯软件解码---汇编版利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低ORG0000HT0ZDBIT20H.2XHBITP3.3;红外接收头数据接口RSBITP2.3RWBITP2.4============================================================JBXH,$;等待电平变低,解码从这开始CLRP2.0;开信号指示灯,表示正在接收信号MOVP0,#8EHSETBTR0;开T0中断LCALLYS3MSJBXH,DDXH;干扰检测LCALLYS3MSJBXH,DDXH;干扰检测DD1:JBT0ZD,DDXH;是否超出接收允许时间JNBXH,DD1;等待电平变高LCALLYS3MSJNBXH,DDXH;干扰检测DD2:JBT0ZD,DDXH;是否超出接收允许时间JBXH,DD2;等待电平变低JSSJ:;信号确认,开始接收数据ZJ:;MOVR7,#100;TSY:MOVR6,#255DJNZR6,$CPLBBDJNZR7,TSYMOVA,#0CDH;键值高位输出LCALLYJP_XZLMOVA,R4MOVB,#10HDIVABMOVCA,@A+DPTRLCALLYJP_XSJMOVA,#0CEH;键值低位输出LCALLYJP_XZLMOVA,BMOVCA,@A+DPTR LCALLYJP_XSJ; LCALLDYBF;调用灯控制子程序LJMPDDXH;返还等待下一次信号YS845:;延时845微秒MOVR7,#255RETRETDIVABMOVCA,@A+DPTR LCALLYJP_XSJMOVA,#0C1H;用户码前低位输出LCALLYJP_XZLMOVA,BMOVCA,@A+DPTR LCALLYJP_XSJMOVA,#0C4H;用户码后高位输出LCALLYJP_XZLMOVA,31HMOVB,#10HDIVABMOVCA,@A+DPTRLCALLYJP_XSJMOVA,#0C5H;用户码后低位输出LCALLYJP_XZLMOVA,BMOVCA,@A+DPTRLCALLYJP_XSJ;============此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例BA7:CJNEA,#52H,BAB;是否8号键按下CPLP1.7;点亮1号灯BAB:RETCSH:;=============液晶初始化===============MOVA,#00111000B;8位数据,双行显示,5-7字型LCALLYJP_XZL;调用写液晶指令MOVA,#00001100B;显示屏开启,光标出现在地址计数器位置,光标不闪烁LCALLYJP_XZL;调用写液晶指令MOVA,#00000110B;光标右移一格,AC值加一,字符全部不动LCALLYJP_XZL;调用写液晶指令MOVA,#81H;LCALLYJP_XZLMOVA,#4CH;L的ASCII码LCALLYJP_XSJMOVA,#83H;LCALLYJP_XZLLCALLYJP_XZLMOVA,#61H;a的ASCII码LCALLYJP_XSJMOVA,#8EH;LCALLYJP_XZLMOVA,#6FH;o的ASCII码LCALLYJP_XSJMOVA,#0C2H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0C6H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0CAH;LCALLYJP_XZLMOVA,#4AH;J的ASCII码LCALLYJP_XSJMOVA,#0CBH;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码RETRETCLRESETBRSCLRRWSETBEMOVP0,A;写数据CLRERET;=========查询忙碌标志============ CHECK_BUSY:PUSHACCBUSY_LOOP:CLRESETBRWCLRRSSETBEMOVA,P0;读取状态JBp0.7,BUSY_LOOPPOPACCLCALLDELRETDEL:MOVR6,#5RET/////////#definezd_cffsIT0///中断触发方式设置#definezd_dkEX0///中断打开设置////#definestc_dsqszAUXR&=0x7F;//定时器时钟12T模式,不需要可在AUXR....前加// ///**************************************************/****************************************************************** *****本程序使用外部中断加定时器来实现红外解码,占用系统软件资******** *****源极少,硬件方面占用了一个外部中断,定时器中断还可以进行******** *****一些简单的运用,软件部分可以做很多的动作,就看你发挥了!**************************************************************************/ #defineshi_jian定时器设置,请勿更改unsignedcharhwyhmh,hwyhml,hwjz,hwsj,hwjmws;///全局变量bithwjmok,yxjm;///全局变量,红外解码OK,允许解码voidmain(void){EA=1;//总中断打开zd_cffs=1;//外部中断_边沿触发方式zd_dk=1;//外部中断_打开ET0=1;//while(1)}}}定时器0{hwjz=0;TR0=0;//}voidZDhwjsCX(void)zd_rkdzusing3{unsignedinta=TH0*256+TL0;TL0=0;TH0=0;TR0=1;///开启T0if(a>shi_jian_*13000&&a<shi_jian_*14000)///if1分支2.判引导码13-14ms {hwsj=0;hwjmws=32;yxjm=1;}elseif(yxjm)///if1分支1.已收到引导码,允许解码{if(a>shi_jian_*11000&&a<shi_jian_*12000&&hwjmws==0)///if2分支1。

C51万能学习型遥控器源程序

C51万能学习型遥控器源程序

#define SEND5P22
#define SEND6P21
#define SEND7P20
#define SEND8P11
#define SEND9P12
#define SEND10P13
#define SEND11P14
#define SEND12P15
#define SEND13P16
temp=SBUF;
if((temp>=0xe0)&&(temp<=0xef))
{
device=temp%16;
r_device=1;
}
else
order=temp;
RI=0;
}
}
void open_scon()
{
SCON=0x40;
REN=1;
void write8(unsigned char d);
unsigned char read(unsigned int addr);
unsigned char read0(unsigned char addr);
void write0(unsigned char addr,unsigned char x);
void send_sharp();
void send_rec();
void rec(unsigned char key);
intcode y=10700;
unsigned char code mask[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
void delay(unsigned int x);

c51解密红外 + c语言红外解码xy

c51解密红外 + c语言红外解码xy

首先说一下想写这个帖子看到论坛上有关于遥控器方面的帖子但是都没有很详细的介绍而且是已经有完整的波形仅仅介绍了解码部分而没有分析波形数据方面的介绍,因此有了写一篇完整的关于遥控器方面的文章的冲动此贴对新手可能有点困难不过不要紧我会以最通俗的方式来解释如果有不明白的建议去看看书,自己努力没有不可能的事别人能做到你也一定行,关于红外遥控的基础理论,大家可以到这个贴去看下/mcu/184.html,里面有详细的介绍。

在这里我仅把一些关键的带出来关于硬件电路那么抛开那么多文字介绍最后意思就是说你家里的遥控板也就是发射部分是把所有的封装好了的比如键盘矩阵、编码调制、LED红外发送器等等那么接受部分SM00383个脚一个脚地一个脚电源一个脚信号脚接到单片机随便个P口上(此处是P3。

6)OK 硬件部分就搞定了当然还有数码管显示,这些肯定不用说你都能搞定吧,我这刚好有一块51hei单片机学习板是在的论坛买的,这些东东都有,所以就不用自己去搭电路那么麻烦了),那么我们想我们按一下遥控板大家看到有个灯闪了一下然后OVER 那么我们现在要做的就是在灯闪了那一下之后让单片机来读它的键码然后不同的键码来干不同的事,本文是向大家解释一种方法当然如果你知道遥控器的编码那么我想写解码程序应该是很简单的事而我的意思是说我们现在从0开始拿到任何一种遥控板那怕不知道它的型号但是大家想即使它什么型号都没写但是按一下不同的键它的发射的脉冲肯定不一样无非就是引导码然后地址码键码验证码因为不同的遥控板它所定义的规则不一样(这里说一点题外话其实在读出波型后大家就可以看出这个遥控板最开始设计时的人的意思或者说考虑它的这个设计方式是否是最好的是否稳定是否具有通用性或者说日本的和中国的设计师在设计时他们所考虑的名牌和杂牌的他们在设计时所考虑的等等这些其实也是件很有意思的事就像偷窥到一个人的内心世界一样扯远了。

--)下面我们来说说本问利用51单片机软件解密的方法首先大家看了我刚才贴出来的连接应该知道了编码无非就是低电平高电平。

单片机实现红外接收解码

单片机实现红外接收解码

单片机实现红外接收解码摘要:接收到红外遥控器的脉冲波形,并通过解析其波形得到红外遥控器的相应解码,实习对相应设备的控制。

本文详细接受红外遥控技术原理并如何通过C51单片机实现红外遥控。

关键字:单片机,红外遥控,解码1.引言遥控器相信大家不会陌生,日常生活中会使用到各种各样的遥控器,比如电视机、DVD 机、空调、机顶盒甚至音响、热水器等都用到遥控器,其实红外技术已经走进与人们的生活并且与人们的生活息息相关了。

红外遥控器作为设备的输入控制具有操作简便、价格便宜等诸多好处。

您可以根据您公司产品需要和遥控器提供商协商定制遥控器,包括遥控器键盘布局、每个按键的键码等。

遥控器键盘上每个按键的键码是一个小于256的一个数值,按键后通过遥控器红外管产生脉冲发送出去,红外接收器接收到脉冲后,对脉冲流进行分析,提取键码值,并按照键码值实现其遥控目的。

2.红外接收原理红外遥控信号接收:红外接收电路可以使用集成接收器,接收器包括红外接收管及信号处理IC,接收器对外只有三个引脚,一个接电源的Vcc脚、一个接地的GND脚、一个脉冲信号输出脚,当然脉冲信号输出脚直接接单片机的某个可以使用的IO脚就可以了。

3.脉冲波形分析:每次按键,红外接收器这边会收到一串脉冲宽度不等的脉冲波形流,其脉冲流由35个脉冲波形构成:前导码:第1个脉冲波形用户码1:第2到第9个脉冲波形用户码2:第10到第17个脉冲波形键码:第18到第25个脉冲波形键码反码:第26到第33个脉冲波形连续按键脉冲:第34和第35个脉冲为结束脉冲(也即连续按键脉冲),在每次按键结束后会有两个结束脉冲,如果一直按键不放的话,会一直发送连续按键脉冲,并可以认为在收到10个连续按键脉冲后是下一个按键。

注意:不同的遥控器产生的用户码值可能不一样,笔者碰到两种不同的用户码:0x00,0xFF及0x04,0x7F。

脉冲流中有四种不同的脉冲波形宽度:其中前导码脉宽为:40(4ms) < 脉冲宽度< 50(5ms)连续按键脉宽为: 21(2.1ms) < 脉冲宽度 < 25(2.5ms)bit "0" 脉宽为: 3(0.3ms) < 脉冲宽度 < 7(0.7ms)bit "1" 脉宽为: 14(1.4ms) < 脉冲宽度 < 19(1.9ms)在收到一串脉冲流后,就要对其进行分析,先要检测第一个脉冲波形是不是前导码,如果不是,则继续检测前导码,如果是则检测如下32个脉冲波形:用户码1为1字节,由8个脉冲波形组成(其中一个脉冲波形表示字节中1 bit );用户码2为1字节; 键值为1字节;键值反码为1字节,键值反码为键值取反值。

IRHS0038解码程序

IRHS0038解码程序
//初始时,IR数据线被拉高,当IR接收到数据时,被拉低
//所以这里的外部中断1,用下降沿来搞!
MY_NVIC_Init(0,0,EXTI1_IRQChannel,2);
//
}
//检测脉冲宽度
//IR向单片机发送的解码波长
//同步码头:9ms低电平+4.5ms高电平
//0 : 0.56ms低电平+0.56ms高电平
REMOTE_RDY=0;//帧接收标志清零
if(t1==(u8)~t2&&t1==REMOTE_ID) //地址码和地址反码校验正确
{
t1=REMOTE_ODR>>8;//获取控制码
t2=REMOTE_ODR;//获取控制反码
if(t1==(u8)~t2)return(t1); //控制码和控制反码校验正确
else if(RES>=10&&RES<50)RODATA=0;//接收到0
if(OK)
{
REMOTE_ODR<<=1;//接收发送过来的字节
REMOTE_ODR+=RODATA; //最开始接收字节最高位!(这个可以自定义!)
REMOTE_CNT=0;//按键次数清零
}
}
}
EXTI->PR=1<<1; //清除line1中断标志位
//1 : 0.56ms低电平+1.68ms高电平
//连发码:9ms低电平+2.5ms高电平+0.56ms低电平+97.94ms高电平
u8 PULSE_WIDTH_CHECK(void)
{
u8 t=0;
while(RDATA)//有高电平过来!

基于C51的红外线解码

基于C51的红外线解码

课题:红外解码课程设计前言传统的遥控器大多数采用了无线电遥控技术,但是随着科技的进步,红外线遥控技术的成熟,红外也成为了一种被广泛应用的通信和遥控手段。

继彩电、录像机之后,在录音机、音响设备、空调机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。

工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。

所以采用单片机进行遥控系统的应用设计,遥控装置将同时具有编程灵活、控制范围广、体积小、功耗低、功能强、成本低、可靠性高等特点,因此采用单片机的红外遥控技术具有广阔的发展前景。

本设计主要研究并设计一个基于单片机的红外接收系统,并实现对电视遥控器的解码及编码值显示。

控制系统主要是由51系列单片机、电源电路、红外遥控器发射、红外接收电路、数码管显示电路等部分组成,红外接收头接收到的编码信息通过单片机处理,单片机根据不同的遥控器按键信息进行处理并在数码管上相应的显示相应的按键值编码信息以加深对红外编码的理解。

第1章红外解码系统分析第1节设计要求整个控制系统的设计要求:被控设备的控制实时反应,从接收信号到信号处理及对设备控制反映时间应小于1s;整个系统的抗干扰能力强,防止误操作;整个系统的安装、操作简单,维护方便;成本低。

红外载波、编码电路设计要求:单片机定时器精确产生38KHz红外载波;根据控制系统要求能对红外控制指令信号精确编码并迅速发送。

红外解码电路设计要求:精确接收红外信号,并对所接收信号进行解码、放大、整形、解调等处理,最后输出信号;对非红外光及边缘红外光抗干扰能力强。

设备扩展模块设计要求:直流控制交流;抗干扰能力强;反应迅速不产生误动作;能承受大电流冲击。

第2节总体设计方案2.1 方案论证(一)单片机控制器模块方案一:采用目前比较通用的51系列单片机。

此单片机的运算能力强,软件编程灵活,自由度大,市场上比较多见价格便宜且技术比较成熟容易实现。

方案二:采用16 位单片机SPCE061A 作为控制核心。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<4;i++) //通过串口将代码发出
{
SBUF=IRcode[i];
while(!TI); //等待一个字节发送完毕
TI=0;
}
Delay();
/******************************************************************/
#include <REGX52.h>
#define uchar unsigned char
uchar data IRcode[4]; //定义一个4字节的数组用来存储代码
{uchar i,j;
for(i=2;i>0;i--)
for(j=230;j>0;j--) ;
}
/***************************延时4.5ms子程序**********************/
void Delay4_5ms(void)
{uchar i,j;
EA=1; //开所有中断
CodeTemp=0; //初始化红外编码字节缓存变量
Delay();
while(1);
}
TL1=0xff;
TR1=1;
}
/**************************主程序*************************/
void main()
{ initUart();
IT0=1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
EX0=1; //外部中断INT0开, (1:开, 0:关 )
{while(IRsignal==0);
Delay4_5ms(); //跳过持续4.5ms的高电平
for(i=0;i<4;i++) //分别读取4个字节
{for(j=1;j<=8;j++) //每个字节8个bit的判断
{Delay1ms();
CodeTemp=CodeTemp|0x80;
if(j<8) CodeTemp=CodeTemp>>1;
}
else
/******************************************************************/
/* 本程序的蓝本从网上搜集,经本人修改并注释,万能遥控器解码成功 */
/* 晶振:11.0569MHz */
/* 整理与测试:中国矿业大学 CUMTSUN */
if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
}
IRcode[i]=CodeTemp;
CodeTemp=0;
}
uchar CodeTemp; //编码字节缓存变量
uchar i,j,k; //延时用的循环变量
sbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)
/**************************延时0.9ms子程序**********************/
}
}
EA=1;
}
/***********************串口初始化程序*********************/
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
P00bps @ 11.0592MHz
void Delay0_9ms(void)
{uchar j,k;
for(j=18;j>0;j--)
for(k=20;k>0;k--) ;
}
/***************************延时1ms子程序**********************/
void Delay1ms(void)
for(j=200;j>0;j--)
for(k=3;k>0;k--) ;
}
/************************中断0解码服务子程序**********************/
void int0(void) interrupt 0 using 2
/************************* 说 明 *********************************/
/* 以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码 */
/* 前16位为8位用户码及其反码,后16位为8位的操作码及其反码 */
{ while(IRsignal==0); //等待上升沿
Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
{
EA=0;
for(k=0;k<10;k++)
{Delay0_9ms();
if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
{k=10;break;}
else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
/* 以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示"0"; */
/* 以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示"1"。 */
/* 注意:接收码的脉宽与间隔是对发射码取反的,即间隔是0.565ms */
for(i=10;i>0;i--)
for(j=225;j>0;j--) ;
}
/**************************** 延时子程序 ************************/
void Delay(void)
{uchar i,j,k;
for(i=200;i>0;i--)
本例针对以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码,前16位为8位用户码及其反码,后16位为8位的操作码及其反码。
以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示"0";以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示"1"。注意:接收码的脉宽与间隔是对发射码取反的,即间隔是0.565ms.
相关文档
最新文档