《基于单片机的智能遥控器设计毕业论文》由会员分享,可在线阅读,更多相关《基于单片机的智能遥控器设计毕业论文(15页珍藏版)》请在金锄头文库上搜索。
1、基于单片机的智能遥控器设计基于单片机的智能遥控器设计1 引言引言通过一个学期的学习,我意识到课本与实践相结合是学好单片机的唯一途径。本次课设我选择的题目是基于单片机的智能遥控器设计设计。1.1 设计背景设计背景现代遥控技术也是十分普遍地应用于各类家用电器中,如电视遥控、电灯遥控、电风扇遥控、空调器遥控等,这类应用提高了家用电器的功能和档次,更重要的是给使用者带来极大的方便。单片机红外线遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。同时,由于采用红外线遥控器件时,工作电压低,功耗小,外围电路简单,因此它在日常工作生活中的应用越来越广泛。2 设计方案及原理设计方案及
2、原理2.1 系统设计方案系统设计方案该红外遥控器包含两个部分,发射装置和接收装置,发射部分由键盘进行控制。键盘为 44 键盘,当按下其中键,接收部分会进行相应的显示,并实现某种功能。此设计仅完成在按下键 1 至 4 时实现对 4 个 LED 灯亮灭的功能。此外还可以拓展 12 种功能。2.2 遥控器原理遥控器原理单片机遥控系统应用要求用单片机作为控制芯片制作一个遥控器,另一个单片机控制系统能被遥控操作。本设计课程用单片机制作一路电器遥控器,通过键盘输出特定信号给单片机,单片机对信号进行编码并通过某 I/O 口进行脉冲输出,再通过红外发射装置发射,红外接收装置接受及解调将信号送入另一片单片机,此
3、单片机通过外部中断进行解码,实现相应的显示以及对四个 LED 灯的亮灭进行控制的功能。该遥控器采用软件编码,44 键盘开关,可扩充到对 16 个电器的控制。系统组成框图见图 1。图 1 系统组成框图键键 盘盘 控控 制制C52(1) 软软 件件 编编 码码红红 外外 发发 射射红红 外外 接接 收收C52(2) 软软 件件 解解 码码 功功能能拓拓展展LCD显显示示单片机原理及系统课程设计报告13 硬件设计硬件设计3.1 电路原理图电路原理图右为发射部分的单片机,其 P3.0 口为脉冲信号输出口,P3.7 口为指示灯电平输出口。左为接收部分的单片机,其 P3.2 口为经解调后编码信号的输入口,
4、P3.4至 P3.7 口为扩展的功能的输出口。系统原理总框图如图 2.图 2 系统原理总框图 3.2 系统原理说明系统原理说明如图 2,按下按键后,右边单片机发送与之对应的编码,通过 P3.0 口发送,经三极管将脉冲信号放大,通过红外发射及红外接收装置,将编码信号通过 P3.2口送至左边单片机进行解码,做出相应显示,并实现相应功能。4 软件设计软件设计4.1 Proteus 软件仿真软件仿真对此设计的检验,我选择了常用的单片机仿真软件 proteus 以及 keiluvision4进行仿。4.1.1 发射部分发射部分发射部分的核心为编码过程。此设计编码采用 NEC 协议,发送数据为 9ms高电
5、平,4.5ms 低电平以及用户码、用户反码、数据码和数据码反码。若按下键1,编码后经三极管放大的波形如图 3。图 3 键 1 编码所对应的波形单片机原理及系统课程设计报告24.1.2 接收部分接收部分接收部分主要为解码过程,接收头将解调后的码送至单片机中,利用外部中断 INT0 解码,根据解得的数据,进行相应的显示,并完成相应的拓展功能。若按下键 1,则 LCD 显示情况如图 4,完成的功能如图 5。图 4 键 1 所对的显示 图 5 键 1 所对应的简单的显示功能 4.2 软件设计流程图软件设计流程图4.2.1 发射部分流程图发射部分流程图图 6 发射部分主流程图4.2.2 接收部分流程图接
6、收部分流程图接收部分是通过跳转至外部中断程序中实现的,进入中断程序后,即刻关掉外部中断,利用定时器 T0 对输入信号进行计时,通过对各段信号高低电平维持时长不同区别是否为按键所对应的编码,是 0 还是 1,随后将相应的数位存储与设定的变量中加以显示,或者根据解得的数码跳至相应的拓展程序中。如图 7,为对一帧数据解码的流程图。开开始始按按下下按按键键扫扫描描获获取取键键 值值跳跳转转相相应应解解码码程程 序序发发射射相相应应数数据据结结束束单片机原理及系统课程设计报告3图 7 对一帧数据的解码 4.3 源程序源程序见附录 B。5 系统仿真系统仿真见附录 A。INT0中中断断关关闭闭中中断断。并并
7、对对起起始始码码高高低低电电 平平计计时时在在规规定定时时间间范范围围内内对对数数据据码码高高低低电电平平计计 时时在在规规定定范范围围高高电电平平时时间间为为400至至 680ustemp /定义发射引脚(接 PNP 三极管基极) sbit LED = P37; /发射指示灯 uchar KEY(void);单片机原理及系统课程设计报告6void SanZhuan(void); void ZZ(uchar x); void Z0(uchar temp); void TT0(bit BT,uint x); void YS(uchar time); /* 函数功能:主函数 */ void mai
8、n(void) TMOD = 0x01; /T0 16 位工作方式IR=1; /发射端口常态为高电平while(1) SanZhuan(); uchar KEY(void) uchar H,L; /行值,列值H=0;L=0;P1 = 0xf0; /将键盘端口行值设为 1,列值设为 0if(P1!= 0xf0) /检测是否有按键按下,如果有则 P1 必不为 0x0fYS(10); /按键去抖动,延时 10 毫秒if(P1!=0xf0) /确实有按键按下H = P1 /按键后得到按键的行标志位P1 = 0x0f; /翻转键盘接口输出L = P1 /得到列标志位 return (H+L);retur
9、n 0; /* 函数功能:散转程序 入口参数:v */ void SanZhuan(void) uchar v;v = KEY(); switch(v)单片机原理及系统课程设计报告7case 0x77:ZZ(0x01);v=0;break;case 0xb7:ZZ(0x02);v=0;break;case 0xd7:ZZ(0x03);v=0;break;case 0xe7:ZZ(0x04);v=0;break;case 0x7b:ZZ(0x05);v=0;break;case 0xbb:ZZ(0x06);v=0;break;case 0xdb:ZZ(0x07);v=0;break;case 0
10、xeb:ZZ(0x08);v=0;break;case 0x7d:ZZ(0x09);v=0;break;case 0xbd:ZZ(0x10);v=0;break;case 0xdd:ZZ(0x11);v=0;break;case 0xed:ZZ(0x12);v=0;break;case 0x7e:ZZ(0x13);v=0;break;case 0xbe:ZZ(0x14);v=0;break;case 0xde:ZZ(0x15);v=0;break;case 0xee:ZZ(0x16);v=0;break; default:v=0; /* 函数功能:发送主程序 */ void ZZ(uchar
11、x) TT0(1,m9); /高电平 9mSTT0(0,m4_5); /低电平 4.5mS/*发送 4 帧数据*/Z0(SBM);Z0(SBM);Z0(x);Z0(x); /*结束码*/TT0(1,m_65);TT0(0,m40);/*重复码*/while(KEY()TT0(1,m9); TT0(0,m2_25); TT0(1,m_56);TT0(0,m40); TT0(0,m56); LED = !LED; /指示灯 LED = 1; 单片机原理及系统课程设计报告8 /* 函数功能:单帧发送程序 入口参数:1 帧数据 */ void Z0(uchar temp) uchar v;for (v
12、=0;v= 1; /右移一位 /* 函数功能:38KHz 脉冲发射 + 延时程序 入口参数:(是否发射脉冲,延时约 x (uS)) */ void TT0(bit BT,uint x) TH0 = x8; /输入 T0 初始值TL0 = x;TF0=0; /清 0TR0=1; /启动定时器 0if(BT = 0) while(!TF0); /BT=0 时不发射 38KHz 脉冲只延时;BT=1 发射 38KHz 脉冲且延时else while(1) /发射具有一定占空比的的脉波IR = 0;if(TF0)break;if(TF0)break;IR = 1;if(TF0)break;if(TF0
13、)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;if(TF0)break;单片机原理及系统课程设计报告9TR0=0; /关闭定时器 0TF0=0; /标志位溢出则清 0 IR =1; /脉冲停止后,发射端口常态为高电平 /* 函数功能:按键消抖延时程序 入口参数:1mstime (晶振=12MHz) */ void YS(uchar time) uchari,j;for(i=0; i #include #include #include #incl
14、ude “1602.h“ /#define uchar unsigned char /#define uint unsigned int unsigned intLowTime,HighTime; sbit IR = P32; sbitaa=P34; sbit bb=P35; sbit cc=P36; sbitdd=P37; ucharN4; /识别码,操作码存放 uchar dis115; uchar dis215; void XSQ(void); void YS(uchar time); intDeCode(void); /* 主函数 */ void main(void) TMOD=0x01; IT0 = 1; EX0 = 1; EA = 1; while(1)单片机原理及系统课程设计报告10XSQ(); /*LCD 显示函数*/ void XSQ(void) uchar m2;m0=N0m1=N04;if(m09)m0=m0+0x37;else m0=m0+0x30;if(m19)m1=m1+0x37;else m1=m1+0x30; sprintf(dis1,“-%c%c-“,m1