首页 基于单片机的万年历的设计

基于单片机的万年历的设计

举报
开通vip

基于单片机的万年历的设计辽宁工业大学单片机原理及接口技术课程设计(论文)题目:电子万年历(含农历)院(系):电气工程学院专业班级:自动化123学号:120302073学生姓名:郑新欣指导教师:(签字)起止时间:2015.6.22-2015.7.3 课程设计(论文)任务及评语院(系):电气工程学院教研室:自动化学号120302073学生姓名郑新欣专业班级123课程设计(论文)题目电子万年历(含农历)课程设计(论文)任务课题完成的功能、设计任务及要求、技术参数实现功能电子万年历能显示阳历年、月、日、星期、时、分、秒和阴历的月、日,并能显示温度...

基于单片机的万年历的设计
辽宁工业大学单片机原理及接口技术课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 (论文)题目:电子万年历(含农历)院(系):电气工程学院专业班级:自动化123学号:120302073学生姓名:郑新欣指导教师:(签字)起止时间:2015.6.22-2015.7.3 课程设计(论文)任务及评语院(系):电气工程学院教研室:自动化学号120302073学生姓名郑新欣专业班级123课程设计(论文)题目电子万年历(含农历)课程设计(论文)任务课题完成的功能、设计任务及要求、技术参数实现功能电子万年历能显示阳历年、月、日、星期、时、分、秒和阴历的月、日,并能显示温度。硬件设计包括CPU选型、最小系统电路、时钟电路、温度、通信电路、按键及LCD显示电路等。软件采用汇编语言或C语言实现。设计任务及要求1、确定设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,画出方案框图。2、进行硬件电路的设计,包括元器件选择。3、绘制原理图。4、绘出程序流程图,并编写以太网初始化、收发程序、温度检测程序等。5、要求认真独立完成所规定的全部内容;所设计的内容要求正确、合理。6、按学校规定的格式,撰写、打印设计说明书一份;设计说明书应在4000字以上。技术参数1、显示阳历年、月、日、农历;2、温度保留一位小数,精度为1℃。进度 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 1、布置任务,查阅资料,确定系统设计方案(2天)2、系统硬件设计及模块选择(3天)3、系统软件设计及编写功能程序及调试(3天)4、撰写、打印设计说明书(1天)5、验收及答辩。(1天)指导教师评语及成绩平时:论文质量:答辩:总成绩:指导教师签字:年月日注:成绩:平时20%论文质量60%答辩20%以百分制计算 摘要电子万年历是一种应用非常广泛日常计时工具,对现代社会越来越重要,电子钟主要是利用现代电子技术将时钟电子化、数字化。与传统的机械钟相比,具有时钟精确、显示直观、无机械传动装置等优点,因而得到广泛应用,根据人们的不同要求,本设计主要为实现一款可正常显示时钟/日历、测量环境温度的多功能电子时。该系统以AT89C51单片机微处理芯片为核心,使用DS3231时钟芯片及DS18B20温度采集芯片,采用软硬件结合的技术,使硬件部分大为简化,提高了系统的稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行,持外结合供电电路。DS3231它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS3231的使用寿命长,误差小;对于数字电子万年历采用直观的数字显示,数字显示是采用的LCD19264液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能,还可以准确的显示当前的室温的功能,具有体积小,读取方便,显示直观,电路简单明了,成本低廉等诸多优点。关键词:单片机;时钟芯片;温度采集芯片;LED显示 目录第1章绪论 第2章课程设计的方案 2.1概述 22.2系统组成总体结构 2第3章硬件设计 3.1单片机及单片机最小系统设计 33.2DS3231时钟芯片 63.3DS18B20温度传感器 83.4LCD19264显示电路 93.5独立按键 113.6总体电路图 12第4章软件设计 134.1主程序流程图 134.2DS3231时钟芯片的程序设计 144.3DS18B20程序的设计 144.4阳历与阴历的转换 15第5章课程设计 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 16参考文献 17附录 18 第1章绪论从古至今,人们的日常生活和工作都离不开对时间的准确把握。而随着科技的发展,电子万年历成为了日渐流行的日常计时工具。目前市场上的万年历功能强大,简单直观,给人们带来很大的方便。机械式钟表虽然也可以告知人们时间,也可以定时,显示日历。但是由于受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法与电子时钟相比。电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,室外广场,汽车站和火车站等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,更为先进的电子钟的研究有着良好的发展前景和市场潜力由于数字集成电路技术的发展和采用了先进的石英技术,现代电子钟具有走时准确、性能稳定、制作维修简单等优点,弥补了传统钟表的许多不足之处。我们利用单片机技术设计制作的电子万年历,可以很方便的由编程进行功能的调整和改进,使其在能够准确显示公历和农历年、月、日、时间、星期的同时,还能具有很多其他的功能。如设定闹钟、语音报时、二十四节气的显示等,有一定的新颖性和实用性,同时体积小、携带方便,使用也更为方便,具有技术更新周期短、成本低、开放灵活等优点,具备一定的市场前景。这里要介绍的就是一款可满足使用者特殊要求,输出方式灵活、计时准确、性能稳定、维护方便的实用电子万年历。电子万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便。针对以往的电子万年历断电后需要重新调整时间与日期,且计时误差大的现象。本设计采用AT89C51作为主控制器,为了提高电路的实用性加入温度测量电路。本系统程序有主程序、中断服务函数和多个子函数构成。主函数只要完成各子函数和中断函数的初始化。定时中断函数主要完成时钟芯片的定式扫描及键盘扫描。时钟芯片的读写函数只要是将时间、日历信息读出来,并把要修改具体值写入时钟芯片内部。第2章课程设计的方案2.1概述本系统以AT89C51单片机为核心,结合DS3231时钟芯片及DS18B20温度采集芯片等外围器件,实现了万年历的显示公历和农历年、月、日、时、分、秒和星期,还可以准确的显示当前的室温的功能,并通过液晶屏和按键控制完成人机交互功能。本系统具有体积小,读取方便,显示只直观,电路简单明了,成本低廉等诸多优点。2.2系统组成总体结构万年历系统由AT89C51作为控制中心,用LCD19264作为显示模块,用DS3231作为时钟模块,用DS18B20作为温度模块,系统组成结构图如图。图1.2系统组成结构图第3章硬件设计3.1单片机及单片机最小系统设计单片机是一种集成芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的小而完善的微型计算机系统,在工业控制领域广泛应用。本文应用的是89C51单片机,89C51单片机具有如下等特性,面向控制的8位CPU,一个片内振荡器和时钟产生电路,震荡频率为0~24MHz,片内4KB的片内数据存储器,128B的片内数据存储器,可寻址64KB的片外程序存储器和片外数据存储器控制电路,2个16位I/O口,共32条可单独编程的I/O口现,5个中断源,2个中断优先级,1个全双工的异步串行口,21个特殊功能寄存器,具有节电工作方式,即休闲方式和掉电保护方式。89C51单片机有40个引脚。其中2条主电源引脚,2条外接晶体引脚,4条控制或与其他电源复用的引脚,32条I/O口引脚。VSS(20脚):接地端。VCC(40脚):电源端。正常操作及对FlashROM的编程和验证时接+5V电源。XTAL1(19):J接外部晶体和微调电容的一端。在89C51片内,它是震荡电路反向放大器的输入端及内部时钟发生器的输入端,振荡电路的频率就是晶体的固有频率。当采用外部震荡器时,此引脚输入外部时钟脉冲。XTAL2(18脚):接外部晶体和微调电容的另一端。在89C51片内,它是震荡电路反向放大器的输出端。采用外部震荡器时,此引脚应悬浮。RST(9脚):复位信号输入端,高电平有效。当振荡器工作时,在此引脚上出现两个周期以上的高电平,就可以使单片机复位。ALE(30脚):地址锁存允许信号。当89C51上电正常工作后,ALE端不断向外输出正脉冲信号,此信号频率为振荡器的1/6.通过用示波器查看ALE端是否有脉冲信号输出,可以确认89C51芯片的好坏。89C51在并行扩展外部存储器时,P0口用于分时传送低8位地址和数据信号,当ALE信号有效时,P0口传送低8位地址信号;ALE信号无效时,P0口传送的是8位数据信号。在ALE信号的下降沿,锁定P0口传送的低8位地址信号,可以实现低8位地址与数据的分离。晶振并不能独立的使用,必须配合合适的负载电容,否则会产生频率偏差,或者是使晶振不能工作。负载电容的选择可以根据单片机的技术文档上的说明来选择。对于51单片机一般选择不大于40pf的瓷片电容。复位电路,就是利用它把电路恢复到起始状态。就像计算器的清零按钮的作用一样,以便回到原始状态,重新进行计算。和计算器清零按钮有所不同的是,复位电路启动的手段有所不同。一是在给电路通电时马上进行复位操作;二是在必要时可以由手动操作;三是根据程序或者电路运行的需要自动地进行。复位电路都是比较简单的大都是只有电阻和电容组合就可以办到了。再复杂点就有三极管等等配合程序来进行了。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才会撤除,微机电路开始正常工作。复位引脚当有连续两个以上机器周期(2us以上)的高电平,这个单片机就会复位。而我们的电路设计是,电容充电瞬间,电流通过电容器,然后向电阻方向放电,此时,电容的“-”端就能有一个很高的电势,在高于3V的情况下,均可以认为是高电平。单片机里虽然集成了很多电路,但仍然不能独立运行,必须要外连一些电路,才能使单片机运行起来。这种能使单片机工作的最简电路,我们叫做单片机最小系统。本设计最小系统由复位电路,晶振电路和单片机组成。在提及单片机的最小系统后,现对单片机的另一重要应用系统即中断系统做一个比较详细的介绍。在CPU与外设交换信息时,存在着一个快速CPU与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。所谓的中断就是,当CPU正在处理某项事务的时候,如果外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。MCS-51单片机的中断源共有两类,它们分别是:外部中断和内部中断。外部中断0(INT0)来自P3.2引脚,通过外部中断0触发方式控制位IT0(TCON.0),来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向CPU申请中断;外部中断1(INT1)来自P3.3引脚,通过外部中断1触发方式控制位IT1(TCON.2),来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向CPU申请中断。内部中断有三个:TF0,TF1,RI或TI。TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断;TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断;RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。MCS-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。定时器控制寄存器(TCON),该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H~8FH,当CPU采样到INT0(或INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“1”。当中断响应完成转向中断服务程序时,由硬件把IE0(或IE1)清零,当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。当转向中断服务时,再由硬件自动清“0”。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用;串行口控制寄存器(SCON),进行字节操作时,寄存器地址为98H。按位操作时,各位的地址为98H~9FH,当发送完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”,当接收完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。串行中断请求由TI和RI的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求;中断允许控制寄存器(IE),进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地址为0A8H~0AFH,可见,MCS-51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制。即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位为禁止时,关闭整个中断系统,不管分控制为状态如何,整个中断系统为禁止状态;当总控制位为允许时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。MCS-51单片机复位后(IE)=00H,因此中断系统处于禁止状态。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应根据需要使用有关指令禁止中断,即以软件方式关闭中断。中断优先级控制寄存器(IP)MCS-51单片机的中断优先级控制比较简单,因为系统只定义了高、低2个优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器(IP)进行设定。IP寄存器地址0B8H,位地址为0BFH~0B8H。当我们通过PC端给AT89C51下载程序时,采用的是计算机串口(RS-232电平:高-12V低+12V)通信,所以计算机与单片机之间进行通信时需要电平转换芯片MAX232。MAX232含有两个RS-232发送驱动器和接收驱动器,其中发送器的输入为TTL/CMOS电平,输出为RS-232电平。MAX232接收器的输入为RS-232电平,输出为TTL/CMOS电平。不使用的输入输出端可以悬空。MAX232的工作温度范围为0℃至70℃。MAX232的Pin14(T1OUT)引脚与串行口的2引脚连接,Pin13(R1IN)引脚与串行口的3引脚连接。Pin12(R1OUT)引脚和Pin11(T1IN)引脚分别与单片机的P3.0/RXD(串行输入口)、P3.1/TXD(串行输出口)连接。这样单片机所需要的程序就可以从计算机下载了。图3.1单片机最小系统结构图3.2DS3231时钟芯片MaximIntegrated新型实时时钟(RTC)DS3231,内部集成了TCXO、RTC和32.768kHz晶体,并采用低成本、标准型、16引脚SOIC封装。在-40℃至+85℃温度范围内,计时精度为±2分钟/年。这一出色性能使DS3231成为当前要求高计时精度应用的最佳解决方案。而RTC的其它集成功能也扩展了系统应用领域,适合那些对计时精度要求极高的应用。应用包括:服务器、电表、安防及门禁控制系统、车队管理、远程信息处理系统、GPS导航装置、POS终端以及ATM。DS3231是低成本、高精度I2C实时时钟(RTC),具有集成的温补晶振(TCXO)和晶体。该器件包含电池输入端,断开主电源时仍可保持精确的计时。集成晶振提高了器件的长期精确度,并减少了生产线的元件数量。DS3231提供商用级和工业级温度范围,采用16引脚300mil的SO封装。DS3231的引脚功能说明如下:32kHz是32kHz频率输出;VCC用于主电源的DC引脚;INT/SQW为低电平有效中断或方波输出;RST是低电平有效复位引脚;N.C.表示无连接,外部必须接地;GND为地;VBAT为备用电源输入;SDA为串行数据输入、输出;SCL为串行时钟输入。RTC保存秒、分、时、星期、日期、月和年信息。少于31天的月份,将自动调整月末的日期,包括闰年的修正。时钟的工作格式可以是24小时或带/AM/PM指示的12小时格式。提供两个可设置的日历闹钟和一个可设置的方波输出。DS3231采用I2C总线与系统微控制器进行通信,I2C总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,由于接口直接在组件之上,因此I2C总线占用空间少,减少了电路板的空间和芯片管脚的数量,降低了互联成本。它支持多主控,任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。I2C总线通过两根连线(串行时钟线SCL和双向传送SDA)实现半双工同步数据传输,确保两器件之间地址和数据信息的双向传输。它采用器件地址的硬件设置方法(即每个器件具有一个确定的ID),通过软件寻址,从而避免器件的片选信号线寻址,使硬件系统扩展灵活简便。为保证通信正常,必须保证I2C总线上的数据能够顺利传送。在数据开始传送前,首先让I2C接口进行初始化。DS3231的I2C接口的初始化操作可通过微控制器在总线上发送一个有效START条件来实现,因为微控制器产生的START信号能够终止DS3231的I2C接口当前的数据收、发过程,并将该接口置于START条件后的待命状态。但要发送一个有效的START条件,必须在DS3231释放SDA数据线时才能实现。如果SDA数据线处于低电平状态,这时,可以让系统微控制器产生一个附加的SCL脉冲来迫使DS3231接口送出下一位数据。假设下一位数据仍然为逻辑“0”,就继续产生附加的SCL脉冲,经过多个SCL脉冲后,DS3231就会释放SDA数据总线。完成I2C总线的初始化后,接着进行控制和状态寄存器的初始化设置,确定正确的数据范围,就可以运行相应的测控程序。精密的、经过温度补偿的电压基准和比较器电路用来监视VCC状态,检测电源故障,提供复位输出,并在必要时自动切换到备份电源。另外,/RST监视引脚可以作为产生μP复位的手动输入。除计时精度高之外,DS3231还具有一些其它功能,这些功能扩展了系统主机的附加功能和选择范围。该器件内部集成了一个非常精确的数字温度传感器,可通过I2C*接口对其进行访问(如同时间一样)。这个温度传感器的精度为±3°C。片上控制电路可实现自动电源检测,并管理主电源和备用电源(即低压电池)之间的电源切换。如果主电源掉电,该器件仍可继续提供精确的计时和温度,性能不受影响。当主电源重新加电或电压值返回到容许范围内时,片上复位功能可用来重新启动系统微处理器。DS3231电路图如图所示。图3.2DS3231电路图3.3DS18B20温度传感器本设计需要显示温度,而采集温度需要通过传感器来实现。本设计使用的为DS18B20温度传感器。DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。DS18B20的主要特性(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;(2)测温范围-55℃~+125℃,固有测温误差1℃;(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定;(4)工作电源:3.0~5.5V/DC(可以数据线寄生电源);(5)在使用中不需要任何外围元件;(6)测量结果以9~12位数字量方式串行传送;(7)不锈钢保护管直径Φ6;(8)适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温;(9)标准安装螺纹M10X1,M12X1.5,G1/2”任选;(10)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此,单一温度传感器测温情况下,适宜采用电池供电系统中。多组工作是不适合采用电池供电,并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。电路图如图所示。图3.3DS18B20电路图3.4LCD19264显示电路本次设计显示电路需要显示时间,农历日期,公历日期星期,温度等数据,所以采用LCD19264显示电路,19264A-06是一种图形点阵液晶显示器。它主要采用动态驱动原理由行驱动—控制器和列驱动器两部分组成了192(列)×64(行)的全点阵液晶显示。此显示器采用了COB的软封装方式,通过导电橡胶和压框连接LCD,使其寿命长,连接可靠。其工作特性为:(1)工作电压为+3V到+5V±10%,自带驱动LCD所需的负电压。(2)全屏幕点阵,点阵数为192(列)×64(行),可显示12(/列)×4(行)个(16×16点阵)汉字,也可完成图形,字符的显示。(3)与CPU接口采用7条位控制总线和8位并行数据总线输入输出。(4)内部有显示数据锁存器(5)简单的操作指令   显示开关设置,显示起始行设置,地址指针设置和数据读/写等指令。表3.1接口顺序图序号符号功能说明1VSS电源地2VDD电源输入(+5V)3V0LCD驱动电压输入端4RS寄存器选择端5R/W读/写信号6E使能信号7-14DB0-DB7数据总线15/CS1片选信号1,低有效,选择左屏16/RST复位信号,低有效17/CS2片选信号2,低有效,选择中屏18/CS3片选信号3,低有效,选择右屏19VOUT负压输入输出端20LEDA背光正极模块主要硬件构成说明:1.显示数据RAM(DDRAM)DDRAM(64×8×8bits)是存储图形显示数据的。此RAM的每一位数据对应显示面板上一个点的显示(数据为H)与不显示(数据为L)。DDRAM的地址与显示位置关系对照图2.X地址寄存器X地址寄存器是一个三位页地址寄存器,其输出控制着DDRAM中8个页面的选择,也是控制着数据传输通道的八选一选择器。X地址寄存器可以由MPU以指令形式设置。X地址寄存器没有自动修改功能,所以要想转换页面需要重新设置X地址寄存器的内容。3.Y地址计数器Y地址计数器是一个6位循环加一计数器。它管理某一页面上的64个单元。Y地址计数器可以由MPU以指令形式设置,它和页地址指针结合唯一选通显示存储器的一个单元,Y地址计数器具有自动加一功能。在显示存储器读/写操作后Y地址计数将自动加一。当计数器加至3FH后循环归零再继续加一。4.Z地址计数器Z地址计数器是一个6位地址计数器,用于确定当前显示行的扫描地址。Z地址计数器具有自动加一功能。它与行驱动器的行扫描输出同步,选择相应的列驱动的数据输出。19264引脚接线图如图。图3.4LCD19264显示电路3.5独立按键本设计需要具有调节时间日期的功能,所以必须具有独立按键来进行人机交互,所以本设计采用的4个独立按键,分别是:“设置”、“确认”、“加”、“减”。判断“设置”键是否按下及第几次按下可以分别对日期、时间、星期选定,然后按“加”、“减”即可进行设置,“确认”键按下后,新数据即写入时钟芯片。例如,“设置”键按1下,即可以对年份进行设置,按4下,即是可以对小时进行设置。其电路设计如图:图3.5独立按键图3.6总体电路图图3.6总体电路图第4章软件设计4.1主程序流程图本设计利用Keil(C51)软件进行程序的编写。C语言是一种编译型程序设计语言,它兼顾了许多种高级语言的特点,并且具备汇编语言的功能,C语言可以像汇编语言一样对位、字节和地址进行操作。目前,使用C语言进行程序设计已经成为软件开发的一个主流。C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。虽然汇编语言效率高,对硬件的可操控性更强,体积小,但是不易维护,可移植性差。本设计程序实现了阳历日期、阴历日期、时间、星期、温度、节日提醒等功能。主程序流程图如图:图4.1主程序流程图4.2DS3231时钟芯片的程序设计在本设计中,要实现万年历的功能,DS3231时钟芯片是少不得的,虽然只用单片机也可以实现,但是将会造成时间误差较大,不好调节。用DS3231时钟芯片不仅可以大大的避免那样的问题,还可以减小程序的编写量。这个模块是本设计中是很重要的模块。DS3231时钟芯片工作的流程图如图所示:图4.2DS3231时钟芯片流程图4.3DS18B20程序的设计DS18B20温度传感器在本设计中负责实时传输当前温度,在液晶上显示出来。DS18B20温度传感器操作简单,一个引脚就可以进行双向传输。DS18B20工作流程图如图:图4.3DS18B20流程图4.4阳历与阴历的转换阳历与阴历的转换程序中总共有199(1901-2099)年的阳历对应阴历数据。阳历对应的阴历数据(每年占用单片机三字节)格式:第一字节BIT7-4位表示闰月月份,为0,则无闰月;BIT3-0位对应阴历第1-4月的大小。第二字节BIT7-0位对应阴历第5-12月大小。第三字节BIT7位表示阴历第13月大小(月分对应的位为1,表示农历月大(30天)为0表示小(29天));第三字节BIT6-5位表示春节的阳历月份,BIT4-0位表示春节公历日期。例:阳历2011年对应阴历2011年数据为:0X0B,0X4A,0X43。0X0B和0X4A的二进制数表示为:00001011,01001010,这两个字节表示阴历2011年没有闰月,也就是没有第十三个月。一,三,四,六,九,十一月都是月大(30天),其它都是月小(29天)。0X43的二进制数表示为:01000011,这里的BIT6-5位为10(2位可表示4个月),表示阴历2011年的春节在阳历2011年的2月份。BIT4-0位为00011(00000-11111,5位最大数为31),表示3日。整个字节就表示阴历2011年的春节在阳历2011年的2月3日。第5章课程设计总结数字万年历是一种在日常生活中随处可见的电子产品,随着电子技术的不断更新,数字万年历已经进入了大家小户。本次电子万年历的设计,经过多次的修改与分析,对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。经过此设计,基本完成了设计任务的要求。硬件层面而言操作相对简单,界面比较友好。它集日历、时钟、温度计于一体,成为家庭里非常实用方便的小家电。这次专业课程设计很高兴能够分到数字万年历设计这个课题,经过查阅资料,了解了数字万年历的基本功能与原理后,便开始着手根据不同模块查找适合的芯片,基于AT89C51单片机,利用DS3231时钟芯片来运行系统,再加上一个DS18B20温度传感器芯片,便能实现万年历的基本功能了,结果用LCD显示。原理并不难,但是要实现万年历的基本功能就必须得弄懂这几个模块的基本原理,还要配套上严谨的程序,这样才能真正地实现出来。在经过一个多星期的学习,慢慢地了解了了各个模块的基本联系。在做课程设计的过程中,有很多的知识还是通过查阅文档或请教同学来获得的,让我了解到自己的很多不足,很多知识还是有待进一步增强。如果要学习某些知识,就必须通过实践来学习,这样才能把知识融会贯通,真正地掌握。参考文献[1]郑郁正.单片机原理及应用[M].四川大学出版社,2009[2]王怀平,王仁波,胡开明.Proteus仿真设计基于单片机AT89C51的电子万年历[J].科技广场,2008:197-198[3]武红玉.基于AT89S51单片机的电子万年历的设计[J].科技传播,2012.05[4]苏畅.基于单片机控制的LCD显示万年历制作[J].长江大学学报,2013.08[5]王怀平,王仁波,胡开明.Proteus仿真设计基于单片机AT89C51的电子万年历.科技广场[J],2008.10[6]淡海英.基于AT89C51控制的电子万年历系统设计[J].陕西国防工业职业技术学院学报,2014.03[7]雷伏容,张小林,崔浩.51单片机常用模块设计查询手册[M].清华大学出版社,2010.01[8]肖炎根,舒望.基于实时时钟芯片的电子万年历的设计[J].电子技术,2007,Z3:91-94[9]张政,路阳.基于AT89C51单片机控制的万年历探究[J].电子技术与软件工程,2014.02[10]李宏,张家田.液晶显示器件应用技术[M].机械工业出版社,2004.2[11]刘德全.可调家用万年历的单片机原理[J].宁夏师范学院报,2008.03:95-98[12]姜志海,刘连鑫.单片微型计算机原理及应用[M].机械工业出版社,2007.1.[13]冯育才,雷思孝.单片机系统设计及工程应用[M].西安电子科技大学出版社,2005.5[14]李珍,付植桐.单片机原理与应用技术[M].清华大学大学出版社,2011.2[15]何乃味.基于LED点阵显示的电子万年历的设计与实现[J].安徽电子信息职业技术学院学报,2014.2附录#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharSec,Min,Hour,Day,Month,Year,Cen,Week;//秒,分,小时,公历日期,月份,年份,世纪,星期unsignedcharLunarMonth,LunarDay,LunarYear;//阴历日期,月份,年份bitc_moon;//大小月标志位bitcenbit=0;//世纪标志,为1,则表示20世纪,为0,则表示21世纪bitw=0;//调时状态标志位charnext_1=0,next_2=0;ucharh,m; //比较变量/**********************LCD19264指令*********************/#defineLCD_DataP0#defineBusy0x80//用于检测LCD状态字中的Busy标识sbitLCD_RS=P2^4;sbitLCD_RW=P2^5;sbitLCD_E=P2^6;sbitPSB=P2^1;sbitREST=P2^3;/**********************DS18B20指令*********************/#defineds18B20_READ_ROM0x33//读ROM指令#defineds18B20_MATCH_ROM0x55//匹配ROM指令#defineds18B20_SKIP_ROM0xCC//跳过ROM指令#defineds18B20_SEARCH_ROM0xF0//搜索ROM指令#defineds18B20_ALARM_SEARCH0xEC//报警搜索指令#defineds18B20_WRITE_SCRATCHPAD0x4E//写暂存寄存器指令#defineds18B20_READ_SCRATCHPAD0xBE//读暂存寄存器指令#defineds18B20_COPY_SCRATCHPAD0x48//复制暂存寄存器指令#defineds18B20_CONVERT_T0x44//启动温度转换指令#defineds18B20_RECALL_E20xB8//重新调出E2PROM的数据#defineds18B20_READ_POWER_SUPPLY0xB4//读电源sbitds18B20_data=P2^0;//温度探头(DQ)数据端口对应的单片机引脚bitMinus_Flag;/**********************DS3231指令*********************///寄存器宏定义#defineWRITE_SECOND0x80#defineWRITE_MINUTE0x82#defineWRITE_HOUR0x84#defineWRITE_DAY0x86#defineWRITE_MONTH0x88#defineWRITE_WEEK0x8A#defineWRITE_YEAR0x8C#defineREAD_SECOND0x81#defineREAD_MINUTE0x83#defineREAD_HOUR0x85#defineREAD_DAY0x87#defineREAD_MONTH0x89#defineREAD_WEEK0x8B#defineREAD_YEAR0x8D#defineWRITE_PROTECT0x8EsbitDS3231_CLK=P1^0;//DS3231的时钟信号线sbitDS3231_IO=P1^1;//DS3231的数据端口线sbitDS3231_RST=P1^2;//DS3231的片选信号线sbitACC0=ACC^0;//累加器位定义sbitACC7=ACC^7;/**********************定义开关按键***********************/sbitSetKey=P3^1;//按键功能:设置sbitSureKey=P3^0;//按键功能:确认sbitLeft=P3^5; //按键功能:左移sbitRight=P3^4; //按键功能:确右移认sbitPlusKey=P3^7;//按键功能:加sbitReduceKey=P3^6;//按键功能:减/*************************函数声明****************************//*基本函数*/voidWriteDataLCD(unsignedcharWDLCD); //写数据voidWriteCommandLCD(unsignedcharWCLCD,BuysC); //写指令//unsignedcharReadDataLCD(void); //读数据unsignedcharReadStatusLCD(void); //检测忙voidLCDInit(void); //初始化voidLCDClear(void); //清屏voidLCDFlash(void); //屏幕闪动//voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData); //显示一个字符voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedchar*DData);//显示一串字符voidDisplayImage(unsignedchar*DData); //显示图形voidDelay5Ms(void); //延时5msvoidDelay400Ms(void); //延时400msbitRstds18B20(void);//DS18B20复位程序,返回0-有设备连接,1-无设voidWriteds18B20(uchar);//写一个字节ds18B20数据、命令子程序ucharReadds18B20(void);//读一个字节ds18B20数据子程序uintGetTempValue(void);//启动ds18B20温度转换程序voidDelay_10us(void); //延时10usvoiddelay_15us(uinttime); //time*15usvoidWrite1302(ucharucAddr,ucharucDa);//地址、数据发送子程序ucharRead1302(ucharucAddr); //数据读取子程序voidDS1302_init();//DS1302初始化voidDisplayAllData(); //显示全部显示函数voidDisplayTime(); //显示时间voidDisplay_Temperature(); //温度显示voidDisplayShengXiao(void); //显示生肖voidDisplayLunar(void); //显示农历voidConversion(bitcenbit,ucharyear,ucharmonth,ucharday);//将公历日期转换成农历bitGetMoonDay(unsignedcharLunarMonth,unsignedintTableAddr); //检查该农历月为大小还是小月,大月返回1,小月返回0voidHolidays(void); //节假日提示voidSetTime(charcount); //设置时间函数voidKey(); //按键函数voidCompareTime(); //时间比较函数//************************************************************//************************************************************//************************************************************//************************************************************ucharidatastring_1[]={"//"};ucharidatastring_2[]={"::℃"};ucharidatastring_3[]={"1)00时00分"};ucharidatastring_4[]={"2)00时00分"};ucharcodetmp[]={};/*阳历对应的阴历数据,每年三字节,格式第一字节BIT7-4位表示闰月月份,为0,则无闰月,BIT3-0对应阴历第1-4月的大小,第二字节BIT7-0对应阴历第5-12月大小,第三字节BIT7表示阴历第13月大小月分对应的位为1,表示农历月大(30天)为0表示小(29天)第三字节BIT6-5表示春节的公历月份,BIT4-0表示春节公历日期*///计算公历日离当年元旦的天数,为了减少运算,用了两个表DayCode1[9],DayCode2[3]//如果公历月在九月或前,天数会少于0xff,用表DayCode1[9],在九月后,天数大于0xff,用表DayCode2[3]//如输入公历日为8月10日,则公历日离元旦天数为DayCode1[8-1]+10-1,如输入公历日为11月10日,则公历日离元旦天数为DayCode2[11-10]+10-1/*读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/ucharcodeDayCode1[9]={0x00,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};uintcodeDayCode2[3]={0x111,0x130,0x14e};
本文档为【基于单片机的万年历的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
拍拍£宝贝
有多年的行政人事工作经验,现负责公司员工招聘,筛选,面试,培训等管理
格式:doc
大小:1MB
软件:Word
页数:26
分类:企业经营
上传时间:2018-05-30
浏览量:11