欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    基于单片机的智能遥控器设计毕业论文.docx

    • 资源ID:3922039       资源大小:220.44KB        全文页数:15页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的智能遥控器设计毕业论文.docx

    单片机原理及系统课程设计报告基于单片机的智能遥控器设计1引言通过一个学期的学习,我意识到课本与实践相结合是学好单片机的唯一途径。本次课设我选择的题目是基于单片机的智能遥控器设计设计。1.1设计背景现代遥控技术也是十分普遍地应用于各类家用电器中,如电视遥控、电灯遥控、电风扇遥控、空调器遥控等,这类应用提高了家用电器的功能和档次,更重要的是给使用者带来极大的方便。单片机红外线遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。同时,由于采用红外线遥控器件时,工作电压低,功耗小,外围电路简单,因此它在日常工作生活中的应用越来越广泛。2设计方案及原理2.1 系统设计方案该红外遥控器包含两个部分,发射装置和接收装置,发射部分由键盘进行控制。键盘为4×4键盘,当按下其中键,接收部分会进行相应的显示,并实现某种功能。此设计仅完成在按下键1至4时实现对4个LED灯亮灭的功能。此外还可以拓展12种功能。2.2遥控器原理单片机遥控系统应用要求用单片机作为控制芯片制作一个遥控器,另一个单片机控制系统能被遥控操作。本设计课程用单片机制作一路电器遥控器,通过键盘输出特定信号给单片机,单片机对信号进行编码并通过某I/O口进行脉冲输出,再通过红外发射装置发射,红外接收装置接受及解调将信号送入另一片单片机,此单片机通过外部中断进行解码,实现相应的显示以及对四个LED灯的亮灭进行控制的功能。该遥控器采用软件编码,4×4键盘开关,可扩充到对16个电器的控制。系统组成框图见图1。图1 系统组成框图3硬件设计3.1电路原理图右为发射部分的单片机,其P3.0口为脉冲信号输出口,P3.7口为指示灯电平输出口。左为接收部分的单片机,其P3.2口为经解调后编码信号的输入口,P3.4至P3.7口为扩展的功能的输出口。系统原理总框图如图2.图2 系统原理总框图3.2系统原理说明如图2,按下按键后,右边单片机发送与之对应的编码,通过P3.0口发送,经三极管将脉冲信号放大,通过红外发射及红外接收装置,将编码信号通过P3.2口送至左边单片机进行解码,做出相应显示,并实现相应功能。4软件设计4.1 Proteus软件仿真对此设计的检验,我选择了常用的单片机仿真软件proteus以及keiluvision4进行仿。4.1.1发射部分发射部分的核心为编码过程。此设计编码采用NEC协议,发送数据为9ms高电平,4.5ms低电平以及用户码、用户反码、数据码和数据码反码。若按下键1,编码后经三极管放大的波形如图3。图3 键1编码所对应的波形4.1.2接收部分接收部分主要为解码过程,接收头将解调后的码送至单片机中,利用外部中断INT0解码,根据解得的数据,进行相应的显示,并完成相应的拓展功能。若按下键1,则LCD显示情况如图4,完成的功能如图5。图4 键1所对的显示 图5 键1所对应的简单的显示功能4.2软件设计流程图4.2.1发射部分流程图14图6发射部分主流程图4.2.2接收部分流程图接收部分是通过跳转至外部中断程序中实现的,进入中断程序后,即刻关掉外部中断,利用定时器T0对输入信号进行计时,通过对各段信号高低电平维持时长不同区别是否为按键所对应的编码,是0还是1,随后将相应的数位存储与设定的变量中加以显示,或者根据解得的数码跳至相应的拓展程序中。如图7,为对一帧数据解码的流程图。图7对一帧数据的解码4.3源程序见附录B。5系统仿真见附录A。总结红外线遥控已经广泛应用于当今社会,以其无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中,本设计仅是红外线遥控的极小部分展示,利用红外线对灯泡的亮灭进行控制。本次课设,让我有机会较为深入的了解单片机课程中所学的相关知识,也因此知道要将单片机真正应用至实际生活中,仅仅是课本上的知识是远远不够的。我们在掌握单片机基础知识的前提上,还应广泛地阅读相关书籍,掌握一定的物理及电子科学知识,由此才能较为容易的驾驭各种设计,真正将单片机变为一门实用性学科。参考文献1 王思明,张金敏,苟军年.单片机原理及应用系统设计M.北京:人民邮电出版社,2008.2 彭为,黄科,雷道仲.单片机典型系统设计实例精讲M.北京:电子工业出版社,2006.3 朱纯益,路建华. 单片机用作通用红外遥控接收器的设计J.2009附录A 系统仿真附录B源程序发射部分发射引脚(接PNP三极管b极)PNP三极管e极接2电阻,c极接红外发射管#include <REG51.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned int#define SBM 0xf0 /用户码#define m9 (65536-9000) /约9mS#define m4_5 (65536-4500) /约4.5mS#define m1_6 (65536-1630) /约1.65mS#define m_65 (65536-650) /约0.65mS#define m_56 (65536-560) /约0.56mS#define m40 (65536-40000) /约40mS#define m56 (65536-56000) /56mS#define m2_25 (65536-2250) /约2.25mSsbit IR = P30; /定义发射引脚(接PNP三极管基极)sbit LED = P37; /发射指示灯uchar KEY(void);void SanZhuan(void);void ZZ(uchar x);void Z0(uchar temp);void TT0(bit BT,uint x);void YS(uchar time);/*函数功能:主函数*/void main(void) TMOD = 0x01; /T0 16位工作方式 IR=1; /发射端口常态为高电平 while(1) SanZhuan(); uchar KEY(void)uchar H,L; /行值,列值 H=0; L=0; P1 = 0xf0; /将键盘端口行值设为1,列值设为0 if(P1!= 0xf0) /检测是否有按键按下,如果有则P1必不为0x0f YS(10); /按键去抖动,延时10毫秒 if(P1!=0xf0) /确实有按键按下 H = P1&0xf0; /按键后得到按键的行标志位 P1 = 0x0f; /翻转键盘接口输出 L = P1&0x0f; /得到列标志位 return (H+L); return 0;/*函数功能:散转程序入口参数:v*/void SanZhuan(void)uchar v; v = KEY();switch(v) case 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 0xeb: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 x) TT0(1,m9); /高电平9mS TT0(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; /*函数功能:单帧发送程序入口参数:1帧数据*/void Z0(uchar temp) uchar v; for (v=0;v<8;v+) /循环8次移位 TT0(1,m_56); /高电平0.65mS if(temp&0x01) TT0(0,m1_6); /发送最低位 else TT0(0,m_56); temp >>= 1; /右移一位 /*函数功能:38KHz脉冲发射 + 延时程序入口参数:(是否发射脉冲,延时约 x (uS))*/void TT0(bit BT,uint x) TH0 = x>>8; /输入T0初始值 TL0 = x; TF0=0; /清0 TR0=1; /启动定时器0 if(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)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; TR0=0; /关闭定时器0 TF0=0; /标志位溢出则清0IR =1; /脉冲停止后,发射端口常态为高电平/*函数功能:按键消抖延时程序入口参数:1ms×time (晶振=12MHz)*/void YS(uchar time)uchari,j; for(i=0; i<time; i+) for(j=0; j<247; j+)_nop_();接收部分使用外部中断0接收P3.2#include <REGX52.H>#include <intrins.h>#include <stdio.h>#include <stdlib.h>#include "1602.h"/#define uchar unsigned char /#define uint unsigned intunsigned intLowTime,HighTime;sbitIR = 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) XSQ(); /*LCD显示函数*/void XSQ(void)uchar m2; m0=N0&0x0f; m1=N0>>4; if(m0>9) m0=m0+0x37; elsem0=m0+0x30; if(m1>9) m1=m1+0x37; elsem1=m1+0x30;sprintf(dis1,"-%c%c-",m1,m0);/m1为高位,m0为低位 m0=N2&0x0f; m1=N2>>4; if(m0>9) m0=m0+0x37; elsem0=m0+0x30; if(m1>9) m1=m1+0x37; elsem1=m1+0x30;sprintf(dis2,"-%c-%c-",m1,m0);lcd(dis1,dis2); YS(1);intDeCode(void) unsigned char i,j;unsigned char temp; /储存解码出的数据for(i=0;i<4;i+) /连续读取4个用户码和键数据码 for(j=0;j<8;j+) /每个码有8位数字 temp=temp>>1; /temp中的各数据位右移一位,因为先读出的是高位数据 TH0=0; TL0=0; TR0=1; while(IR=0); TR0=0; LowTime=TH0*256+TL0; /保存低电平宽度 TH0=0; TL0=0; TR0=1; while(IR=1); TR0=0; HighTime=TH0*256+TL0; /保存高电平宽度 if(LowTime<360)|(LowTime>680)return 0; if(HighTime>400)&&(HighTime<680)temp=temp&0x7f; if(HighTime>1400)&&(HighTime<1850)temp=temp|0x80; Ni=temp; /将解码出的字节值储存在ai if(N2=N3) /验证键数据码和其反码是否相等,一般情况下不必验证用户码 return 1; /解码正确,返回1/*中断函数解码*/void Int0(void) interrupt 0 EX0=0; TH0=0; TL0=0; TR0=1; while(IR=0); TR0=0; LowTime=TH0*256+TL0; /保存低电平时间 if(LowTime>8500)&&(LowTime<9500)!=1) EX0=1;return; TH0=0; TL0=0; TR0=1; while(IR=1); TR0=0; /关闭定时器T0HighTime=TH0*256+TL0;/保存引导码的高电平长度 if(HighTime>4000)&&(HighTime<5000)DeCode(); Gn(N2); EX0=1; /*函数功能:按键消抖延时程序*/void YS(uchar time)/1ms延时去抖时间uchari,j; for(i=0; i<time; i+) for(j=0; j<247; j+)_nop_();/*拓展函数,亮灯*/void Gn(uchar x)switch(x)case 1:aa=aa;break; case 2:bb=bb;break; case 3:cc=cc;break; case 4:dd=dd;break;default:break;1602库函数#include <reg51.h>/51寄存器文件#include <intrins.h>typedef unsigned char uchar;/用uchar代替unsigned char typedef unsigned intuint;/uint代替unsigned inttypedef bit BOOL ;/用BOOL代替bit sbitrs= P20; /复位端sbitrw = P21; /写数据端sbitep = P22;/使能端/*延时函数*/void delay_lcd(ucharms)uchari;while(ms-)for(i = 0; i< 250; i+)_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /空执行消耗CPU时间达到等待的效果/*LCD测忙函数*/BOOL lcd_bz()BOOL result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P1 & 0x80); /检测d最高位是否为1ep = 0;return result; /返回测忙结果voidlcd_wcmd(ucharcmd) / 写入指令数据到LCDwhile(lcd_bz();rs = 0;rw = 0;ep = 0;_nop_();_nop_();P1 = cmd; /将8位指令通过d口传给1602_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;voidlcd_pos(ucharpos) /设定显示位置lcd_wcmd(pos | 0x80);voidlcd_wdat(uchardat) / RS为高电平,RW为低电平时,可以写入数据while(lcd_bz();rs = 1;rw = 0;ep = 0;P1 = dat; /将8位数据通过d口传给1602 _nop_();_nop_();_nop_(); / _nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;voidlcd_init() /LCD初始化设定lcd_wcmd(0x38);/16*2显示,5*7点阵,8位数据delay_lcd(1);lcd_wcmd(0x0c);/显示开,关光标delay_lcd(1);lcd_wcmd(0x06);/移动光标delay_lcd(1);lcd_wcmd(0x01);/清除LCD的显示内容delay_lcd(1);voidlcd(unsigned char dis1,unsigned char dis2)uchari;lcd_init(); /初始化LCDdelay_lcd(10);lcd_pos(2); /设置显示位置为第一行的第3个字符i = 0;while(dis1i != '0')lcd_wdat(dis1i);i+;lcd_pos(0x45);/设置显示位置为第二行第6个字符i = 0;while(dis2i != '0')lcd_wdat(dis2i);/显示字符i+;

    注意事项

    本文(基于单片机的智能遥控器设计毕业论文.docx)为本站会员(哈尼dd)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开