单片机应用设计实践报告-带温度显示的数字万年历设计(22页).doc

上传人:1595****071 文档编号:37036949 上传时间:2022-08-29 格式:DOC 页数:22 大小:186KB
返回 下载 相关 举报
单片机应用设计实践报告-带温度显示的数字万年历设计(22页).doc_第1页
第1页 / 共22页
单片机应用设计实践报告-带温度显示的数字万年历设计(22页).doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《单片机应用设计实践报告-带温度显示的数字万年历设计(22页).doc》由会员分享,可在线阅读,更多相关《单片机应用设计实践报告-带温度显示的数字万年历设计(22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-单片机应用设计实践报告-带温度显示的数字万年历设计-第 16 页单片机应用设计实践报告课程名称:单片机应用设计实践设计题目:带温度显示的数字万年历设计院 (部): 计算机与信息工程学院 学生姓名: * 学 号: * 专业班级: * 指导教师: * 贵州贵阳年 月 日课 程 设 计 任 务 书设计题目 万 年 历学生姓名*所在院系*专业、年级、班*设计要求:1、设计制作一个用LCD1602显示的带温度显示的万年历;2、具有年、月、日、星期、时、分、秒、温度等显示功能; 3、具备年、月、日、星期、时、分、秒校准功能;4、具有闹钟显示、调节设定、整点鸣叫功能。学生应完成的工作:设计万年历的工作原理

2、,利用DXP 软件绘制电路原理图,利用Keil uVision4软件编写C语言程序并且生成HEX文件。并设计制作电路的PCB板(或万用板的元件布局和连线)。根据设计原理对电路进行安装、调试,完成课程设计工作,并提交课程设计报告。参考文献阅读:51单片机原理与应用案例教程(C51编程)p170的9.1.2 LCD1602液晶应用实例工作计划: *月*号:搜集资料;*月*号:方案论证拟定硬件方案;*月*号:讨论优化并确定硬件方案;*月*号*号:讨论并确定程序流程并绘制流程图; *月*号:根据流程图编写程序并且进行软件的仿真与调试;*月*号*号:硬件电路的制作并撰写课程设计报告;*月*号:烧录程序并

3、调试; *月*号:完成课程设计报告的撰写。任务下达日期:2017年11月 30 日任务完成日期:2017年11月01 日指导教师(签名): 学生(签名):田应焕 万 年 历摘 要:设计了一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度等功能。其中显示部分采用LCD1602显示,时钟部分采用DS1302时钟芯片,温度部分采用DS18B20单线温度传感器。软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。通过之后再烧录到单片机中。该设计的优点是充分利用了LCD1602的显示功能完成了万年历和温

4、度。不足之处是收到LCD1602显示功能的限制没能显示农历日期。关键词: 万年历;LCD1602;温度传感器(DS18B20);时钟芯片(DS1302) 目 录1.设计背景 11.1时钟的用途及精度的需求11.2万年历的使用现状及设计目的12.设计方案12.1任务分析12.2方案选择和论证22.2.1显示模块选择方案和论22.2.2时钟模块的方案选择和论证22.2.3按键控制模块的方案选择和论证22.2.4温度采集模块方案选择32.2.5方案的整体框图32.2.6设计流程图程序部分的拟定案43. 方案实施 53.1.1整体电路及其分析53.1.2电源电路63.1.3单片机最小系统63.1.4蜂

5、鸣器及驱动电路73.1.5时钟芯片DS1302电路73.1.6温度采集芯片DS18B20电路83.1.7键盘控制电路83.1.8 LCD1602控制电路93.2软件仿真103.2.1 Proteus仿真软件介绍103.2.2电路仿真调试113.3 电路的焊接与调试 124.结果与结论145.收获与致谢146.参考文献157.附件 157.1电路原理图157.2 Proteus仿真图167.3电路工作中实物图177.4元器件清单197.5源程序清单 201. 设计背景1.1时钟的用途及精度的需求时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。随着时间的流逝,科学技术的不

6、断发展和提高,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好、更方便、更精确的显示时间,这就要求人们不断设计研发出新型的时钟。高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 1.2万年历的使用现状及设计目的如今万年历已经在人们生活中广泛的使用,它不仅是记录日期和时间的工具,而且也成为了一种装饰品。现在的万年历

7、可以说是多种多样,外观精美。放在家里既可以计时也可作为风景壁画,因此越来越受到大众消费者的喜爱。本次课程设计通过利用STC89C52单片机和DS1302芯片以及外围的按键和LCD显示器等部件,设计一个基于单片机的电子时钟。设计的电子时钟通过液晶显示器显示,并能通过按键对时间以及闹钟进行设置。目的来模拟真实产品中万年历的工作原理,具有很强的实用性。2. 设计方案2.1任务分析目的是设计一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度等功能。其中显示部分准备采用LCD1602显示,时钟部分准备采用DS1302时钟芯片,温度部分准备采用DS

8、18B20单线温度传感器。软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。通过之后再烧录到单片机中。2.2方案选择和论证2.2.1、显示模块选择方案和论证方案一: 采用点阵式数码管显示。点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且难度也相对较高,所以不用此种作为显示。方案二:采用LED数码管动态扫描。LED数码管价格便宜,对于显示数字最合适,但功耗较大,且显示容量不够,所以也不用此种方案。方案三:采用LCD液晶显示屏。液晶显示屏的显示功能强大,可显示大量文字,显示多样,清晰可见,且价格适中,所以采

9、用了LCD数码管作为显示。2.2.2时钟模块的方案选择和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA.2.2.4温度采集模块方案选择(宋体四号,加粗) DS18B20数字温度传感器接线方便,独特的单线接口方式,DS18B20在与微处理器连接时仅需

10、要一条口线即可实现微处理器与DS18B20的双向通讯。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。因此DS18B20完全满足设计要求。2.2.6设计流程图程序部分小组的拟定方案开始相关引脚的特殊位定义相关数字及字母数组设置完成与DS18B20,LCD1602,DS1302相关的子函数的编程完成与DS18B20,LCD1602,DS1302相关的初始化设置CPU读取DS18B20 ,DS1302的温度和时间数据CPU将数据送

11、至LCD1602显示检测是否有时间校准按键按下Y N重新设置时间,并写至进DS1302的寄存器YN返回 图2 设计流程图3. 方案实施3.1.1原理图设计及工作原理分析(宋体四号,加粗)图3 整体原理图我们首先构成单片机的最小系统,使单片机能正常工作,在程序中首先对LCD1602、DS1302、DS18B20进行初始化,由CPU完成对DS1302产生的各种时钟数据的读取,然后将数据写至LCD1602,以显示数据,达到可视化的效果。对于课程设计的拓展部分,我们可以利用DS18B20温度传感器来测试周围环境的温度,由CPU完成对数据的读取,然后通过CPU将数据写至LCD1602,以显示温度数据,达

12、到可视化的效果。通过键盘扫描子程序通过测试按键是否闭合来调整各种时间数据和闹钟已达到校准和定时的目的。3.1.2电源电路(宋体四号,加粗) 我们采用了USB和变压器双电源供电:图4 变压器供电电路 变压器输出的9V交流电经桥堆2W10后变成有较大波动的的直流电,然后经过滤波电容和微调电容后变成直流电,再经过L7805三端稳压器输出5V直流电。7805输出端的电容起到了防干扰和微调作用。图5 USB供电电路3.1.3单片机最小系统(宋体四号,加粗) 单片机采用了上电自动复位和按键复位的双复位,利用12MHZ晶振作为单片机的外部晶振来驱动单片机工作。其中两个33pf的电容用于晶振的启动。由于单片机

13、的P0口是准双向IO口,所以需要排阻RP1作为该口的上拉电阻。图6 单片机最小系统3.1.5时钟芯片DS1302电路(宋体四号,加粗) 时钟芯片采用双电源,当系统断电之后由3V的电源电池供电。保证了系统断电之后时钟继续工作,当系统再次上电之后时钟能显示正确的时间和日期。图8 时钟电路3.1.6温度采集芯片DS18B20电路(宋体四号,加粗)图9 温度采集电路3.1.8 LCD1602控制电路(宋体四号,加粗) LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。第1脚:VSS为电源地。第2脚:VDD接5V电源正极。第3脚:V0为液晶显示器对比度调整

14、端,接正电源时对比度最弱,接地电源时对比度最高。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。图11 LCD1602液晶显示电路3.2软件仿真3.2.1 仿真软件介绍(宋体四号,加粗) Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序

15、调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。 (1)proteus的工作过程 运行proteus的ISIS程序后,进入该仿真软件的主界面。在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。通过工具栏中的p(从库中选择元件命令)命令,在pickdevices窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source菜单的Definecodegenerationtoo

16、ls菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。 (2)Proteus软件所提供的元件资源Proteus软件所提供了30多个元件库,数千种元件。元件涉及到数字和模拟、交流和直流等。 (3)Proteus软件所提供的仪表资源 对于一个仿真软件或实验室,测试的仪器仪表的数量、类型和质量,是衡量实验室是否合格的一个关键因素。在Proteus软件包中,不存在同类仪表使用数量的问题。Proteus还提供了一个图形显示功能,可以将线路上变化的信号

17、,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。 (4)Proteus软件所提供的调试手段 Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。对于单片机硬件电路和软件的调试,Proteus提供了两种方法:一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。 对于总体执行效果的调试方法,只需要执行debug菜单下的execute菜单项或F12快捷键启动执行,用debug菜单下的pauseanimation菜单项或pause键暂停系统的运行;或用debug菜单下的stopanimation菜单项或shift-break组合键停止系统

18、的运行。其运行方式也可以选择工具栏中的相应工具进行。 对于软件的分步调试,应先执行debug菜单下的start/restartdebugging菜单项命令,此时可以选择stepover、stepinto和stepout命令执行程序(可以用快捷键F10、F11和ctrl+F11),执行的效果是单句执行、进入子程序执行和跳出子程序执行。在执行了start/restartdebuging命令后,在debug菜单的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等,可供调试时分析和查看。3.2 Proteus电路仿真与调试图12 Proteus下的仿真电路图本次课程设计我们小组采用分工合作的方式,

19、把任务分成了四个模块:硬件部分、软件部分、仿真调试、实物的制作与调试。我们首先拟定实现的功能方案,然后小组讨论制定系统的整体框图。采用功能模块化、任务具体化、工作协调化的方式,充分发挥小组成员各自的的优势。本次设计我主要负责仿真与调试模块,因为我之前没有接触过Proteus的仿真,因此在协调小组工作之余我开始学习Proteus仿真软件的使用。可以说仿真是软件和硬件的组合体,首先要对硬件有充足的了解,明白其中各个模块的功能,而且对软件也要有透彻的了解。因为当仿真结果与预期的结果不一致时,在确保硬件设计合理的基础上只能是软件的编写有误,因此需要对软件进行修改。在仿真的时候出现的问题让我不知所措,刚

20、开始竟然连液晶都不亮。经检查后发现原来是液晶背光的电源与地接反了。经调整后,液晶亮了,但是什么都不显示。经小组商讨后,我决定用分模块的方式,首先对各个模块分开测试。在修改程序的同时,我学会编程软件KEIL的使用,提高了我的编程能力和软件测试的技巧,第一步:我测试单片机的最小系统,看看单片机是否工作。我写了一个小程序,将4个IO口的电平全部拉低发现单片根本就不工作,IO口的引脚电平还是默认的高电平。我首先判定是单片机的外部晶振出了问题,经检查后发现是晶振的起震电容选取的不合适,经修改后单片机正常工作了。第二步:测试液晶的初始化程序,让其开显示并且光标闪烁,然后测试液晶的写入程序,经测试后发现该模

21、块的程序均正常。第三步:测试DS1302的读写程序,通过单片机读取DS1302时钟芯片的数据,然后将数据处理后送到液晶显示器液晶能够正常显示,但是与预期的显示位置有差异,经修改写入的地址后,能达到预期的目标。第四步:DS18B20温度传感器数据的读写,当单片机对其数据进行读入是发现根本就没反应,经过讨论和测试后发现是它的读写时序不对,于是我们对比DS18B20的数据手册,然后进行单步调试确保时序与之对应,然后再次读取它的数据,这次终于成功了。最后将修改过的主程序载入单片机发现各个部分的功能都能实现了。软件仿真部分圆满成功。4 结果与结论 完成了用LCD1602显示的带温度显示的万年历的预期的全

22、部功能功能。具有年、月、日、星期、时、分、秒、温度等显示功能;具备年、月、日、星期、时、分、秒校准功能。 制作过程中将程序烧到板上时,LCD1602不能显示结果,经过排查,发现是接触不良,重新将其接好后,再次烧录程序。终于显示了结果,可是现实的结果并不是自己设定的日期,后来才发现在设置初值时,将顺序搞乱了,重新整理后,上面显示正确的结果。 该设计的缺点是没能显示农历功能,这也是受到LCD1602显示功能的影响。如果换成LCD12864显示就能充分显示农历日期。5 收获与致谢 为了完成此次课设,我再次翻阅了所学的理论知识,对题目有了一定的理解后,开始相关的设计。整个课设的难处在于程序设计部分。首

23、先,这次课设我们都要用到KEIL编译软件,虽然很早就接触到了这种软件,但只是会一点皮毛。这个课设要用到很多新的功能,运用起来有一定的困难,不过最后通过查询一些资料,能较好地掌握这些知识。主要的困难在后面的芯片程序设计部分。我们首先查阅芯片手册,研究其操作的时序图,然后按照时序图写程序。首先,对于DS1302时钟芯片,其初始化设置以及CPU读取时间数据,均需要熟悉相应的引脚功能和运用相应的函数,学会运用这些函数耗费了我不少时间,为此我专门复习了一下以前学习的C语言知识。掌握了DS1302的使用方法后,我开始学习LCD的使用方法,与前面一样,我复习了以前的知识,熟悉了其引脚功能,为后面的程序编写积

24、累了知识。这也在一定程度上提高了我们对时序图的了解,也提高了我们的编程能力。另外在做拓展部分是,还掌握了DS18B20的使用方法,此次课程设计着实让我学到了很多硬件和软件方面的知识。通过此次课设,我对单片机的C语言编程有了初步的掌握,熟悉了几种芯片的使用方法,同时提高了动手操作的能力,理论和实践都有了提高。课设做完后,也发现了自己的一些不足,平时很少自己动手设计程序,以至于用的时候有很多困难,在以后的时间里,我会多设计一些电路,提高自己的动手实践能力。在此还要感谢设计中帮助过我的老师和同学。 6. 参考文献51单片机原理与应用案例教程(C51编程)p170的9.1.2 LCD1602液晶应用实

25、例 7. 附件7.1 电路原理图图13 整体电路原理图7.2 Proteus仿真图图14 正常工作状态下7.3 实物图 图17 正常工作状态下7.4 元器件清单元器件名称型号规格数量备注单片机STC89C521加DIP40底座晶振132.768M1(DS1302外部晶振)晶振211.0592MHZ1加2脚底座排阻4.7K(9引脚)1P0口的上拉电阻USBUSB电源接口1加USB电源线一根可调电阻10K1LCD1602背光调节电阻10K6电阻390欧2电阻1K或1004电解电容1000uF1电解电容 100uF2电解电容10uF5非极性电容0.1uF4非极性电容33pF2发光二极管红色LED2电

26、源-电池3V电池-电子2(1)都需要底座四角开关微动(脉冲)开关5六角开关按键(自锁式)1三极管PNP(8550)1液晶LCD16021加16脚单排插座时钟芯片DS13021加DIP8底座温度传感器DS18B201加3脚插座整流二极管1N40012桥堆2W101三端稳压器78051蜂鸣器-BELL有源蜂鸣器17.5源程序清单#include #include #include #define uchar unsigned char#define ucint unsigned intsbit dula = P26;sbit wela = P27;sbit RS=P35;sbit RW=P36;s

27、bit E=P34;void yanshi(uchar xms);void writecommand(uchar x);void writedate(uchar x);void xianshi(uchar add,uchar date);void init();uchar miao = 0,fen = 30,shi = 8,t = 0 ,num;uchar code shuzu =2017-12-01 5 ; void delayUs() _nop_();void yanshi (uchar xms) uchar i,j; for(i= xms;i0;i-) for(j= 110;j0;j-)

28、;void writecommand(uchar x)dula = wela = 0; RS = 0; E = 0; P0 = x; yanshi(5); E = 1; yanshi(5); E = 0;void writedate(uchar x) RS = 1; E = 0; P0 = x; yanshi(5); E = 1; yanshi(5); E = 0;void xianshi(uchar add,uchar date) uchar shi,ge; shi=date/10; ge=date%10; writecommand(0x80+0x40+add); writedate(0x3

29、0+shi); writedate(0x30+ge);void init() RW= 0; E = 0; writecommand(0x38); writecommand(0x0c); writecommand(0x06); writecommand(0x01); writecommand(0x80); for(num= 0;num12;num+) writedate(shuzunum); yanshi(5); writecommand(0x80+0x40+6); writedate(;); yanshi(5); writecommand(0x80+0x40+9); writedate(;);

30、 yanshi(5); xianshi(4,shi); xianshi(7,fen); xianshi(10,miao); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;void writeComm(uchar comm) RS = 0; P0 = comm; E=1; delayUs(); E = 0; yanshi(1);/写数据:RS=1, RW=0;void writeData(uchar dat) RS = 1; P0 = dat; E = 1; delayUs(); E = 0

31、; yanshi(1);void writeString(uchar * str, uchar length) uchar i; for(i = 0; i 0) i-; ds = 1; i = 4; while(i0) i-;void dsWait() unsigned int i; while(ds); while(ds); i = 4; while(i 0) i-;bit readBit() unsigned int i; bit b; ds = 0; i+; ds = 1; i+; i+; b = ds; i = 8; while(i0) i-; return b;unsigned ch

32、ar readByte() unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); dat = (j 1); return dat;void writeByte(unsigned char dat) unsigned int i; unsigned char j; bit b; for(j = 0; j = 1; if(b) ds = 0; i+; i+; ds = 1; i = 8; while(i0) i-; else ds = 0; i = 8; while(i0) i-; ds = 1

33、; i+; i+;void sendChangeCmd() dsInit(); dsWait(); yanshi(1); writeByte(0xcc); writeByte(0x44);void sendReadCmd() dsInit(); dsWait(); yanshi(1); writeByte(0xcc); writeByte(0xbe); int getTmpValue() unsigned int tmpvalue; int value; float t; unsigned char low, high; sendReadCmd(); low = readByte(); hig

34、h = readByte(); tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;void display(int v) unsigned char count; unsigned char datas = 0, 0, 0, 0, 0; unsigned int tmp = abs(v); datas0 = tmp / 10000; datas1 = tmp % 10000 / 1000; datas2 = tmp % 1000 / 100; datas3 = tmp % 100 / 10; da

35、tas4 = tmp % 10; writeComm(0xc0+3); if(v 0) writeString(- , 2); else writeString(+ , 2); if(datas0 != 0) writeData(0+datas0); for(count = 1; count != 5; count+) writeData(0+datascount); if(count = 2) writeData(.);/*/*DS18B20*/void main() uchar table = ; sendChangeCmd(); init(); writeComm(0x80); writeString(table, 16); while(1) yanshi(1000); /温度转换时间需要750ms以上 writeComm(0xc0); display(getTmpValue(); sendChangeCmd();指导教师评语:课程设计报告成绩: ,占总成绩比例: 40 课程设计其它环节成绩:环节名称:原理图设计与仿真,成绩: ,占总成绩比例: 20 环节名称: PCB设计 ,成绩: ,占总成绩比例: 20 环节名称:电路安装调试 ,成绩: ,占总成绩比例: 20 总 成 绩: 指导教师签字:年 月 日本次课程设计负责人意见:负责人签字:年 月 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁