单片机原理与应用技术课程设计报告(论文)基于单片机的红外遥控控制系统2012年4月19 日基于单片机的红外遥控控制系统课程设计任务书1.设计目的与要求(1).基本功能1. 有效遥控距离大于10米。
2. 遥控控制的路数在5路以上。
3. 采用数码管显示当前工作的控制电路。
(2). 扩展功能(1).通过遥控器可以任意设置用户密码(1-16位长度),只有合法用户才能有修改路控制的功能,同时系统掉电后能自动记忆和存储密码在系统中。
(2).报警和加锁功能:密码的输入时间超过12秒或者连续3次输入失败,声音报警同时锁定系统,不让再输入密码。
此时只有使用管理员密码方能对系统解锁。
2.设计内容(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩在规定时间内,完成叙述并回答问题目录1 引言 (1)2 总体设计方案 (1)2.1.1设计思路 (1)2.1.2设计方案 (1)2.2 设计方框图 (1)3 .设计原理分析 (3)3.1 发射电路 (3)3.2键盘式输入电路 (4)3.3信号接收和密码锁存电路 (5)3.4显示电路 (5)附录(一) (7)电路总图: (7)附录(二) (7)基于单片机的红外遥控控制系统电气095赵国一摘要:本设计利用红外遥控传输较小的数据量来控制电器设备,对各种红外遥控器发出来的红外编码进行采集和处理就成了众人非常关心和急需解决的问题。
仔细分析了多种遥控器所发红外编码的特点及其规律,详细地阐述了利用单片机系统对家用电器遥控器发出来的红外编码进行学习、存储、传输和再生的原理,来实现以红外线为传送信息媒介的短距离红外遥控控制电路,具有准确度高、速度快的特点。
在了解了其发射的编码脉冲信号波形后,设计了基于单片机的红外遥控器解码器,对解码器硬件和相应软件进行分析并给出程序流程图,给出多功能遥控系统框图,详细地说明其硬件组成原理和各个部分的功能,并给出了部分程序流程图。
本设计以单片机为核心设计一种红外线遥控系统,可以对各种红外线遥控器发射的信号进行识别、存贮和再现等功能,从而实现对各类家电的控制。
关键词:单片机红外遥控多路LED 光耦隔离键盘控制红外线发射红外线接收1 引言随着科技的发展,人们生活的节奏也越来越快,随之人们对方便、快捷的要求也随之不断提高!遥控器的出现,在一定程度上满足了人们的这个要求!遥控器是由高产的发明家Robert Adler 在五十年代发明。
而红外遥控是20世纪70年代才开始发展起来的一种远程控制技术,其原理是利用红外线来传递控制信号,进行处理,最后实现对控制对象的各种功能的远程控制。
红外遥控具有独立性、物理特性与可见光相似性、无穿透障碍物的能力及较强的隐蔽性等特点。
随着红外遥控技术的开发和迅速发展,很多电气都应用了红外遥控。
红外遥控技术的成熟也使得红外遥控系统变得设计简单,价格低廉。
2 总体设计方案2.1.1设计思路整体设计思路为:根据扫描到的按键值转至相对应的ROM表中读取数据,确认之后单片机将从ROM读取出来的值,按照数据处理要求从输出端输出控制脉冲与T0产生的38KHz的载波进行调制,再经三极管将信号放大并驱动红外发光管将控制信号发送出去。
红外数据接收则是采用HS0038一体化接收头,北部可以完成红外接收、数据采集、解码的功能。
只要在接收端接侧头信号低电平的到来,就可以完成对整个串行的信号进行分析得出当前控制指令的功能。
2.1.2设计方案本设计包括两大模块:红外发射模块和红外接收模块。
通过发射模块发出红外信号编码,编码加载在38KHz载波上发射出去,红外接收模块接收信号并滤除载波,并传回单片机内进行解码。
其中,红外接收模块的接收头用的是HS0038型号的一体化接收头,可以对信号进行放大解调等操作,然后通过单片机进行译码。
用的单片机是AT89S51,通过红外线接收模块接收信号,由于接收模块有自动滤除载波功能,所以红外接收模块解得的码就是遥控器发射的编码,通过电路传到单片机内。
2.2 设计方框图设计总图设计总流程图遥控发射器主程序流程图遥控接收器主程序流程图红外发射模块红外发射电路红外信号接收电路HS0038是用于红外遥控接收的小型一体化接收头,它的主要功能包括放大, 选频,解调几大部分,要求输入信号需是已经被调制的信号。
经过它的接收放大和解调会在输出端直接输出原始信号的反相信号。
其不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,从而使电路达到最简化!灵敏度和抗干扰性都非常好。
它适合于各种红外线遥控和红外线数据传输,中心频率38.0kHz。
红外接收头内部放大器的增益很大,很容易引起干扰,依次在接收头的供电脚上必须加上滤波电容。
3 .设计原理分析3.1 发射电路3.2键盘式输入电路第一步确定按下的键是在哪一行:由于刚开始按键是处于断开状态,所以P2.0~P2.3引脚的全是高电平。
向P2.4~P2.7写0,如果有按键按下,则行线变低。
所以可以通过向列线同时写0,读取行线值来判断按下的键是处于哪一行。
第二步确定按下的键是在哪一列:此时向列线逐个写0,如果那一列没有键按下,则P.4~P.7全为1。
相反,如果那一列有按键按下,则P.4~P.7中有值为0,此时即可得到按下键的列值。
所以我们通过逐个向列线写0以确定哪一列。
知道按下的键处在哪一行哪一列即可确定按下键的位置。
3.3信号接收和密码锁存电路3.4显示电路为了减少硬件开销,提高系统可靠性和降低成本,单片机控制系统通常采用动态扫描显示。
LCD电路工作时,必须有相应的控制器、驱动器,还需要有存储命令和字符的RAM和ROM。
LED(Light Emitting Diode)显示器是由若干发光二极管组成的,每个二极管称为一个字段。
LED显示器有3种通用格式,可显示数字和十六进制字母的7段(或8段,增加了小数点“dp”段)显示管(8字型)、显示数字和全部英文字母的18段显示管(米字型)以及点阵显示器。
7段显示管是最经济和最常用的显示器。
LED分为共阴极和共阳极两种结构形式。
共阴极LED中发光二极管的阴极连接在一起,通常接地,当某个二极管的阳极为高电平时,相应的段就发光显示。
同样,共阳极LED的公共阳极接高电平,某个阴极接低电平时,相应的段被点亮显示。
为显示不同的字型,显示器各字段所加的电平不同,编码也随之不同。
4.结束语这次实习设计对于我来说,既是一次机遇,又是一次挑战。
通过这次的实习设计,我学到了很多东西。
通过自己的实践,在设计过程中,通过大量的查阅资料,认真研究教材,对单片机有了更为深刻的理解,在编写软件时,须仔细的分析硬件电路及所要达到的功能,然后设计程序流程,编写代码。
整个过程培养了我的耐性和刻苦钻研的精神。
增强了动手能力,掌握了系统的分析解决问题的方法。
通过实际工程设计也使我了解到书本知识和实际应用的差别。
在实际应用中遇到很多的问题,这都需要我对问题进行具体的分析,并一步一步地去解决它。
参考文献[1] 楼然苗,李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,2003.103—120.[2] 李必红,王忠魁.基于单片机控制的机床数控改造[J].陕西工学院学报,2004,20(1):70—79.[3]王兆安电力电子技术西安交通大学出版社,2004[4]刘志文遥控开关系统的理论设计与应用大学学报(教科文艺) 2003年03期[5]黄陇实用型红外遥控功能开关的设计与实现(Radio Engineering of China)[6]刘文涛单片机应用开发实例清华大学出版社 2005年9月附录(一)电路总图:附录(二);红外遥控发射程序ORG 0000H ;程序执行开始地址AJMP START ;跳至START执行ORG 000BH ;定时器T0中断入口地址LJMP INTT0 ;跳至INTT0中断服务程序ORG 0030HPCODE EQU 30H ;识别码OPPCODE EQU 31H ;识别码反码BUT EQU 32H ;按键码OPPBUT EQU 33H ;按键反码START:MOV SP,#70H ;设堆栈基址为70HCLR P3.4 ;关遥控输出MOV IE,#00H ;关所有中断MOV IP,#01H ;设优先级MOV TMOD,#22H ;8位自动重装初值模式MOV TH0,#0F3H ;定时为13微秒初值MOV TL0,#0F3HSETB EA ;开总中断允许MOV PCODE,#0ABH ;识别码赋值MOV OPPCODE,#54H ;识别码反码赋值JIAN: ;识别键盘有无键按下子程序MOV P2,#00FH ;置列线为1,行线为0MOV R7,#0FFH ;延时DJNZ R7,JIAN1JIAN1:MOV A,P2 ;读P2口CPL A ;求反后,高电平表示有键按下ANL A,#00FH ;判别有键值按下吗?JZ JIAN ;无键按下时,返回重新扫描LCALL DELAYSKEY: ;识别具体按键值子程序MOV A,#00 ;下面进行行扫描,1行1行扫MOV R0,A ;R0作为行计数器,开始为0MOV R1,A ;R1作为列计数器,开始为0MOV R3,#07FH ;R3为行扫描字暂存,高4位为行扫描字SKEY2:MOV A,R3MOV P2,A ;输出行扫描字,低4位全1NOPNOPNOP ;3个NOP操作使P2口输出稳定MOV A,P2 ;读列值MOV R1,A ;暂存列值CPL A ;高电平则有键闭合ANL A,#00FH ;取列值S123:JNZ SKEY3 ;有键按下转SKEY3,无键按下时进行一行扫描INC R0 ;行计数器加1SETB C ;准备将行扫描右移1位,形成下一行扫描字;C=1保证输出行扫描字中低4位全为1,为列输入做准备,高4位中只有1位为0MOV A,R3 ;R3带进位C右移1位RRC AMOV R3,A ;形成下一行扫描字送入R3MOV A,R0CJNE A,#04H,SKEY2 ;最后一行扫(4次)完了吗?NN: LJMP JIANMN: MOV BUT,ACPL AMOV OPPBUT,ALCALL REMOTE ;转发送程序AJMP NN ;列号译码SKEY3: MOV A,R1JNB ACC.0,SKEY5JNB ACC.1,SKEY6JNB ACC.2,SKEY7JNB ACC.3,SKEY8LJMP NNSKEY5: MOV A,#01HMOV R2,A ;存0列号AJMP DKEYSKEY6: MOV A,#01HMOV R2,A ;存1列号AJMP DKEYSKEY7: MOV A,#01HMOV R2,A ;存2列号AJMP DKEYSKEY8: MOV A,#01HMOV R2,A ;存3列号AJMP DKEY;键位置译码DKEY: MOV A,R0 ;取行号ACALL DECODELJMP MN ;键值译码DECODE: MOV A,R0 ;取行号送AMOV B,#04H ;每一行按键个数MUL AB ;行号*按键数ADD A,R2 ;行号*按键数+列号=键值,在A中RET;编码发射程序REMOTE: SETB ET0 ;开T0中断SETB TR0 ;开启定时器T0MOV R1,#06H ;原数值#09HOUT01: MOV R2,#0C8H ;发5ms引导码DJNZ R2,$DJNZ R1,OUT01CLR TR0 ;关定时器T0CLR ET0 ;关T0中断CLR P3.4 ;关脉冲输出MOV R1,#0AH ;3ms空隙OUT02: MOV R2,#96HDJNZ R2,$DJNZ R1,OUT02OUT03: ;发射数据流MOV A,PCODELCALL OUT04 ;调用发送子程序MOV A,OPPCODEACALL OUT04 ;调用发送子程序MOV A,BUTLCALL OUT04 ;调用发送子程序MOV A,OPPBUTLCALL OUT04 ;调用发送子程序SETB C ;发送结束码1LCALL SEND ;调用发送子程序MOV R1,#0EAH ;延时130MS OUTWAIT:MOV R2,#0C8HDJNZ R2,$DJNZ R1,OUTW AITRET;发射子程序OUT04: ;循环发射各数据位MOV R1,#08HOUT: RLC AACALL SENDDJNZ R1,OUTRETSEND: CLR TR0 ;关定时器T0CLR ET0 ;关T0中断CLR P3.4 ;关脉冲输出JC SEND1MOV R3,#08H ;发射0码SEND0: MOV R4,#69H ;0码低电平DJNZ R4,$DJNZ R3,SEND0AJMP SIG ;转脉冲发送信号SEND1: MOV R3,#02H ;1码低电平SEND10: MOV R4,#8CHDJNZ R4,$DJNZ R3,SEND10SIG: SETB ET0 ;开T0中断SETB TR0 ;开启定时器T0MOV R3,#08CH ;发射脉冲DJNZ R3,$CLR TR0 ;关定时器T0CLR ET0 ;关T0中断CLR P3.4 ;关脉冲输出RET;T0中断服务程序INTT0: CPL P3.4 ;40kHZ红外线遥控信号产生RETI ;中断返回;延时子程序DELAY: MOV R7,#10H ;延时10秒子程序TS1: MOV R6,#0FFHTS2: DJNZ R6,TS2DJNZ R7,TS1RETEND ;程序结束;红外遥控系统接收部分源程序ORG 0000HLJMP STARTORG 0003HLJMP INTEX0ORG 0030HPCODE EQU 30H ;识别码OPPCODE EQU 31H ;识别码反码BUT EQU 32H ;按键码OPPBUT EQU 33H ;按键反码CODENUM EQU 34H ;接收码数MINMA EQU 35H ;储存密码GUAN EQU 36H ;储存管理员密码START: MOV SP,#70HMOV IE,#00H ;关所有中断SETB EX0 ;开外中断SETB EA ;总中断允许MOV PCODE,#0ABH ;识别码初值MOV OPPCODE,#54H ;识别码反码初值MAIN: MOV R3,#0FFHDJNZ R3,$ ;持续510微秒MOV R5,#08HXUN: CLR CMOV C,P3.2 ;读入P3.2引脚状态MOV A,R6RLC AMOV R6,ADEC R5DJNZ R5,XUNMOV A,R6SETB P2.0 ;开放显示器控制SETB P3.1 ;开放显示器控制MOV SBUF,A ;送LED显示LJMP MAIN ;转MAIN循环NOP ;PC值出错处理LJMP START ;出错时重新初始化;遥控接收程序INTEX0: MOV 37H,A ;采用中断接收保护现场MOV 20H,CCLR EX0 ;关外中断JNB P3.2,READ ;P3.2口为低电平转READ 为高电平退出OUT: SETB EX0 ;开中断(系干扰)MOV A,37H ;恢复现场MOV C,20HRETI 退出中断READ: CLR A ;清A 读取引导码MOV DPH,A ;清DPTRMOV DPL,AHEAD: JB P3.2,HEAD01 ;P3.2变高电平转HARD01INC DPTR ;用DPTR对低电平计数MOV R1,#04HDJNZ R1,$AJMP HEAD ;转HARD循环(循环周期为16微秒)HEAD01: MOV A,DPH ;DPTR高8位放入AJZ OUT 0(脉宽小于16*255=4毫秒)退出MOV R1,#0AH ;3ms低电平HEAD02: MOV R2,#96HDJNZ R2,$DJNZ R1,HEAD02ACALL READ01 ;接收识别码CJNE A,PCODE,OUT ;识别码判定ACALL READ01CJNE A,OPPCODE,OUT 识别码反码判定ACALL READ01MOV BUT,A ;接收控制码ACALL READ01 接收控制反码CPL ACJNE A,BUT,OUT ;控制码校验ACALL READEND ;接收结束码CJNE A,#01H,OUTMOV A,BUTMOV R5,#08HXUN2: CLR CMOV C,P3.2 ;读入P3.2引脚状态MOV A,R6RLC AMOV R6,ADEC R5DJNZ R5,XUNMOV A,R6SETB P2.0 ;开放显示器控制SETB P3.1 ;开放显示器控制MOV SBUF,A ;送LED显示CLR P3.1 ;关闭显示器控制PAN: CJNE A,GUAN,JISHU ;识别密码JISHU: INC R4CJNE R4,#003H,XUN2LJMP BAOJINGBAOJING: CLR P0.0LJMP OUT ;转中断退出READ01: MOV CODENUM,#08H ;读取数据码8位CLR A ;清ALJMP READ02READEND: MOV CODENUM,#01H ;读取结束码CLR AREAD02: CLR CMOV R1,#02H ;延时0.8ms READ03: MOV R2,#0C8HDJNZ R2,$DJNZ R1,READ03MOV C,P3.2 ;取码CPL C ;还原码值RLC A ;移位赋值JB P3.2,$JNB P3.2,$DJNZ CODENUM,READ02RETEND ;结束程序。