《基于单片机的数字万历设计 毕业设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的数字万历设计 毕业设计.doc(38页珍藏版)》请在三一办公上搜索。
1、 成绩毕业论文设计题 目: 基于单片机的数字万年历设计 学生姓名: 学生学号: 0908040147 系 别: 电气信息工程学院 专 业: 通信工程 届 别: 2013届 指导教师: 基于单片机的数字万年历设计 摘 要:本文借助电路仿真软件Protues对基于AT89S51单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89C51单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCM点阵液晶显示屏显示。AT89C51单片机是由Atmel公司推出的,功耗小,电压可选用46V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电
2、功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 论文主要研究了液晶显示器LCM及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了
3、论述。 研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。 关键词:单片机;DS1302;DS18B20;LCM1602 Design of the digital Perpetual Calendar based on Single chip microcomputerStudent:delizhengtutor:yongshizhuInstitute of electrical and information engineering of huainan normal universityABSTRACT:
4、This paper mainly discuss the design and simulation of electronic calender based on AT89S51 with the help of Protues.On the hardware side, the electronic calendar using AT89C51 microcontroller as the main control center, clock provided by the DS1302 clock chip , 1602LED dot matrix LCD display.Atmel
5、Corporation AT89C51 microcontroller is producted by Atmel Corporation, low power consumption, voltage can be selected 4V 6V voltage power supply; DS1302 clock chip, launched in the United States with DALLAS small current charging function real time clock chip, low power consumption, it can be years
6、, month, date, day, hour, minute, seconds time, also has a leap year compensation and other functions, and DS1302 long life, small error; LED digital display is used in LCD displays that can display in , month, day, week, hours, minutes, seconds and other information.In addition, the electronic cale
7、ndar is also a time calibration functions. In terms of software, including calendar program, time to adjust procedures, display procedures. All programming is complete, the Keil software debugging, make sure there is no problem, in the Proteus software embedded within the simulated MCU. This article
8、 focus on liquid crystal screen LCM1602 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutions will also compared with each other.On software side,calender calculation will be discussed as well. The results are as follows:as electroni
9、c calender are widely used in our daily life.It should be chip and convenient so as to win more profit. Keyword: Microcontroller,DS1302;DS18B20;LCD1602目 录前言31 方案设计41.1 概述41.1.1 实时时钟研究的背景及意义41.1.2 系统的总体设计51.2 系统基本方案选择和论证61.2.1 单片机芯片的选择61.2.2 显示模块选择方案和论证61.2.3 时钟芯片的选择方案和论证61.2.4 电路设计最终方案决定72 硬件电路设计72.
10、1 系统硬件概述72.2 单片机最小系统82.3 单片机的复位电路92.4 时钟芯片电路112.4.1 时钟芯片引脚介绍112.4.2 时钟芯片DS1302介绍122.5 1602LCD液晶显示屏132.5.1 1602字符型LCD简介132.5.2 1602引脚功能说明132.6 蜂鸣器闹铃电路142.7 按键调整电路142.8 显示模块153 软件部分设计163.1 程序流程框图163.2 时间设置子程序流程163.3 程序设计问题173.3.1 按键抖动问题173.3.2 蜂鸣器设置183.3.3 液晶显示的设置183.3.4 中断设置183.3.5 时钟芯片设置194 开发工具Prot
11、eus与Keil214.1 Proteus软件214.1.1 Proteus简介214.1.2 4大功能模块224.1.3 ISIS智能原理图输入系统234.1.4 Proteus简单应用234.2 Keil软件244.2.1 Keil软件简介244.2.2 Keil软件调试功能244.3 本章小结255 系统测试265.1 硬件测试265.2 软件测试26结束语26致谢27参考文献28附录29前言 随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子万年历诞生了,它集时间、日期、星
12、期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势。伴随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便,作为一种附加功能,现在越来越广泛的被应用于各种电子产品中,具有广阔的市场前景。 通过以往对工业自动化的相关课程学习和理解独立完成制作电子万年历的设计。电子万年历作为电子类小产品不仅是市场上的宠儿,也是是单片机设计培训中一个很实用的题目。因为这个课题有很好的开放性和可发挥性,对制作者的要求比较高,不仅考察了对单片机的掌握能力
13、更加强调了对单片机扩展的应用。而且要求设计的电子万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历制作无论从实用目的,还是从培养能力的角度来看都是很有价值的毕业设计课题。本电子万年历的设计在硬件方面主要采用AT89S51单片机作为主控核心,由DS1302时钟芯片提供时钟、1602LCM点阵液晶显示屏显示。AT89S51单片机是由Atmel公司推出的,功耗小,电压可选用46V电压供电1;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命
14、长,误差小;数字显示是采用的LED液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。最后在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。1 方案设计1.1 概述1.1.1 实时时钟研究的背景及意义在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地跟换电池,有些时钟需要外接电源
15、,如果一旦电池没电或者外接电源无法供电,时钟就会停止计时了。而美国DALLAS 公司的新型时钟日历芯片DS1302就能解决这一问题。该器件能提供实时时钟(RTC)/日历、定时闹钟。少于31天的月份,月末日期可自动调整,其中包括闰年补偿。该器件还可以工作于24小时货代/PM指示的12小时格式。一个精密的温度补偿电路用来监视Vcc的状态。 本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。该实时时钟不但可以作为家用,而且更可以在公共场合使用,如车站、码头、商场等场所。1.1.2 系统的总体设计采用AT89C52作为主控单片机,时钟模块选用DS1302作为时钟芯片,温度模块选用DS18B
16、20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路。AT89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz33Hz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。DS1302 实时时钟芯片功能丰富,可以用来直接代替IBM PC 上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887 相兼容。由于DS1302 能够自动
17、产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS1302 中自带有锂电池,外部掉电时,其内部时间信息还能够保持10 年之久;对于一天内的时间记录,有12 小时制和24 小时制两种模式。用户还可对DS1302 进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。该系统的系统框图如图1.1示: AT89C52单片机液晶显示DS1302DS18B20串口连接电路按键控制如图1.1系统框图1.2 系统基本方案选择和论证1.2.1 单片机芯片的选择本设计采用AT89S51芯片作为硬件核心,该芯片采用Flash ROM,内部具有
18、4KB ROM存储空间,相对于本设计而言程序空间完全够用。能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,而且运用于电路设计中时具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,避免芯片的多次拔插对芯片造成的损坏。1.2.2 显示模块选择方案和论证方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。 方案二: 采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单
19、片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,所以不采用LED数码管作为显示。 方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于电子万年历而言,一个1602的液晶屏即可,价格也还能接受,需要的接口线较多,但会给调试带来诸多方便,所以此设计中采用LCD1602液晶显示屏作为显示模块。1.2.3 时钟芯片的选择方案和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、 3秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,实现的时
20、间误差较大。所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS130是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充
21、电功能,并且可以关闭充电功能。采用普通32.768kHz晶振4。因此,本设计中采用DS1302提供时钟。1.2.4 电路设计最终方案决定综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89S51作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;LCD1602液晶屏作为显示。2 硬件电路设计2.1 系统硬件概述本电路是由AT89S52单片机作为控制核心,能在3V超低压工作,AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件
22、采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周、时、分、秒
23、,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由LCD1602液晶显示器完成,该显示器为工业字符型液晶,能够同时显示16x02键盘控制模块温度采集模块。AT89S51 主控模块 LCD1602液晶显示模块 DS1302时钟模块。2.2 单片机最小系统AT89C52单片机最小系统电路设计如图2.1所示。图2.1 AT89C52单片机结构图本系统以AT89C52单片机为核心,本系统选用11.0592MHZ的晶振,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。AT89S52单片机为40引脚
24、双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部
25、下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用 6于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
26、P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,如
27、果不对端口置1,端口锁存器原来的状态有可能为0Q端为0Q为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/P3口作为输入时都是准双向口。2.3 单片机的复位电路复位电路的连接图如下:图2.2 复位电路连接图为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电
28、路正常工作需要供电电源为5V5%,即4.755.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。51单片机在系统复位时
29、,将其内部的一些重要寄存器设置为特定的值,(在特殊寄存器介绍时再做详细说明)至于内部RAM内部的数据则不变。系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。单片机的工作完全在其pc指针控制下,即pc指向哪,单片机就执行那里的指令。复位后pc执行0000h地址,即你的程序的第一条指令。2.4 时钟芯片电路2
30、.4.1 时钟芯片引脚介绍时钟芯片DS1302,其引脚分布图如下所示:图2.3 DS1302引脚分布图 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST
31、提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。CLK为时钟输入端。2.4.2 时钟芯片DS1302介绍美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS
32、1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 为了实现系统报警计时等功能,此设计采用了DS302实时时钟芯片。D
33、S1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 2.1 引脚功能及结构 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续
34、运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2
35、.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS130
36、2的数据,读出数据时从低位0位到高位7。2.5 1602LCD液晶显示屏2.5.1 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行的字符型LCD1602带背光的液晶显示屏。2.5.2 1602引脚功能说明各引脚接口说明如表所示:表1编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表1:引脚接口说明:第1脚:VSS为地电
37、源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第1
38、6脚:背光源负极。2.6 蜂鸣器闹铃电路当单片机给蜂鸣器一个低电平时,三极管导通驱动蜂鸣器发出声音作为定时闹铃,其电路图如图2.3所示:2.7 按键调整电路系统四个独立键盘均采用查询方式,S2用于设置年、月、日、时、分、秒、星期的数值加,以及闹钟开,S3用于设置年、月、日、时、分、秒、星期的数值减以及闹钟关,s1用于具体设置时钟位的切换,s4键用于设置闹钟。其电路图如2.4所示:2.8 显示模块如下图所示,采用LCM1602液晶显示器,单片机P1口作为数据输出口,RS,RW,E分别通过10K的上拉电阻连接到单片机的P0.0,P0.1,P0.2。VDD接5V电源,VSS接地。VEE为液晶显示器对
39、比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN)端为使能(enable)端,下降沿使能。DB0-DB7为双向数据总线,同时最高位DB7也是忙信号检测位。BLA、BLK分别为显示器背光灯的正、负极。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵
40、字符,图形寄存器选择控制表如表所示:表2 1602寄存器选择控制表RSR/W操作说明00写入指令寄存器01读busy flag,以及读取位址计数器10写入数据寄存器11从数据寄存器读取数据1602通过D0D7的8位数据端传输数据和指令。显示模式设置(初始化)001110000x38设置162显示,57点阵,8位数据接口;显示开关及光标设置:(初始化) 00001DCBD显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)。000001NS N=1(读或写一个字符后地址指针加1并且光标加1),N=0(读或写一个字符后地址指针减1并且光标减1),S=1且N=1(当写一个字符后,整屏显示左移)
41、,S=0当写一个字符后,整屏显示不移动。数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)。其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。3 软件部分设计3.1 程序流程框图主程序开始初始化,并打开中断,然后执行扫描闹钟、键盘及读取18B20值。当有S1键按下时,执行时钟设置,当有S4键按下时,则进入闹钟设置,无论是时钟还是闹钟,设置完后退出,温度、时钟恢复实时显示。主程序流程图如图3.1所示:读、写日期、时间分离日期、时间显示值上下调整设置时间返回按下调整按键初始化开始图3.1程序流程框图3.2 时间设置子
42、程序流程通过单片机判断S1按下的次数来设置,由s1num标志位来记录次数,用if语句判断执行命令。系统程序不断扫面键盘,当s1键按下后产生一个低电平,即s1num加一。在调节时间之前首先进行各个变量初始化,及设置起始时间,同时为读取数据作准备。当s1=1时进入秒的设置,地址指针指向miao显示位置处,通过两个if语句分别循环控制显示秒数的加和减。当s1=2时,地址指针指向fen显示位置处,变量最大值为59。当s1=3时,地址指针指向shi显示位置处,变量最大值设为23。当s1=4时,地址指针指向week显示位置处,最大值设为7,1至7分别用MON、TUE、WED、THU 、FRI、SAT、SU
43、N字符串显示。随着s2、s3值的的变化显示不同的字符串。当s1=5时,地址指针指向day显示位置,变量最大值为31。当s1=6时,地址指针指向month显示位置,变量最大值为12。当s1=7时,地址指针指向year显示位置,最大值为99。S1=1秒S1=2秒S1=7秒S1=8退出S2调加秒S3调减秒S2调加年S3调减年3.3 程序设计问题3.3.1 按键抖动问题按键在按下时因为机械原因会产生抖动,抖动的后果就是当按下一次按键时因为抖动的原因让系统读取到多次的按键按下的次数,由此导致设置时出现错误。解决的方法如下:当按键按下时读取按键键值,若5ms后键值和按下是相等,则确认为有效按键,以此消除按
44、键抖动带来的问题。3.3.2 蜂鸣器设置蜂鸣器报警时,设置响100毫秒,停100毫秒,循环响应,产生滴滴的声音。3.3.3 液晶显示的设置初始化设置显示模式设置写入指令码write_com(0x38),设置功能16*2显示,5*7点阵,8位数据接口显示/开关及光标设置写入指令码write_com(0x0c),设置开显示,不显示光标,光标不闪烁。写入指令码write_com(0x06),设置当读或写一个字符后地址指针加一,且光标加一。当写一个字符,整屏显示不移动。显示清屏,写入指令码write_com(0x01)。写入指令码函数write_com()写指令过程 :输入:rs=0,D0-D7=指令
45、码,E=高脉冲写入数据函数 write_date() 写指令过程: 输入:rs=1,D0-D7=数据,E=高脉冲写入指令和数据时rw端已经接地。数据指针设置 指令码80H+地址码(0-27H)显示第一行的字符指令码80H+地址码(40H-67H)显示的第二行字符3.3.4 中断设置EA=1;/打开总中断EX1=1;/打开外部中断IT1=1;/设置负跳变沿触发中断当闹钟到点时响应外部中1 时间到时IRQ端从高阻态转为低电平,此时读一次c寄存器清除IRQ端的输出,等待下一次定时。void exter() interrupt 2 /外部中断1服务程序uchar c;/进入中断表示闹钟时间到flag_
46、ri=1; /设置标志位,用以大程序中报警c=read_ds(0x0c);/读取12c887c寄存器表示响应了中端3.3.5 时钟芯片设置首次上电初始化时间函数:void set_time()/首次上电初始化时间函数write_ds(0,0);/初始化秒write_ds(1,0);/初始化秒闹钟write_ds(2,0);/ 初始化分write_ds(3,0);/初始化分闹钟write_ds(4,0);/初始化时write_ds(5,0);/ 初始化时闹钟write_ds(6,0);/初始化星期write_ds(7,0);/ 初始化日write_ds(8,0);/初始化月write_ds(9,0);/ 初始化年写12C887函数:void write_ds(uchar add,uchar date) /写12C887函数dscs=0; 打开片选信号dsas=1;dsds=1;dsrw=1;P0=add;dsas=0; /下降沿锁存地址dsrw=0;P0=date;dsrw=1;/上升沿锁存数据dsas=1;/上升沿清除地址dscs=1;/关掉片选信号