《基于lcd1602电子时钟课程设计毕业论文报告.doc》由会员分享,可在线阅读,更多相关《基于lcd1602电子时钟课程设计毕业论文报告.doc(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 信息与电子工程学院课程设计报告课 程单片机技术应用设计题目基于LCD1602电子时钟专 业班 级成 员姓 名学 号分工成 绩指导老师答辩日期 目 录一、课程设计概述21.1 课程设计背景21.2 课程设计内容21.3 课程设计技术指标2二、方案的选择及确定22.1 单片机芯片的选择22.2 显示模块的选择32.3 实时时间计算模块的选择32.4 实时环境温度采集模块选择32.5 电路设计最终方案决定4三、系统硬件设计43.1 主控模块43.2 LCD显示模块设计53.3 时间计算模块设计53.4 实时环境温度检测模块63.5 报警模块63.6 设置模块73.7 电源接口部分7四、系统软件设计
2、74.1 主函数74.2设置模块84.3 1602液晶屏94.4 软件原理图10五、系统调试过程105.1软件调试105.2硬件调试11六、结论11七、遇到的问题及解决方法和总结117.1硬件方面117.2软件方面127.3总结12八、参考文献12九、附 录13一、 课程设计概述1.1 课程设计背景随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。而电子万年历作
3、为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。1.2 课程设计内容利用单片机、时钟芯片DS1302、温度传感器DS18B20、1602液晶屏等实现日期、时间、温度的显示,即是一个电子时钟。具体的功能如下:(1)通过DS1302能够准确的计时,时间可调并在液晶屏上显示出来。(2)通过DS18B20能够实时、准确的检测当前环境温度。(3)利用程序控制单片机实现闹钟功能。1.3 课程设计技术指标(1)
4、LCD液晶每行刷新显示。(2)实时时钟可提供年、月、日、时、分和秒,每月的天数可以自动调整,且具有闰年补偿功能。(3)时间是24小时制;年限2000年2099年。(4)测量温度范围为 0 + 60 ,误差为 0.5C 。二、 方案的选择及确定2.1 单片机芯片的选择方案(1): 采用AT89S51芯片作为硬件核心 该芯片采用Flash ROM,内部具有4KB ROM 存储空间,而且与MCS-51系列单片机完全兼容,但是需要通过下载板来下载,比较不方便。方案(2):采用传统的STC89C52RC芯片作为硬件核心该芯片具有 8KB 在线系统可编程Flash存储器。STC89C52RC使用经典的MC
5、S-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能,并且可直接使用串口下载。 因AT89S51需要通过下载板下载,而STC89C52RC可直接使用串口下载,所以选择采用方案(2)STC89C52RC作为主控制系统.2.2 显示模块的选择方案(1): 8段数码管显示8段数码管是利用发光二极管的特性组合而成数字显示器件,通过控制相应的二极管的状态显示相应的数字。采用数码管显示,数码管亮度高、体积小、重量轻,但其显示信息简单、有限,操作比较液晶显示来说略显繁琐。方案(2):1602液晶屏显示1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块采
6、用液晶显示。液晶显示功耗低,轻便防震。由于设计显示信息比较多,占用的系统资源少,操作方便。因本设计显示的字符较多,1602LCD可以显示32个字符,而8段数码管显示的字符较少,且操作比液晶显示略显繁琐,所以采用方案(2)1602液晶屏组成本设计的显示模块。2.3 实时时间计算模块的选择方案(1):采用STC89C52RC芯片STC89C52RC单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用12MHZ实现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能,要实现“电子时钟”的功能需要较复杂的程序,时间计算逻辑较困难,所以使用不便
7、。 方案(2):采用DS1302芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片。该芯片采用3线串行接口方式,可提供年月日、星期、时分秒等时间信息,并可根据月份和闰年的情况自动调整月份的结束日期。内部带有31个字节RAM,用于存放临时性数据,同时具有可编程涓细电流充电能力。因STC89C52RC芯片时间计算逻辑较困难,而DS1302可根据月份和闰年的情况自动调整月份的结束日期且具有编程涓细电流充电能力,所以采用方案(2)实现实时计时功能。2.4 实时环境温度采集模块选择方案(1):采用热敏电阻热敏电阻是开发早、种类多、发展较成熟的敏感元器件热敏电阻由半导体
8、陶瓷材料组成,利用的原理是温度引起电阻变化。通过一定的电路可以将周围环境的温度变化转化成电压的变化,通过AD转化器件将信号传输给单片机进行分析,所以热敏电阻需要的外部器件较多。方案(2):采用DS18B20DS18B20是美国DALLAS公司生产的数字温度传感器,采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯。在使用中可以不接任何外围元件,或者在单总线上接一个4.7K的上拉电阻,支持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温,供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源,因此非常适合本系统使用
9、。因热敏电阻需要的外部器件较多,而DS18B20在使用中可以不接任何外围元件,或者在单总线上接一个4.7K的上拉电阻,所以采用方案(2)构成本设计的实时温度采集模块。2.5 电路设计最终方案决定综上各方案所述,本系统以STC89C52RC单片机为控制核心,通过与DS1302和DS18B20通信获取实时时间和实时环境温度,并将得到的数据通过1602液晶显示出来,同时通过对应的按键调整相应的值,并且通过蜂鸣器实现报警功能。因此本设计的总体方案组成框图如图2-1所示:显示模块(1602液晶)STC89C52RC报警模块(蜂鸣)时间计算模块(DS1302)实时温度采集模块(DS18B20)设置模块(独
10、立按键)图2-1 总体方案组成框图三、 系统硬件设计3.1 主控模块本次课程设计主要用到STC89C52RC单片机,硬件原理图(见附录图一)。端口分配表如3-1所示: 表3-1 端口分配表引脚序号引脚名称作用及功能1P1.0DS1302时钟输入2P1.1时钟串行数据输入、输出端3P1.2时钟芯片复位端58P1.4P1.7按键设置9RST芯片复位端口13P3.3实现18B20温度的输入16P3.6接蜂鸣器,实现闹钟功能18、19XTAL1、XTAL2外部晶振端口26P2.5实现1602数据和指令选择控制端27P2.61602读写控制端28P2.71602数据读写操作控制位30、31ALE、EA地
11、址锁存端口,烧写程序的端口3239P0输出数据,控制1602液晶屏的显示3.2 LCD显示模块设计1602液晶功耗较小可直接与单片机接口相接,电源直接与电源电路相接为+5V,对比度可调。本设计使用单片机的P0口和P2口与1602进行通信。另外1602有2行显示,每行显示的字符数为16个,可以用于显示字母、数字、符号等,并具有简单且功能较强的指令集,可以实现字符显示、移动、闪烁等功能。1602液晶与单片机接口电路如图3-1所示:图3-1 1602液晶与单片机接口3.3 时间计算模块设计DS1302通过三根I/O线实现与单片机的通信,依靠2、3脚外接的晶振与其内部的电容配合来产生时钟脉冲的。当外接
12、晶振电路振荡时,DS1302计时正确;当外接晶振电路停振时,DS1302计时停止。因此32.768kHz晶振是造成DS1302工作不稳定的主要因素。因其功耗很小,当1脚的主电源超过8脚接的备用电源加0.2V时,由主电源对芯片供电;否则,有备用电源对芯片供电,所以即使电源掉电后通过3V的电池仍能维持芯片精确走时。DS1302与单片机接口电路如图3-2所示:图3-2 DS1302与单片机接口 3.4 实时环境温度检测模块DS18B20通过单总线实现与单片机的通信,系统中的数据交换,控制都由这根线完成。在使用中DS18B20没有用到任何外围元件,可工作在 15+100内。DS18B20与单片机接口电
13、路如图3-3所示:图3-3 DS18B20与单片机接口 3.5 报警模块在本设计中蜂鸣器直接接在单片机P3.6上。报警模块采用单片机输出1.25KHZ的频率从而使蜂鸣器发出声音。方波图如图3-4所示:图3-4 方波图3.6 设置模块设置模块采用四个按键K1-K4与单片机P1.4、P1.5、P1.6、P1.7接口相接,其中K1为设置模块的选择位,K2是增加键,K3是减少键,K4为退出按键。独立按键与单片机接口电路如图3-5所示:图3-5 独立按键与单片机接口3.7 电源接口部分采用USB接口从电脑接到电源接口中,拨动开关可控制电路的接通和关闭,并用一个发光二极管作电源指示。电源接口如图3-6所示
14、:图3-6 电源接口四、 系统软件设计软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的良好。本系统采用具有编写灵活、移植方便、便于模块化设计的C语言编写,并通过Proteus软件进行仿真,完成各种实质性功能的设计。4.1 主函数主函数是程序功能总结显示的函数,其主要显示的是时间主要部分和当前实时时间,当按下按键2时1602显示当前温度状态,并延时5s,后返回当前时间显示状态;当闹钟功能打开,实时时间又和闹钟时间相等就会发出嘀嘀的响声并且在液晶屏上有相应的提示,此时按按键4退出;当进入设置状态完成后退出就回到当前时间显示状态。主函数程序框图如图4-1所示:显示欢迎界面按K2?显
15、示时间主要部分清屏显示实时时间设 置 模 块清屏显示当前温度清屏显示时间主要部分清屏显示TIME UP清屏显示时间主要部分实时=闹钟? 闹钟开? 报 警 按K4?是是是是否否否AA否初始化开 始图4-1 主函数程序框图4.2设置模块设置模块分时间设置、闹钟设置、最高温度报警设置。要先按下按键1才能进入设置模块,然后按下按键1进入设置时间模块;按键2进入最高温度报警模块;按键3进入设置闹钟模块,最后按下按键4退出当前状态。设置步骤流程图如图4-2所示:开 始按K1?进入设置模块进入时间调整按K2?按K3?进入高温报警设置按K4?进入闹钟时间设置是是是是否否否否AA按K1?是否退 出图4-2 设置
16、步骤流程图4.3 1602液晶屏1602液晶屏是此设计的主要输出部分,有2行显示,每行16个字符,根据写入的位置而显示,当显示欢迎界面时是流动的,整个屏幕向右移动。 1602LCD流程图如图4-3所示:1602初始化刷新显示第一行数据刷新显示第二行数据结 束开 始图4-3 1602LCD流程图4.4 软件原理图软件原理图如附录图二所示:这个设计中,STC89C52RC主要功能是储存程序、根据程序的内容对各个端口进行判断并作出相应的处理;DS1302主要功能是控制年,月,日,时,分,秒的显示效果;LCD1602主要功能是将所要显示的显示出来;DS18B20主要功能是控制温度的显示效果。通电后,进
17、入欢迎界面,前后延时2.8s,,后显示当前实时时间,若按下按键1就进入调节状态,此时在按下按键1为设置时间状态,按下按键2为设置最大温度报警状态,按按键3为设置闹钟状态,按下按键4为退出调节状态;若按下按键2则是显示当前温度,5s后自动跳回显示当前实时时间。五、 系统调试过程系统调试共分为两大部分:一个是软件调试,另一个是硬件调试。其中软件仿真通过Protues实现;硬件部分现在Protel99SE上设计出硬件电路图,画出PCB图,然后再制造出实物。调试方法采用先分别调试各单元模块,调通后再进行整体调试的方法,以提高调试效率。5.1软件调试先根据仿真检测当中的元件是否符合电路的设计,在Keil
18、C51写入程序并且修改至编译正确,在将写好的程序入入到Protues软件单片机芯片上,进行仿真。仿真结果如下所示:图a : 显示实时时间 图b: 显示当前温度 图c : 当达到设置的最高温度 图d: 当达到设置的闹钟时间 图e : ,当进入调节状态 图f: 当调节时间 图g : 当调节最高温度 图h: 当调节闹钟 5.2硬件调试根据仿真后的电路图进行做板,先用万用表检测各元器件是否正确,再焊接电路,完成后检查无误就将程序用单片机板下载到芯片上,后把芯片拔下插入实物板上,即可工作。上电后,拨动电源开关就进入欢迎界面 ,2.8s后进入当前实时时间状态,按下按键1进入调节状态,此时按下按键1为设置时
19、间状态,按下按键2为设置最大温度报警状态,按按键3为设置闹钟状态,按下按键4为退出调节状态;在调节状态时按键2为对应增加键,按键3为对应减键,K4为退出按键;按下按键2后用手捏住DS18B20芯片,在液晶屏上显示的温度有明显的变化,所以判断芯片是良好的。六、 结论这次课程设计达到了预期的90%,有显示实时时间和实时温度,但是温度的显示不完全正确,在负数时有三个温度值显示错误,时间的设置逻辑比较啰嗦,没有做到简单化。例外还加了欢迎界面、闹钟功能、最高温度报警功能。下面从软件和硬件两个方面具体说明。硬件的制作要涉及到protel软件的运用,在画原理图的时候如果连错了就直接导致硬件的出错,所以画图的
20、时候要特别注意。到导入PCB时也是要特别注意的,布板不当也是直接影响实物的制作。对于电子时钟的制作,我们基于小系板来实现,外接显示部分的1602LCD液晶屏、温度传感部分DS18B20、提供实时时间部分DS1302、蜂鸣器、电源接口部分等。总之,一步步制作下来我们完成的还是比较可观的。软件的编写上我们出现了较大的困难,电子时钟的程序有些复杂,一开始对于我们来说毫无头绪。后来下了很大的功夫且在老师及同学的指导下慢慢的进入了状态。虽然过程出现很多困难,但结果还是实现了电子时钟的功能,不过在显示温度负数时有三个数值显示错误,分别是-16,-32,-48;另外设置模块的逻辑没有做到简单化,在设置模块时
21、只能退出本级的设置,而不能直接退出到当前实时时间显示状态。七、 遇到的问题及解决方法和总结7.1硬件方面画的PCB板焊盘不够大,又没有相应大小的砖针,而且在融板过程中出现了差错,最后导致PCB板不完美.解决方案:最终决定自己用万能板焊接。7.2软件方面由于对C语言程序的认知不深入,在修改程序时,出现了以下几点问题。(1)欢迎界面的时间太长。解决方案;修改欢迎界面的延时时间。(2)温度显示错乱,并且在显示时高位自动补零。解决方案:通过修改温度函数使其高位的零自动隐藏,但是温度在-16,-32,-48度时仍然会出现错误,比实际的温度高16度,其余温度值时显示正确。(3)秒钟调节时会自动转零。解决方
22、案:把自动转零部分的程序改为秒钟调节功能。(4)进入调节时间状态时字符闪烁以至于看不清楚调节的大小。解决方案:把1602的字符闪烁指令改为光标指令。(5)在报警时无声音。解决方案:修改报警模块,利用控制P3.6脚电源的通断,使蜂鸣器发出嘀嘀的响声。7.3总结课程设计的完成,为我们的大二下学期学习生活画下了最后一笔。在做课程设计的日子里得到了大量课内外的知识巩固,使得我们的动手能力和专业技能都有了很大的提高。让我们认识到脚踏实地,认真严谨是学习的态度,不怕困难、坚持不懈、吃苦耐劳的精神是我们在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的
23、帮助。在这次设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我们的同学。八、 参考文献【1】.常敏.王涵单片机应用程序开发与实践P219【2】.江志红. 51单片机技术与应用系统开发案例精选【3】.赵明明、索世文、王守中51单片机应用开发手册指令、模块、实例【4】.王守中.51单片机开发入门与典型实例P149【5】.天津锐志单片机开发网【6】.杨黎基于C语音的单片机应用技术与Proteus仿真 P21九、 附 录1、仪器与设备清单工具、设备和耗材数量电脑1台KeiluKision41套Proteus7.
24、7软件1套单片机实训板1块杜邦导线16条Protel99SE1套 万用表1套2、元器件清单元件名称型号数量(个)编号价格(元/个)单片机STC89C52RC1A14液晶LMD16L1Y118芯片DS13021Y23温度芯片DS18B201Y313晶振12MHZ,32.768KHZ2JZ1,JZ21瓷片电容22pF2C1,C2电解电容22u10uf1C3排阻10k1RP1按钮6*6*55K1K50.1电阻10k,1k2R1,r2可调电阻1k1POT1电池1.5V2DC0.5电源插座1DY2拨动开关0.9*0.3*1.1cm1KG0.3发光二极管LED1LED0.1蜂鸣器TMB12A051LB0.
25、8排针1*40PIN2.54mm2(排)CON03、原理图(见图一)4、PCB图(见图三)5、实物图(见图四)6、操作说明书a、正常显示时按下K1进入调节状态,此时按下K1为设置时间状态;按下K2为设置最大温度报警状态;按K3为设置闹钟状态;按下K4为退出调节状态;在调节状态时K2为对应增加键,K3为对应减键,K4为退出按键。b、正常显示时按下K2显示当前温度并延时5秒;报警时按K4退出。图 1(硬件原理图)图 2(软件原理图)图 3(PCB)程序:#include#includeunsigned char code displaywelcome= Welcome To My Lcd Time
26、r;/欢迎界面unsigned char code displaywish= Happy Every Day _; /欢迎界面unsigned char code overtemperature=OVERTEMPERATURE!;unsigned char code digit=0123456789; /数字代码unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,minutea,seconds,houra=12;sbit SCLK=P10;/DS1302时钟输入sbi
27、t DATE=P11;/DS1302数据输入sbit REST=P12;/DS1302复位端口sbit SET=P14;/DS1302设置模式选择位sbit ADD=P15;/增加sbit RED=P16;/减小sbit CANL=P17; sbit beep=P36;/位定义,定义P.6位fmpvoid delay1ms(int i)/1毫秒延时 int j,k; while(i-) for(j=76;j1;j-); for(k=29;k1;k-); void delaynus(unsigned char n) /延时若干微秒 unsigned char i; for(i=0;i0;i-)
28、_nop_(); void baojing()/报警 unsigned int j,h,y;for(h=0;h3;h+)for(y=0;y10;y+)beep=beep;for(j=0;j50;j+);dely500(); /*DS1302模块*/ void Write1302(unsigned char date)/向1302写数据 unsigned char i;SCLK=0;delaynus(2);for(i=0;i=1; void WriteSet1302(unsigned char cmd,unsigned char date) /根据相应的命令输入相应的数据 REST=0;SCLK
29、=0;REST=1;Write1302(cmd);delaynus(5);Write1302(date);SCLK=1;REST=0; unsigned char Read1302(void)/读取1302数据 unsigned char i,date;delaynus(2);for(i=0;i=1;if(DATE=1)date|=0x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);return date; unsigned char ReadSet1302(unsigned char cmd)/根据命令读取1302相应的值unsigned char date
30、;REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1;REST=0;return date;void IntDS1302(void) /DS1302初始化 unsigned char flag; flag= ReadSet1302(0x81);if(flag&0x80) /判断时钟芯片是否关闭 WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(0/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值WriteSet
31、1302(0x82,(0/10)4|(0%10); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,(0/10)4|(0%10); /根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,(0/10)4|(0%10); /根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,(0/10)4|(0%10); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,(10/10)4)*10+(value&0x0f);display_Second(seconds);value=ReadSet1302(0x83);minutes=(value&0x70)4)*10+(value&0x0f);display_Minute(minutes);value=ReadSet1302(0x85);hours=(value&0x70)4)*10+(value&0x0f);display_Hour(hours);value=ReadSet1302(0x87);day=(value&0x70)4)*10+(value&0x0f);display_Day(day);value=ReadSet1302(0x89);month=(value&