51单片机设计的红外线遥控器
- 格式:doc
- 大小:349.00 KB
- 文档页数:4
基于51单片机的红外遥控小车设计和制作红外遥控小车设计和制作是一个有趣且实用的项目。
本文将介绍一个基于51单片机的红外遥控小车的设计方案和制作过程。
设计方案:1.硬件设计:-采用STC89C52单片机作为控制核心,具有良好的性能和稳定性。
-红外接收器模块:用于接收红外信号并将其转换为电信号。
-直流电机:用于驱动小车的轮子,实现前进、后退、转弯等动作。
-驱动电路:将单片机的输出信号转换为合适的电流和电压来驱动电机。
-电源:使用锂电池作为电源,提供所需的电能。
2.软件设计:-红外信号解码:将接收到的红外信号进行解码,并判断是前进、后退、转弯等命令。
-控制逻辑:根据解码结果产生相应的电信号,驱动电机实现小车的相应动作。
-响应机制:处理红外信号的时延和干扰,避免误操作或信号丢失。
制作过程:1.连接电路:-将STC89C52单片机与电源、红外接收器模块和驱动电路连接。
确保连接正确、稳定。
-连接直流电机和驱动电路,通过电路板或者线缆进行连接,确保电机可以正确驱动。
2.烧录程序:- 使用Keil C编译器编写控制程序,并将程序通过编程器烧录到STC89C52单片机中。
3.完善控制逻辑:-在控制程序中添加红外信号解码和控制逻辑代码,使小车能够根据接收到的红外信号做出相应动作。
4.调试和测试:-将红外遥控器对准红外接收器模块,发送不同的红外信号,确保小车能够正确接收和处理信号。
-确保小车能够根据接收到的信号做出正确的动作,如前进、后退、转弯等。
5.完善功能:-可以根据实际需求添加其他功能,如声控、避障、图像识别等,提升小车的智能性和功能性。
通过以上设计和制作过程,一个基于51单片机的红外遥控小车就可以完成。
这个小车可以通过红外遥控器进行远程控制,并实现前进、后退、转弯等动作。
它可以在室内或者室外进行运行,并具有一定的智能性和便携性。
这个项目不仅可以培养学生的动手能力和创造力,还可以加深对电子电路和嵌入式系统的理解和掌握。
天津职业大学二○一五~二○一六学年第1学期电子信息工程学院通信系统综合实训报告书课程名称:通信系统综合实训班级:通信技术(5)班学号:1304045640 1304045641 1304045646姓名:韩美红季圆圆陈真真指导教师:崔雁松2015年11月17日一、任务要求利用C51单片机设计开发一套红外线收发、显示系统。
具体要求:●编写相关程序(汇编、C语言均可);●用Proteus绘制电路图并仿真实现基本功能;●制作出实物二、需求分析(系统的应用场景、环境条件、参数等)现在各种红外线技术已经源源不断进入我们的生活中,在很多场合发挥着作用。
机场、宾馆、商场等的自动门,会在人进出时自动地开启和关闭。
原来,在自动门的一侧有一个红外线光源,发射的红外线照射到另一侧的光电管上,红外线是人体察觉不到的。
当人走到大门口,身体挡住红外线,电管接收不到红外线了。
根据设计好的指令,触发相应开关,就把门打开了。
等人进去后,光电管又可以接到红外线,恢复原来的线路,门又会自动关闭。
因此这种光电管被称为“电眼”,在许多自动控制设备中大显身手。
在家庭中,许多电子设备如彩色电视、空调、冰箱和音响等,都使用了各种“红外线遥控器”。
利用它我们可以非常方便的转换电视频道或设定空调的温度档次。
三、概要设计(系统结构框图/系统工作说明流程图)红外线收发、显示系统硬件由以下几部分组成:红外遥控器,51单片机最小系统,接收放大器一体集成红外接收头,LED灯显示电路。
红外线接收是把遥控器发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。
这些工作通常由一体化的接收头来完成,输出TTL兼容电平。
最后通过解码把脉冲信号转换成数据,从而实现数据的传输。
红外遥控系统电路框图四、详细设计(Proteus电路图、程序流程图、源程序清单)1)Proteus电路图:2)程序流程图:程序是首先初始化红外接收端口,然后检测是否接收红外信号,如果接收到红外信号就调用接收子程序,然后就通过L 额度LED 显示当前按键的结果,如图所示:程序流程图3)源程序清单:#include<reg51.h> //头文件#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字符型数。
毕业设计(论文)卧室电器用红外遥控器(基于51单片机的红外遥控器设计)Bedroom Appliances With The Infrared Remote Control(Based on 51 single-chip infrared remote control design)完成日期 2012 年 4 月摘要红外遥控是目前家用电器中用得较多的遥控方式。
我们知道,红外线是人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。
比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
常用的红外遥控系统一般分发射和接收两个部分。
发射部分的主要元件为红外发光二极管。
很多电器都采用红外遥控,那么红外遥控的工作原理是什么呢?本文将介绍其原理和设计方法。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的,在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。
也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。
接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。
“脉冲”输出是当按发射端按键时,接收端对应输出端输出一个“有效脉冲”,宽度一般在100ms左右。
一般情况下,接收端除了几位数据输出外,还应有一位“数据有效”输出端,以便后级适时地来取数据。
这种输出形式一般用于与单片机或微机接口。
除以上输出形式外,还有“锁存”和“暂存”两种形式。
所谓“锁存”输出是指对发射端每次发的信号,接收端对应输出予以“储存”,直至收到新的信号为止;“暂存”输出与上述介绍的“电平”输出类似。
70年代研制出的红外遥控技术,随着大规模集成电路和微处理技术的发展和成熟,红外线遥控系统也迅速发展并得到广泛的应用,特别是在家用电器上的成功应用,给人们的工作、生活和娱乐带来了极大的方便,随着城市居民生活水平的提高,家庭里家用电器的种类和数量逐步增加,与之配套的红外遥控发射器也越来越多关键词:80c51单片机、红外发光二极管、晶振SummaryThe infrared remote control home appliances used more remote way. We know that infrared is the human eye can see the visible light wavelength from long to short arrangement, followed by red, orange, yellow, green, blue, blue, purple. Which the red wavelength range of 0.62 ~ 0.76μm; violet wavelength range of 0.38 ~ 0.46μm. Shorter than the violet wavelengths of light called ultraviolet light than the red wavelength of light called infrared. Infrared remote control is the use of a wavelength of between 0.76 ~ 1.5μm near-infrared to transmit control signals. Infrared remote control systems are generally divided into transmit and receive two parts. The main components of the emission part of the infrared light-emitting diodes.Many electrical appliances are using the infrared remote control, infrared remote control works what is it? This article describes the principle and design method. Infrared remote common carrier frequency of 38kHz, which is determined by the 455kHz crystal used by the transmitter, the transmitter crystal is the integer frequency divider factor generally take 12, so 455kHz ÷12 ≈37.9 kHz ≈38kHz. Remote control system uses 36kHz, 40kHz, 56 kHz, generally determined by the oscillation frequency of the transmitter crystal. The receiving end of the output state can be broadly divided into the pulse level, self-locking, interlocking, data five forms. "Pulse" output is press the transmitter button, the receiver corresponds to the output terminal an "effective pulse", width of about 100ms. Under normal circumstances, the receiver in addition to several data output, there should be a "data valid" output, so that after the class in a timely manner to take the data. The form of this output is generally used to interface with a microcontroller or microprocessor. In addition to the output in the form above, as well as "latch" and "temporary" in two forms. The so-called "latch output signal issued by each transmitter, the receiver corresponds to the output to be" stored "until they receive the new signal; similar to the output of" temporary "output of the above described level.Infrared remote control technology developed in the 1970s, with large-scale integrated circuits and micro-processing technology to develop and mature, infrared remote control system for the rapid development and wide range of applications, especially in the successful application of household appliances, to the people, live and play has brought great convenience, with the improvement of living standards, urban residents, the type and number of household appliances in the family gradually increase, more and more infrared remote control transmitter accompanyingKeywords: 80C51 microcontroller, infrared light-emitting diodes, crystal目录第一章1、引言 (6)2、红外线遥控电路的设计 (6)2、1设计要求与指标: (6)2.1.1、红外线遥控系统组成 (7)2.1.2、红外线遥控系统框图 (7)2.1、电路设计 (7)2.1.1、红外线遥控调光电路介绍 (7)2.1.2、电路组成 (8)2.1.3、电路工作原理 (10)2.1.4、芯片引脚及功能 (10)2.1.5、元器件的功能 (12)2.1.6、其他电路设计方案介绍 (17)3、安装与测试 (20)3.1、红外线遥感发射系统设计 (20)3.2、红外线发射电路设计 (22)3.3、调试与检测安全分析 (27)第二章1、引言 (28)2、原理图设计 (29)2.1、绘制PCB图 (35)3、红外线遥控系统设计 (46)4、系统功能实现方法 (50)5、红外线接收电路 (52)6、软件设计 (53)7、调试结果及分析 (54)8、结论 (55)附录 (55)参考文献 (61)致谢 (62)绪论人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
51单片机设计的红外线遥控器电路图及工作原理你家里是否有一个电视机遥控器或者空调机遥控器呢?你是否也想让它遥控其他的电器甚至让它遥控您的电脑呢?那好,跟我一起做这个“红外遥控解码器”。
该小制作所需要的元件很少:单片机TA89C2051一只,RS232接口电平与TTL电平转换心片MAX232CPE 一只,红外接收管一只,晶振11.0592MHz,电解电容10uF4只,10uF 一只,电阻1K1个,300欧姆左右1个,瓷片电容30P2个。
发光二极管8个。
价钱不足20元。
电路图及原理:主控制单元是单片机AT89C2051,中断口INT0跟红外接受管U1相连,接收红外信号的脉冲,8个发光二极管作为显示解码输出(也可以用来扩展接其他控制电路),U3是跟电脑串行口RS232相连时的电平转换心片,9、10脚分别与单片机的1、2脚相连,(1脚为串行接收,2脚为串行发送),MAX232CPE的7、8脚分别接电脑串行口的2(接收)脚、3(发送脚)。
晶振采用11.0592MHz,这样才能使得通讯的波特率达到9600b/s,电脑一般默认值是9600b/s、8位数据位、1位停止位、无校验位。
电路就这么简单了,现在分析具体的编程过程吧。
如图所示,panasonic遥控器的波形是这样的(经过反复测试的结果)。
开始位是以3.6ms低电平然后是3.6ms高电平,然后数据表示形式是0.9ms低电平0.9ms 高电平周期为1.8ms表示“0”,0.9ms低电平2.4ms高电平周期为3.3ms表示“1”,编写程序时,以大于3.4ms小于3.8ms高电平为起始位,以大于2.2ms小于2.7ms高电平表示“1”,大于0.84ms小于1.11ms高电平表示“0”。
因此,我们主要用单片机测量高电平的长短来确定是“1”还是“0”即可。
定时器0的工作方式设置为方式1:mov tmod,#09h,这样设置定时器0即是把GATE置1,16位计数器,最大计数值为2的16次方个机器周期,此方式由外中断INT0控制,即INT0为高时才允许计数器计数。
//51单片机做的红外遥控实验(C语言)#include<reg51.h>#define u8 unsigned char#define u16 unsigned int#define ID 0x00 //本遥控器的ID号sbit ir=P3^3;code u8 seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的段码code u8 s[]={1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E}; u8 buf[4];bit ir_f=0;u8 nu;void delay(u16 x){while(x--);}void show(u16 x){u8 i=0,k=0;u8 s[4];kk:s[i]=x%10;if((x/10)>=1){x=x/10;i++;goto kk;}k=i+1;for(i=0;i<k;i++){P0=seg[s[i]];P2=~(8>>i);delay(300);P0=0XFF;P2=0XFF;}}void timer0_init(){TH0=0;TL0=0;TMOD|=0x01;TR0=0;}u16 low_test(){u16 t;TR0=1;while((ir==0)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0; //t=(TH*256+TL0);//机器周期数return t;}u16 high_test(){u16 t;TR0=1;while((ir==1)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0;return t;}/*u16 time_test(bit x){}*/u8 receive_8bit(){u8 d,i;u16 t;for(i=0;i<8;i++){t=low_test();t=high_test();d>>=1;if((t>=2750)&&(t<=3100)){d|=0x80;}}return d;}void ir_decode(){u16 t;u8 i;if(ir==0)//有遥控信号{t=low_test();//8295-9000us,倍频的是16590-18000if((t>=14500)&&(t<=18000))//检查引导码低电平时间{t=high_test();if((t>=8000)&&(t<=9000))//检查高电平{for(i=0;i<4;i++){buf[i]=receive_8bit();}if(buf[0]==(~buf[1]))//检查系统码是否正确{if(buf[0]==ID){if(buf[2]==(~buf[3])){//具体按键处理ir_f=1; //遥控有效}}}}}}}/*void key(){if(buf[2]==0x40){P1^=(1<<0);}if(buf[2]==0x48){P1^=(1<<1);}}*/void ir_execuse(){if(ir_f==1){switch(buf[2]){case 0x40:P1^=(1<<0);break;case 0x48:P1^=(1<<1);break;case 0x04:P1^=(1<<2);break;case 0x02:P1^=(1<<3);break;case 0x05:P1^=(1<<4);break;case 0x54:P1^=(1<<5);break;case 0x0A:P1^=(1<<6);break;case 0x1E:P1^=(1<<7);break;}ir_f=0;}}void show_d(){u8 j;for(j=0;j<10;j++){if(s[j]==buf[2]){nu=j;break;}}show(nu);}void isr_init(){EA=1;EX1=1;//外部中断,一直看3.3有没有下降沿。
目录第一章设计简介 (2)第二章系统方案 (2)一、设计方案对比 (2)二、方案设计 (4)第三章硬件设计 (4)一、红外遥控器 (4)二、红外接收模块部分 (6)第四章软件设计 (7)一、红外遥控器软件设计 (7)二、红外接收模块软件设计 (10)三、程序代码 (10)第五章测试及分析 (10)第六章结论 (10)第七章参考文献 (11)附录一(程序代码): (12)第一章设计简介本设计分为红外遥控器与红外接收模块两部分。
红外遥控器包括矩阵键盘、增强型51单片机(STC11L04E)、红外发射电路组成。
单片机扫描矩阵键盘后,将按键状态进行信源编码与信道编码,载波(38k脉冲)后由红外发射器发射。
红外接收模块部分由传统51单片机、数码管、一体化红外接收头组成。
一体化红外接收头将信号进行限幅放大、带通滤波、解调、积分、整形后输出解调信号至单片机,并由单片机输出解调信号。
第二章系统方案一、设计方案对比红外遥控器部分2.1.1 主控芯片方案一:HT6222方案二:STC11L04E分析:传统红外遥控器芯片HT6222具有性价比高、功能强大、稳定可靠、使用简单等特点,但该芯片难以零购。
STC11L04E为增强型51单片机,控制灵活(载波频率可调、通信协议可变更、用户码可变换)、价格较HT6222稍贵。
STC11L04E最大的特别是低功耗,功作电压低3.3V,易于应用于移动设备。
结论:由于STC11L04E单片机的灵活性以及学习性(可增强我们对一个完整通信系统的理解)。
因此我们采用方案二。
2.1.2 矩阵键盘方案一:3*6*2.5 贴片轻触开关方案二:6*6*6 直插轻触开关分析:3*6*2.5贴片轻触开关虽然体积小巧、美观,但与6*6*6直插轻触开关对比,在制板布线上较繁锁。
结论:综上,我们采用6*6*6直插轻触开关,使得整体布线简单,可布单面版,简化制板流程。
2.1.3电源模块方案一:钮扣电池CR2032方案二:可充电锂电池18650分析:可充电锂电池18650容量大,节能环保(可多次利用),但体积大。
基于51单片机的红外遥控小车设计和制作本文介绍一款红外线遥控小车,以AT89S51单片机为核心控制器,用L289驱动直流电机工作,控制小车的运行。
本款小车具有红外线遥控手动驾驶、自动驾驶、寻迹前进等功能。
本系统采用模块化设计,软件用C语言编写。
一、设计任务和要求以AT98C51单片机为核心,制作一款红外遥控小车,小车具有自动驾驶,手动驾驶和循迹前进等功能。
自动驾驶时,前进过程中可以避障。
手动驾驶时,遥控控制小车前进、后退、左转、右转、加速等操作。
寻迹前进时小车还可以按照预先设计好的轨迹前进。
二、系统组成及工作原理本系统由硬件和软件两部分组成。
硬件部分主要完成红外编码信号的发射和接受、障碍物检测、轨迹检测、直流电机运行的发生等功能。
软件主要完成信号的检测和处理、设备的驱动及控制等功能。
AT89S51单片机查询红外信号并解码,查询各个检测部分输入的信号,并进行相应处理,包括电机的正反转,判断是否遇到障碍物,判断是否小车其那金中有出轨等。
系统结构框图如图1所示。
图1 系统结构框图三、主要硬件电路1、遥控发射器电路该电路的主要控制器件为遥控器芯片HT6221,如图2所示。
HT6221将红外码调制成38KHZ的脉冲信号通过红外发射二极管发出红外编码。
图2中D1是红外发射二极管,D2是按键指示灯,当有按键按下时D2点亮。
HT6221的编码规则是:当一个键按下超过36ms,振荡器使芯片激活,如果这个按键按下且延迟大约108ms,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9~18ms),8位数据码(9~18ms)和这8位数据码的反码(9~18ms)组成,如果按键按下超过108ms仍未松开,接下来发射的代码将仅由起始码(9ms)和结束码(2.5ms)组成。
按照上图的接法,K1~K8的数据码分别为:0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07。
单片机红外控制发射器设计【详细】摘要随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。
传统的遥控器采用专用的遥控编码及解码集成电路,这种方法虽然制作简单、容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用,应用范围受到限制。
而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。
本设计主要应用了A T89C2051单片机作为核心,综合应用了单片机中断系统、定时器、计数器等知识,应用红外光的优点。
遥控操作的不同,遥控发射器通过对红外光发射频率的控制来区别不同的操作。
遥控接收器通过对红外光接收频率的识别,判断出控制操作,来完成整个红外遥控发射、接收过程。
其优点硬件电路简单,软件功能完善,性价比较高等特点,具有一定的使用和参考价值。
关键词:单片机,红外遥控,中断,定时,计数,频率AbstractWith the development of our society and the gradual improvement of science and technology, various kinds of help remote control systems have began to enter people’s life. The traditional remote controllers adopt special remote control code and decode integrated circuits, though this kind of method is simply and easily, it is only the practical application of some certain special electric equipments because of the counted functional keys is counted and the restricted function, so the range of application is limited. But the remote controllers which adopt the microprocessors have many advantages such as flexible operating and unceremonious manipulative keys.The design has used A T89C2051 microprocessor as core, integratively apply the interruptive system, timer , counter ,etc. mainly to design originally and also take the advantage of the infrared light. The remote control launcher distinguishes different operation through the control on frequency of infrared emission of light. The remote control receiver judges control operation by adopting the discerned frequency of the received infrared light to finish the whole launching and receiving course.Its advantage is that the hardware circuit is simple, the software is with perfect function, have certain use and reference valueKeywords:Microprocessor, Infrared remote control,Interrupt,Timing,Counting,Frequency目录摘要 (I)Abstract (I)1 绪论 (5)1.1 单片机的产生与发展 (5)1.2红外通信技术概述 (3)1.2.1红外概述 (3)1.2.2 选择红外遥控的原因 (3)1.2.3红外的简单发射接收原理 (4)2.1 设计目的与原理 (4)2.2单片机红外遥控发射器设计原理 (4)2.3 单片机红外遥控接收器设计原理 (5)3系统硬件电路设计 (6)3.1有关A T89C2051单片机的介绍 (6)3.1.1简介 (6)3.1.2引脚介绍 (6)3.1.3 A T89C2051单片机的主要组成部分 (8)3.2定时器/计数器 (9)3.2.1主要特性 (9)3.2.2定时/计数器0和1的控制和状态寄存器 (10)3.2.3 T0和T1的4种工作方式 (12)3.3独立式按键结构 (12)3.4低功耗控制电路 (13)3.4.1低功耗的实现方法 (13)3.4.2 掉电保护和低功耗的设计 (13)3.5 CPU时钟电路 (16)3.6 复位电路 (17)3.6.1复位状态 (17)3.6.2 复位电路 (17)3.7 红外发射电路的设计 (18)3.8 红外接收电路的设计 (19)3.9 完整的系统电路设计图 (20)4 系统软件设计 (20)4.1遥控发射器程序设计 (20)4.1.1程序总体结构 (20)4.1.2 伪指令和初始化程序 (22)4.1.3键盘扫描程序 (24)4.1.4 中断服务程序 (25)4.2 遥控接收器程序设计 (27)4.2.1 程序总体结构 (27)4.2.2 初始化程序 (29)4.2.3 计数值比较程序 (30)4.2.4 定时器1中断服务程序 (30)5 总结与展望 (31)致谢 (32)参考文献 (33)附录1 (35)附录2 (37)1 绪论1.1单片机的产生与发展为适应社会发展的需要,微型计算机不断的更新换代,新产品层出不穷。
51单片机设计的红外线遥控器电路图及工作原理该小制作所需要的元件很少:单片机TA89C2051一只,RS232接口电平与TTL电平转换心片MAX232CPE 一只,红外接收管一只,晶振11.0592MHz,电解电容10uF4只,10uF一只,电阻1K1个,300欧姆左右1个,瓷片电容30P2个。
发光二极管8个。
价钱不足20元。
电路图及原理:主控制单元是单片机AT89C2051,中断口INT0跟红外接受管U1相连,接收红外信号的脉冲,8个发光二极管作为显示*输出(也可以用来扩展接其他控制电路),U3是跟电脑串行口RS232相连时的电平转换心片,9、10脚分别与单片机的1、2脚相连,(1脚为串行接收,2脚为串行发送),MAX232CPE的7、8脚分别接电脑串行口的2(接收)脚、3(发送脚)。
晶振采用11.0592MHz,这样才能使得通讯的波特率达到9600b/s,电脑一般默认值是9600b/s、8位数据位、1位停止位、无校验位。
电路就这么简单了,现在分析具体的编程过程吧。
如图所示,panasonic遥控器的波形是这样的(经过反复测试的结果)。
开始位是以3.6ms低电平然后是3.6ms高电平,然后数据表示形式是0.9ms低电平0.9ms高电平周期为1.8ms表示“0”,0.9ms 低电平2.4ms高电平周期为3.3ms表示“1”,编写程序时,以大于3.4ms小于3.8ms高电平为起始位,以大于2.2ms小于2.7ms 高电平表示“1”,大于0.84ms小于1.11ms高电平表示“0”。
因此,我们主要用单片机测量高电平的长短来确定是“1”还是“0”即可。
定时器0的工作方式设置为方式1:mov tmod,#09h,这样设置定时器0即是把GATE置1,16位计数器,最大计数值为2的16次方个机器周期,此方式由外中断INT0控制,即INT0为高时才允许计数器计数。
比如:jnb p3.2,$jb p3.2,$clr tr0这3条指令就可以测量一个高电平,接下来读取计数值TH0,TL0就可以分辨是起始位还是“1”或“0”。
在确定码表之前,您可以使用P0口的8个发光二极管来显示编码,16位编码分两次显示:mov p0,keydataacall delay_1s ;//1ms延时子程序mov p0,keydata+1ljmp main根据P0相继的两次显示的编码,记录每个按键的编码,形成编码表,即遥控器编码的*完毕。
码表确定之后,以后接收到遥控器的编码之后,就与码表比较,找到匹配的码项,并把该码项对应的顺序号输出到P0口,同时也把顺序号向串行口输出到电脑,电脑接收该数据后由串口软件决定如何处理。
程序不长,下面是完整的程序和注释:(先看流程图)、keydata equ 30h ;//该地址和31H地址用来存放遥控器按键编码。
org 00hmain:mov keydata,#0 ;// 清零mov tmod ,#09h ;//设置定时0方式1,GATE=1 mov r7,#0 ;//计数器,用来计数是否满8位mov r6,#0 ;//计数器,用来计数是否满2字节(解16位编码)jb p3.2,$ ;//是否为低电平again: ;//如果为低,继续往下面执行mov tl0,#0 ;//清零TL0mov th0,#0 ;//清零TH0setb tr0 ;//开启定时器0jnb p3.2,$ ;//等待高电平到来jb p3.2,$ ;//高电平到来,此时开始计数clr tr0 ;//高电平结束,停止计数mov a,th0 ;//读取th0 值,TL0忽略不计clr c ;//subb a,#12 ;//jc again ;//th0<12则转,即小于3.4ms,你可以算一下这个时间mov a,#14 ;//clr c ;//subb a,th0 ;//和14比较,如果TH0>14则大于3.8msjc again ;//大于3.8ms,从新再检测nextbit: ;//起始位找到了,然后下一位mov tl0,#0 ;//mov th0,#0 ;//setb tr0 ;//启动定时器jnb p3.2,$ ;//等待高电平jb p3.2,$ ;//高电平到来,此时开始计数clr tr0 ;//高电平结束,停止计数mov a,th0 ;//读取计数值,TL0忽略不计clr c ;//subb a,#8 ;//th0和8比较jc next ;;;;//若<2.2ms则转,再判断是否大于0.84ms mov a,#10 ;//再跟10比较clr c ;//subb a,th0 ;//jc again ;;;;;;;//若>2.7ms,则放弃,从新检测mov a,keydata ;// 符合大于2.2ms 小于2.7ms,即为“1”setb c ;//C = 1rrc a ;//把1移位进Amov keydata,a ;//保存inc r7 ;//计数器加1cjne r7,#8,nextbit ;//是否满8位inc r6 ;//计数加1cjne r6,#2,last8 ;//是否满两字节sjmp seach ;//不满两字节,再新采集last8: ;//满1字节,再接下来第二字节mov keydata+1,a ;//把第一字节编码数据保存到31h里mov r7,#0 ;//计数器R7清零sjmp nextbit ;//继续采集数据next: ;//小于2.2ms时转到这里mov a,th0 ;//读取计数值TH0swap a ;//高4位与低4位对换mov r1,a ;//保存到R1anl tl0,#0f0h ;//取TL0高4位,低4位忽略不计mov a,tl0 ;//clr c ;//rrc a ;//rrc a ;//rrc a ;//rrc a ;//add a,r1 ;//mov r1,a ;//subb a,#30 ;//以上几行是把TH0的低4位和TL0的高4位合并为1字节作为计数值jc nextbit ; //判断是否<0.84ms,是则放弃,继续采集mov a,r1 ;//否clr c ;//cjne a,#64,continue ;//跟64比较continue: ;//jnc nextbit ; //a>64表示采样值>1.11ms 放弃mov a,keydata ;//否则,符合位“0”clr c ;//C = 0rrc a ;//把零右移进Amov keydata,a ;//保存inc r7 ;//计数器加1cjne r7,#8,nextbit ;//是否满8位inc r6 ;//计数器加1cjne r6,#2,last_8 ;//是第一字节已经满sjmp seach ;//last_8: ;//如果为第二字节mov keydata+1,a ;//则保存第一字节到31hmov r7,#0 ;//清零R7sjmp nextbit ;//seach: ;//匹配按键编码mov r0,#-2 ;//按键编码字节个数计数器mov r1,#-1 ;//按键顺序计数器seach1: ;//inc r0 ;//seach2: ;//inc r0 ;//inc r1 ;//cjne r1,#29,compare ;//是否R1=29sjmp exit0 ;//compare: ;//开始匹配mov a,r0 ;//mov dptr,#keycode ;//地址指针指向码表首址movc a,@a+dptr ;//取码cjne a,keydata,seach1 ;//比较inc r0 ;//R0+1,再比较下一字节(每个按键编码为2字节)mov a,r0 ;//;mov dptr,#keycode ;//movc a,@a+dptr ;//比较cjne a,keydata+1,seach2 ;//是否匹配,不匹配则继续跟下一字节比较mov p1,r1 ;//如果匹配,把按键顺序号输出到p1 send: ;//mov tmod,#20h ; //设置timer 1,mode 2mov tl1,#0fdh ;//设置定时器初值mov th1,#0fdh ;//mov scon,#01010000b;//以上设置,即设置串口波特率系数为:9600,8,1,0setb tr1 ;//启动定时器1loop_s: ;//mov sbuf,r1 ;//把R1(按键顺序号)输出到串口jnb ti,$ ;//等待是否发送完毕clr ti ;//发送完毕,清零TIexit0: ;//ljmp main ;//循环keycode: ;//每两字节代表一个按键的编码db 11111000b,00000000b, 11111100b,00000000b, 11111001b,11000000bdb 11111100b,11000000b, 11111010b,00000000b, 11111010b,00100000bdb 11111010b,01000000b, 11111010b,01100000b, 11111010b,10000000bdb 11111010b,10100000b, 11111010b,11000000b, 11111010b,11100000bdb 11111011b,00000000b, 11111011b,00100000b, 11111011b,01000000b db 11111011b,01100000b, 11111111b,01100000b, 11111111b,10100000bdb 10001100b,10001110b, 10001101b,11101110b, 10001100b,10101110bdb 10001101b,11001110b, 11111000b,11100000b, 11111100b,10000000bdb 11111100b,01000000b, 11111001b,10100000b, 11111100b,10100000bdb 11111100b,01100000bend---------------------------------------------------------------------------------各种遥控器编码不同,如果你采用的是其他遥控器,修改几个参数即可(当然按键的编码表肯定不同了),即计数器的值不同,不过有的遥控器有机器码(机器码每个按键都是一样的),此时可以跳过机器码的采集。
最后有一点想提一下的是,刚开始不知道遥控器的编码是比较麻烦的,笔者在“双龙电子“网站下载了个声卡示波器,用他可以一目了然观看遥控器的波形,测量其脉冲宽度,有了它确实方便很多,该软件可以到双龙公司网站/免费下载使用。