基于51单片机的遥控万年历设计原创通过毕业答辩

上传人:痛*** 文档编号:102207045 上传时间:2022-06-06 格式:DOC 页数:45 大小:773.50KB
返回 下载 相关 举报
基于51单片机的遥控万年历设计原创通过毕业答辩_第1页
第1页 / 共45页
基于51单片机的遥控万年历设计原创通过毕业答辩_第2页
第2页 / 共45页
基于51单片机的遥控万年历设计原创通过毕业答辩_第3页
第3页 / 共45页
点击查看更多>>
资源描述
本科生毕业论文设计系院 物理与电子工程学院 专 业 电子信息工程 论文题目 基于单片机的遥控万年历学生姓名 钟华 指导教师 张九华 讲师 姓名及职称班 级 2007级 电信1班 学 号 07331020 完成日期:2021年11月基于单片机的遥控万年历钟华物理与电子工程学院 电子信息工程 07331020摘要 本设计以C语言进行软件设计,使程序设计更加简洁。系统以STC89C52单片机为控制核心,通过1602液晶显示年、月、日、时、分、秒、星期、环境温度信息,具有闹钟和实时更新时间的功能,可通过自制红外遥控器设置闹钟,调节时间和日期,总之本设计具有人性化的操作和美观的界面显示。关键词 STC89C52单片机 液晶显示 红外遥控器前言时钟作为人们长期以来的朋友,它的数字化也为人们的生活带来了方便。因此对时钟的研究是不可或缺的。随着微电子技术和超大规模集成电路技术的不断开展,家用电子产品不但种类日益丰富,而且变得更加经济实用,而单片机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用。LCD数字显示的日历钟显示清晰直观、走时准确,并且还可以扩展出多种功能。功能也越来越齐全,除了公历年月日、时分秒、星期显示及闹铃。但通过我们对各种电子钟表、历的不断观察总结发现目前市场的钟、历都存在一些缺乏之处,比方:时钟不精确、不具有遥控功能、无环境温度显示等,这都给人们的使用带来了某些不便。为此设计了一种功能全面、计时准确、本钱低廉的基于单片机的遥控万年历。1方案的选择与论证1.1 总体控制局部的方案选择1. 用可编程逻辑器件设计。可采用ALTERA公司的FLEX10K系列PLD器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比拟方便。但是考虑到本设计的特点,EDA在功能扩展上比拟受局限,而且EDA占用的资源也相对多一些。从本钱上来讲,用可编程逻辑器件来设计也没有什么优势。2. 主控芯片使用51系列STC89C52单片机,时钟芯片用美国DALLAS公司推出的一种高性能、低功耗、带非易失性RAM时钟芯片DS12887。采用DS12887作为计时芯片,可以做到计时准确。更重要的是DS12887,断电后时钟无需重新调整,能自动更新公历的年月日、星期,带闹铃功能。本系统采用了此方案。 测温局部的方案选择用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测量的一般都是电压,再转换成对应的温度,需要比拟多的外部硬件支持,硬件电路复杂,软件调试复杂,制作本钱高。2.与前面相比,采用美国DALLAS半导体公司继DS1820之后推出的一种改良型智能温度传感器DS18B20作为检测元件,测温范围为-55125。DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,减少了外部的硬件电路,具有低本钱和易使用的特点。显示局部的方案选择1.数码管显示,8段数码管显示虽不需要复杂的驱动程序,可视范围宽,但硬件制作本钱高,硬件电路的设计复杂。2. 相比数码管显示方式。液晶显示效果出众,屏幕不会有闪烁。液晶操作方便,且与单片机的接口电路简单,这些大大提高了万年历的性能。所以最后选择液晶显示方案。2系统硬件电路设计硬件电路实物图见附录一。硬件电路原理图分发射局部电路图见附录二和接收局部电路图见附录三,下面主要介绍其局部电路图。2.1 STC单片机最小系统图1 单片机最小系统STC单片机是一种高性能、低功耗的8位CMOS微处理芯片, STC单片机虽然功能强大,但要想完成其强大的功能,单靠它也是不的行的,因此要让它运行起来,就要创设其工作的环境,即最小系统,STC单片机最小系统6如图1所示,它包括振荡电路,复位电路,电源电路。晶振电路图2 晶振电路在晶振电路中,C1、C2为晶振的负载电容,分别接在晶振的两个脚上和对地的电容,电路中取了30PF。晶振引脚的内部通常是一个反相器。在晶振输出引脚 XO 和晶振输入引脚 XI 之间用一个电阻连接, 很多芯片的引脚内部已经包含了这个电阻, 引脚外部就不用接了。这个电阻是为了使反相器在振荡初始时处与线性状态,反相器就如同一个有很大增益的放大器, 以便于起振。.2复位电路图3 复位电路单片机复位电路有上电自动复位和手动复位两种方式。上电复位要求接通电源后,自动进行复位操作。手动复位要求接通电源的前提下,在单片机运行的条件下,在单片机运行期间,用按钮开关操作使单片机进行复位的操作。这里采用的是手动复位。.3电源电路图4 电源电路单片机要工作实现其控制功能需要电能,电源电路就是为单片机提供电能的。 1602液晶显示电路图5 液晶显示电路2.2.1 1602液晶概述1602是字符型液晶,字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,能够同时显示16x216列2行即32个字符。.2 1602液晶引脚功能表1 液晶引脚功能引脚符号功能说明1VSS一般接地2VDD接电源+5V3V0液晶显示器比照度调整端,接正电源时比照度最弱,接地时比照度最高。4RSRS为存放器选择,高电平1时选择数据存放器、低电平0时选择指令存放器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作6EE(或EN)端为使能端,下降沿使能。7DB0双向数据总线 0位最低位8DB1双向数据总线 1位9DB2双向数据总线 2位10DB3双向数据总线 3位11DB4双向数据总线 4位12DB5双向数据总线 5位13DB6双向数据总线 6位14DB7双向数据总线 7位最高位,也是读忙标志位15BLA背光电源正极16BLK背光,电源负极2.2.3 1602读写时序图图6 1602读写时序图 时钟电路 图7 时钟电路2.3.1 DS12887概述DS12887是一款新型的日历时钟芯片能自动产生世纪、年、月、日等时间信息,自带锂电池,掉电后时间信息不丧失,带有128字节的RAM,具有闹铃功能且通过编程能实现多种方波输出。2.3.2 DS12887引脚功能表2 DS12887引脚功能引脚符号功能说明1MOT模式选择引脚,接Vcc时,选择的是Motorola的总线时序;当接地或悬空,选择的是Intel总线时序4-11AD0-AD7双向地址/数据总线12GND接地13CSDS12887的芯片选选通信号,必须在CS有效的状态下,Motorola时序中数据或地址才可以选通或Intel时序中读写信号才可以有效。14AS地址选通,一个高电平的地址选通信号提给总线时,在AS脉冲的下降沿,DS12887选通地址。15R/W读写信号,有两种操作模式。当MOT引脚接Vcc选择Motorola时序,当MOT接地选择的是Intel时序。17DS数据选通或读出,根据模式选择的不同,DS引脚有两种不同的操作模式。18RESETRESET引脚对时钟,日历,RAM没有影响。在上电时,RESET能一直保持低电平使系统保持稳定。19IRQ中断请求,在DS12887中IRQ是一个低有效信号,它能对处理器发出一个中断信号。23SQW方波输出引脚24VCC接电源+5V注:其中NC代表空脚。 2.3.3 DS12887读写时序图8 DS12887读写时序intel时序2.4 测温电路图9 ds18b20测温电路2.4.1 DS18B20概述DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改良型智能温度传感器,它能直接读出被测温度,测温范围 55125,温度以9或12数字量读出,。独特的单线接口仅需要一个端口引脚和单片机进行通信。2.4.1 DS18B20引脚功能表3 DS18B20引脚定义引脚符号功能说明1GND 接地2DQ数字输入/输出3VDD可选的+5V电源.2 DS18B20内部结构图图10 DS18B20内部结构2.4.3 DS18B20操作流程图11 DS18B20操作流程 红外接收电路图12 SM0038红外接收电路.1 概述一体化接收头(SM0038)接收遥控器用来产生遥控编码脉冲,完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲。遥控编码脉冲是一组串行二进制码,对于一般的红外遥控系统,此串行码输入到单片机,并由其内部CPU完成对遥控指令解码,并执行相应的遥控功能。.2 SMOO38引脚功能 表4 SM0038引脚功能引脚符号功能说明1OUT输出一组串行二进制码遥控编码脉冲2VSS接电源+5V3GND接地.3 二进制码的解调图13 二进制码的解调过程红外接收头接收到遥控信号需先进行解调,其解调过程如图13所示,当接收到调制信号时,输出高电平,否那么输出为低电平,是调制的逆过程。SM0038是一体化集成的红外接收器件,直接就可以输出解调后的上下电平信号。2.6 闹铃电路图14 闹铃电路闹铃功能是由单片机的I/O口输出一定频率方波信号,驱动蜂鸣器发出特定频率的声音信号实现的。当前时间和闹铃设置的时间相等时蜂鸣器就会发出声音,提示闹铃时间到。2.7 红外信号的调制和发射红外信号的调制和发射由单片机最小系统、矩阵编码键盘和红外信号发射电路组成。单片机最小系统在前面介绍中已经提到,这里就不再赘述。2.7.1 红外发射电路图15 红外发射电路如图15所示,经单片机调制后的编码信号由单片机的P3.2口输出,经红外发射二极管D2发射出去。2.7.2 矩阵键盘电路图16 矩阵键盘电路当单片机检测到有按键被按下时,就发射与之相对应的二进制编码信号,按键和二进制编码信号的对应关系见表5。二进制信号如图a和b所示的调制过程如图c所示由单片机来完成,它采用PPM编码 如图d所示。单片机把编码后的二进制信号调制成频率为38kHz 的间断脉冲串,相当于用二进制信号的编码乘以频率为38kHz 的脉冲信号得到的间断脉冲串,也即是调制后用于红外发射二极管发送的信号。 图a 二进制码1 图b 二进制码0图c 二进制信号的调制图d PPM编码格式表5 按键功能及其与遥控编码的关系按键编号对应的遥控编码值实现的功能S10x01第一次表示要调节时间,液晶光标定位到秒的个位,第二次按下表示时间调节完成S20x02第一次表示要设置闹钟,液晶光标定位到秒的个位,第二次按下表示闹钟设置完成S30x03闹钟停闹蜂鸣器停止响S40x04调节星期,按一次星期加1,加到7后回到1S50x05调节年,按一次年加1,加到99后回到0S60x06调节年,按一次年减1,减到0后回到99S70x07调节时,按一次时加1,加到23后回到0S80x08调节时,按一次时减1,减到0后回到23S90x09调节月,按一次月加1,加到31后回到1S100x0A调节月,按一次月减1,减到1后回到31S110x0B调节分,按一次分加1,加到59后回到0S120x0C调节分,按一次分减1,减到0后回到59S130x0D调节日,按一次日加1,加到31后回到1S140x0E调节日,按一次日减1,减到1后回到31S150x0F调节秒,按一次秒加1,加到59后回到0S160x10调节秒,按一次秒减1,减到0后回到593系统软件设计 概述本系统以C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序更简洁,逻辑关系更强。软件设计分发送模块程序和接收模块程序的设计。发送模块程序即为红外信号发射程序的设计,接收模块程序设计包括:时钟及显示程序的设计,测温及显示程序的设计,红外信号接收和处理程序的设计。完整的程序代码键附录四和附录五。3.2 时钟及显示程序的设计因为使用了时钟芯片DS12887,时钟程序只需从DS128872的时间和日期存放器中读出数据,再把数据送液晶显示即可。在首次对12887和液晶进行操作之前,都要初始化,时钟程序流程图如图17所示。图17 时钟程序流程图 测温及显示程序的设计主程序的主要功能是负责读出并处理DS18B20测量出的温度值,并实时显示,对DS18B20进行操作首先要进行初始化,初始化包括:发DS18B20复位命令,发跳过ROM命令,发读取温度命令。其程序流程图见图18。图18 温度设计程序流程图 红外信号接收和处理程序的设计红外信号的的接收通过外部中断1处理函数来完成的,中断函数中判断按键的编码,然后执行相应的按键动作,比方检测到键S1被按下,那么执行调节时间的动作。图19 红外发射程序流程图 红外信号发射程序的设计红外发射程序和红外接收程序是独立的,红外信号的发射和接收分别由各自单片机来完成。红外信号的发射利用定时器12,每隔26us中断一次,主程序中等待按键被按下,假设检测到有按键按下,就调用红外发射函数,发送相应的二进制编码。其程序流程图见图20。图20 红外发射程序流程图4系统的调试系统的调试分为硬件调试和软件调试。其中硬件调试主要是检测硬件电路是否有短路、断路、虚焊现象。测温检测,红外发射电路,蜂鸣器电路的硬件电路很简单,很容易检测,时钟模块,液晶显示电路和矩阵键盘电路与单片机相连接复杂一些。另外可以通过软件来调试硬件,如编写一个简单的显示程序来测试显示电路连接是否正确。接下来是进行软件调试,我是先编写液晶显示程序,确保液晶正常工作,后嵌入DS12887的读写程序,使DS12887内部的时间信息能正确的显示,然后写红外发射和接收测试程序,看红外发射红外接收模块是否能正常工作,最后再考虑写时间的调节程序和闹钟测试程序。5总结用单片机做开发比模拟电路有明显优势,即不用对电路有大改动就可以适应新的工作条件,升级也很方便,只需对CPU 重新刷写一次程序就可以了。单片机具有结构简单、编程方便、经济、易于连接等优点,特别是其内部定时器/计数器、中断系统资源丰富,有应用价值。而且电路的可靠性比拟高,功能也比拟强大,可以随时更新系统,进行不同状态的组合。但是实际应用中单片机也有很多局限性,比方内部存储器容量不够大,运算速度不够快,内部输出信号功率很小,因而要驱动。该毕业设计是把所学知识应用到实践设计的过程。通过不断的学习与探索,在已有的知识根底上运用各种学习工具和设计资源逐步完成实际操作与应用。使学习能力和实践能力得到很大提高。在该系统的设计过程中,其功能实现上曾遇到过各种困难,与同学的交流和探讨以及老师的给予的意见和建议给了我很大帮助,我也积极在图书馆和网上查阅相关资料,程序在不断的修改和调试中得以通过. 这题目更让我认识和学习了单片机更多的知识,keil编译软件以及PROTEUS仿真软件,使我操作更加熟练,也对整个电路开发设计过程有了一些了解。为了这次设计,我查找了大量的相关资料,终于解决了很大局部和本次设计相关问题,同时积累了更多的经验,以备以后学习、工作使用。这一过程正是对已学知识缺乏的弥补和提高,也是大家互相学习的过程,更是锻炼自己查阅资料解决问题的过程,使我们不仅仅局限于书本上的知识,而是将书本知识和实际应用通过本次设计真正结合起来,真正锻炼了我们动手和思考能力。同时,通过查找相关资料和撰写论文,自己各方面的综合能力都得到提升,培养了严谨的科学思维、端正的科学态度和分析问题解决问题的能力。本次毕业设计的整个过程中将对我今后的学习和工作产生积极的影响。 本设计制作完成了题目要求。通过本次设计提高了我实践能力和理论水平,并且对于我认识掌握各种操作技巧具有重大意义,使我的综合素质有了进一步的提高。参考文献J.北京:北京航空航天大学出版社, 1994 J5 李群芳,肖看.单片机原理、接口及应用6 王 毅. 单片机器件应用手册北京J. 人民邮电出版社J9 陈伟人. MCS-51系列单片机实用子程序集锦J10赵文博 刘文涛. 单片机语言C51程序设计J. 北京 : 人民邮电出版社, 2005.10, 2006.3重印 11林伸茂. 8051单片机彻底研究经验篇J. 北京 : 人民邮电出版社, 2004, 200512邓兴成,姜宝钧,何光谱等.单片机原理与实践指导M.REMOTE CALENDAR Based On MicrocontrollerZhongHuaElectronic Information Engineering 07331020Abstract This design in C language software design make the program design more concise.This system takes STC89C52 microcontroller as control core.The 1602 character liquid crystal was used to display the information of date and time, minutes and seconds, week, environmental temperature.The design has the function of alarm clock and real-time updating.With the homemade infrared ,we can set alarm and adjust the time as well as date. In general,this design has the humanized operate and beautiful interface display.Key words STC89C52 LCD display Infrared 附 录 一:硬件实物图附 录 二:发射局部原理图附 录 三:接收局部原理图附 录 四:发送局部程序代码#include static bit OP; /红外发射管的亮灭static unsigned int count; /延时计数器static unsigned int endcount; /终止延时计数static unsigned int temp; /按键static unsigned char flag; /红外发送标志static unsigned char num;static unsigned char key;sbit ir_in=P32;char iraddr1; /十六位地址的第一个字节char iraddr2; /十六位地址的第二个字节unsigned char code table=/遥控编码0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10;void delay(unsigned int);void keyscan();void delay(unsigned int z)unsigned char x,y;for(x=z;x0;x-) for(y=110;y0;y-);void SendIRdata(char p_irdata)int i;char irdata;/发送9ms的起始码endcount=223;flag=1;count=0;dowhile(countendcount);/*发送4.5ms的结果码*/endcount=117;flag=0;count=0;dowhile(countendcount);/*发送十六位地址的前八位*/irdata=iraddr1;for(i=0;i8;i+)/*先发送0.56ms的38KHZ红外波即编码中0.56ms的低电平*/endcount=10;flag=1;count=0;dowhile(countendcount);/*停止发送红外信号即编码中的高电平*/if(irdata-(irdata/2)*2) /判断二进制数个位为1还是0 endcount=41; /1为宽的高电平else endcount=15; /0为窄的高电平flag=0;count=0;dowhile(count1; /*发送十六位地址的后八位*/irdata=iraddr2;for(i=0;i8;i+)endcount=10;flag=1;count=0;dowhile(countendcount);if(irdata-(irdata/2)*2) endcount=41;else endcount=15;flag=0;count=0;dowhile(count1;/*发送八位数据*/ irdata=p_irdata;for(i=0;i8;i+)endcount=10;flag=1;count=0;dowhile(countendcount);if(irdata-(irdata/2)*2)endcount=41;elseendcount=15;flag=0;count=0;dowhile(count1; /*发送八位数据的反码*/irdata=p_irdata;for(i=0;i8;i+)endcount=10;flag=1;count=0;dowhile(countendcount);if(irdata-(irdata/2)*2)endcount=41;elseendcount=15;flag=0;count=0;dowhile(count1;endcount=10;flag=1;count=0;dowhile(countendcount);flag=0;/*44键盘扫描按下按键发射数据*/void keyscan() unsigned char temp,num;/*/P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0) delay(5);temp=P2;switch(temp) case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0; SendIRdata(tablenum-1);/*/P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0) delay(5);temp=P2; switch(temp) case 0xed:num=5;break; case 0xdd:num=6;break; case 0xbd:num=7;break; case 0x7d:num=8;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;SendIRdata(tablenum-1);/*/P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0) delay(5);temp=P2;switch(temp)case 0xeb: num=9;break;case 0xdb: num=10;break;case 0xbb: num=11;break;case 0x7b: num=12;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;SendIRdata(tablenum-1);/*/ P2=0xf7; temp=P2; temp=temp&0xf0; while(temp!=0xf0) temp=P2; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=P2; switch(temp) case 0xe7:num=13;break; case 0xd7:num=14;break; case 0xb7:num=15;break; case 0x77:num=16;break; while(temp!=0xf0) temp=P2; temp=temp&0xf0;SendIRdata(tablenum-1); /*/*主函数*/void main(void)num=0;count = 0;flag = 0;OP = 0;ir_in = 0;EA = 1; /允许CPU中断TMOD = 0x11; /设定时器0和1为16位模式1ET0 = 1; /定时器0中断允许TH0 = 0xFF;TL0 = 0xE6; /设定时值0为38K 也就是每隔26us中断一次TR0 = 1;/开始计数/*/while(1) keyscan(); /*定时器0中断处理 */void timeint(void) interrupt 1TH0=0xFF;TL0=0xE6; /设定时值为38K 也就是每隔26us中断一次count+;if (flag=1)OP=OP; /OP=1;elseOP = 0;/OP=0;ir_in= OP;附录五:接收局部程序代码#include #include #include#include#include#include#include#include/* 名称 : main* 功能 : 主函数* 输入 : 无* 输出 : 无*/ void main()/主函数 uchar num;init();/调用液晶初始化函数EA=1;/ 允许总中断EX1=1; IT1=1; EX0=1; IT0=1;/触发方式为负边沿触发/*/ week=1;flag=1;/*/ read_ds(0x0c);/读闹钟存放器 write_ds(0x0B,0x26);/设置24小时模式,数据二进制格式write_ds(0x0A,0x20);/翻开振荡器/*/set_time();/*/ temp=ReadTemperature();/因为18b20初始化成功后,默认温度85 delay(1000); /延时,使液晶开始不显示85/*写入液晶固定局部显示*/write_date(0x7e);for(num=0;num0;x-)for(y=110;y0;y-);/* 名称 : del* 功能 : 短暂 延时* 输入 : t* 输出 : 无*/void del(uint t) /延时 while(t-);/* 名称 : LCD_Wait* 功能 : 液晶 读忙* 输入 : 无* 输出 : 无*/void LCD_Wait(void)/读忙状态LcdRs=0;LcdRw=1;LcdEn=1;del(10);LcdEn=0;/下降沿while(Lcdbf) LcdEn=0;LcdEn=1; /仿真才需要此语句,实际硬件中不需要/* 名称 :write_com* 功能 : 液晶写命令函数* 输入 : com-命令字* 输出 : 无*/void write_com(uchar com)LcdRs=0;LcdRw=0;DBPort=com;LcdEn=1;del(10);LcdEn=0;LCD_Wait();/* 名称 : write_date* 功能 : 液晶写数据函数* 输入 : date-要写的数据* 输出 : 无*/void write_date(uchar date) LcdRs=1;LcdRw=0;DBPort=date;LcdEn=1;del(10);LcdEn=0;LCD_Wait();/* 名称 : init()* 功能 : 液晶初始化* 输入 : 无* 输出 : 无*/void init() /*/uchar num;/set_alarm(18,25,20); /write_ds(0x0B,0x26);/设置24小时模式,数据二进制格式 /set_
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!