武汉大学多功能电子时钟毕业论文_第1页
武汉大学多功能电子时钟毕业论文_第2页
武汉大学多功能电子时钟毕业论文_第3页
武汉大学多功能电子时钟毕业论文_第4页
武汉大学多功能电子时钟毕业论文_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多功能电子时钟设计武汉大学摘要本设计是基于51系列单片机进行的实时日期和时钟显示设计,可以显示年、月、日、时、分、秒及星期信息,具有可调日期和时间功能。设计对单片机的理论基础和外围扩展进行了比较全面的讨论。实时日历和时钟显示的硬件与软件方面进行同步设计。硬件部分主要由AT89C51单片机,LCD显示电路,以及调时按键电路等组成,系统通过LCD显示数据,具有人性化的操作和直观的显示效果。软件方面主要包括时钟程序、键盘程序,显示程序等。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。软件使用用ISIS Professional

2、和Keil uVision2软件来完成模拟仿真和编程。实现了课题设计要求的功能,并且可以实现现场模拟演示。从而达到对大学所学专业知识的应用和深化理解。关键词:多功能 电子时钟 单片机 1602液晶 DS1302 Proteus Keil目录第一章绪论1.1 课题研究背景11.2 国内外研究现状11.3 本课题研究内容和方法1第二章方案论证2.1 时钟电路论证22.2 显示部分论证2第三章硬件设计3.1 总体设计43.2 各部分功能电路43.2.1 AT89C51电路设计43.2.2 复位电路设计53.2.3 晶振电路设计63.2.4 按键控制电路设计63.2.5 DS1302电路设计73.2.

3、6 LCD1602电路设计103.2.7 蜂鸣器电路设计13第四章软件设计4.1 总体流程图144.2 软件模块化设计144.2.1 软件准备144.2.2 时间调整部分设计154.2.3 闹钟部分设计15第五章仿真结果分析5.1 仿真效果175.2 效果分析19参考文献21附录22后记40第一章 绪论1.1 课题研究背景早在公元1100年我们古代的祖先就已经发明了沙漏计时的工具,应用颗粒均匀的砂粒从容器中漏出的量来计量时刻。那可以称之为时钟的雏形,由此可见时钟跟人们的密切关系。如今随着科学技术的不断进步,人们生活节奏越来越快,人们的时间观念更加强烈,人们对时钟的要求也越来越高了。 现在市场上

4、的时钟种类繁多,而电子时钟因为其精准的走时,低廉的价格,人性化的设计,得到越来越多的时尚人士的喜爱。我们知道电子时钟走时精确,显示直观,不需要机械传动装置,并且可以自动报时,定时自动报警,时间程序控制。正是因为它拥有如此多的优点,现在电子时钟可谓随处可见,火车站,公交车上,家用小轿车上都有电子时钟的身影。1.2 国内外研究现状 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间1。它通常

5、有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求2。 1.3 本课题研究内容和方法本设计应完成的主要内容是设计一个多功能电子时钟能实现要求的功能。比较和选择实现“多功能电子时钟”的方案,根据该方案进行“多功能电子时钟”的总体设计。根据总体设计进行主要部分的软件和硬件设计,并对主要部分的设计进行仿真和调试。本文主要介绍用一个单片机AT89C51和一个电子时钟芯片DS130

6、2和lcd1602液晶辅以必要的按键和其他外围设备来制作一个可以实现时间实时显示,可以自动报警,手动调整时间和闹钟的装置。第二章 方案论证2.1 时钟电路论证数字时钟是本设计的最主要的部分。根据需要,该方案可利用三种方案实现。 方案一:采用Dallas公司的专用时钟芯片DS1302。该芯片 是由美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性

7、存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间3。 方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储

8、器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作4。方案三:采用纯数字电路来做,优点是各个模块功能清晰,电路易于理解。缺点是各个模块已定的功能不能进行智能化调整且整体电路过于庞大5。2.2 显示部分论证根据课题要求多功能电子时钟要求显示时

9、间有时分秒选项,有两种方案可选方案一:数码管LED动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。 方案二:液晶LCD显示。所谓液晶LCD的显示,就是以电流刺激液晶分子产生点,显示字符的行数和液晶的点阵行。液晶体积小、功耗低、显示简单。 从功耗,体积,I/O口的节省考虑,本设计采用方案二。使用LCD1602液晶显示,显示字母数字较方便、容易控制、成本低廉。综合几种方案的优

10、缺点,选择方案一单片机最小系统加上DS1302和液晶lcd1602组合来制作电子时钟。第三章硬件设计3.1 总体设计电子时钟由AT89C51为核心,辅以时钟芯片DS1302,外加lcd1602液晶显示屏,再加上必要的按键和电子线路,总体设计框图如下AT89C51晶振电路复位电路DS13021602显示按键电路图3.1 整体设计框图3.2 各部分功能电路3.2.1 AT89C51电路设计单片机是将中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、I/O接口、定时器/计数器以及串行通信接口等集成在一块芯片上。单片机由于其特殊的结构形式,在某些应用领域承担了大中型计算机无法完成的

11、一些工作,所以单片机发展迅猛。国际上有名的公司及其产品如下:Intel公司的MCS-48、MCS-51、MOS-96系列产品,Motorola公司的6801、6802、6803、6805、68HCII系列产品,NEC公司的UCOM-87系列产品,Zilog公司的Z8、Super8系列产品;Rockwell(美国洛克威尔)公司的6500、6501系列产品;Fairchild(仙童)公司和Mostek的F8、3870产品。其中由于MCS-51系列基本能满足一般应用需求因此占据很大市场。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Eras

12、able Read Only Memory)的低电压、高性能CMOS 8位微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示图3.2 AT89C51外形及引脚图它包含如下部件:(1)一个8位的CPU;(2)一个片内振荡器及时钟电路;(3)4K字节ROM程序存储器;(4)128字节RAM数据存储器;(

13、5)两个16位定时器/计数器;(6)可寻址64K外部数据存储器空间的控制电路;(7)32条可编程的I/O线(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。 复位电路设计图复位电路复位电路中C3为10uf电容,R1为10K欧电阻,RST为复位端。按下复位键单片机复位。 晶振电路设计图仿真电路晶振部分其中X1为12M赫兹晶振,C1、C2为22pF电容,并联接地。 按键控制电路设计图3.5仿真电路按键部分设置4个独立按键,命名为set,up,down,alarm。分别是设置键,加键,减键,和闹钟设置键。当按下set键后进入时间调整模式可以调整秒,按两下可以调整分,按三下可

14、以调整时,按四下调整星期,以此类推可以调整年月日。在调时模式按up键可以加一,按down键可以减一,按8下set键退出时间调整模式,按下alarm进入闹钟调整模式,按一下alarm键进入闹钟启停模式,按下up和down键对应可以开启关闭闹钟,按二三四下alarm键对应的可以设定闹钟的秒、时、分。按5下alarm键退出闹钟设置界面进入时钟显示界面。 DS1302电路设计DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据6。实时时钟可提供秒、分、时、日、星期

15、、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图DS1302外部引脚图各引脚的功能为:Vcc1:主电源;Vcc2:备份电源。当时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入,控制数据的输入与输出;I/O:三

16、线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。DS1302有下列几组寄存器:表3.1 DS1302寄存器读寄存器写寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0范围81h80hCH10秒秒00-5983h82h10分分00-5985h84h12/24010时时1-12/0-23AM/PM日87h86h0010日月1-3189h88h00010月月1-128Bh8Ah0000周日1-78Dh8Ch10年年00-998Fh8EhWP000000

17、0-小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行7表3.2 静态RAM地址表读地址写地址数据范围C1hC0h00h-FFhC3hC2h00h-FFhC5hC4h00h-FFhFDhFCh00h-FFhDS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据

18、。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如表表3.3 DS1302控制字7 6 5 4 3 2 1 01RAM/A4A3A2A1A0RD/控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后

19、的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。如图所示图数据读写时序DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。图3.8 仿真图 DS1302电路连接部分 LCD1602电路设计1. LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面8。LCD可以分为为两种类型

20、,一种是文字模式LCD,一种是绘图模式LCD。 LCD1602属于字符型液晶,能够同时显示16x2即32个字符。可以与位CPU相联,指令功能强可以组合成各种输入、显示、移位方式以满足不同要求9。显示黄绿带背光,显示对比度可以调节,正常工作电压(VDD)为+V,工作电流约为mA(不计背光功耗),同时可靠性高寿命达小时()。LCD1602具有如下特性: ·+5V供电,亮度可以调整。 ·内藏振荡电路,系统内含重置·提供各种控制命令,如清除显示器、 字符闪烁、光标闪烁、显示移位等多种功能 ·显示数据RAM共有80个字节 ·字符产生器ROM有60个5*7

21、点阵字型。 ·字符产生器RAM可由用户自行定义8个5*7的点阵字型10表3.4 引脚说明编号符号引脚说明编号符号引脚说明1Vss电源地9D2数据口2Vdd电源正极10D3数据口3VO液晶显示对比调节端11D4数据口4RS数据/命令选择端12D5数据口5R/W读写选择端13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光电源正极8D1数据口16BLK背光电源负极表3.5 主要技术参数显示容量16×2个字符芯片工作电压工作电流2.0mA (5.0V)模块最佳工作电压字符尺寸×4.35(W×H)mm显示开关及光标设置表3.6 显示设置及光标指令码

22、功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读或写一个字符后地址指针加1,光标加1N=0当读或写一个字符后地址指针减1,光标减1S=1当写一个字符时,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而整屏移动效果S=0当写一个字符时,整屏显示不移动00010000光标左移00010100光标右移00011000整屏左移,同时光标跟随移动00011100整屏右移,同事光标跟随移动图3.9仿真图lcd1602液晶显示部分lcd1602液晶的7-14脚与AT89C51的P0.0-P0.7相连接,并且串接

23、一个排阻,lcd的1、3脚接地,2脚接VCC。4、5、6分别与P2.0、P2.1、P2.2相连。再该设计中lcd1602可以显示时间,具有显示清晰、功耗低等优点。 蜂鸣器电路设计蜂鸣器电路由一个蜂鸣器连在P3.6上,另一端接地,当闹钟开启时到闹钟设置的时间就会报警,如图图0仿真图蜂鸣器部分第四章软件设计4.1 总体流程图在硬件电路图连接起来后,就要进行软件设计了。从主程序开始,首先进入初始化,包括lcd1602初始化和DS1302初始化。然后进入显示程序显示时间,然后按键扫描,当有键按下后就会跳转到相应子程序进行时间或闹钟设置;无按键按下时就返回显示时间。如此循环就可正常显示时间并且手动调整时

24、间和闹钟了。图4.1 总体流程图4.2 软件模块化设计 软件准备编程使用keil软件,首先新建一个工程,选择Aemel AT89C51芯片,把晶振调到12Mhz,并生成HEX文件,然后开始编写程序。图4.2 keil界面截图 时间调整部分设计首先初始化完成后进入按键扫描程序,当set键按下后进入时间调整模式,按一次可以调整秒,按两次可以调整分,按三四五六七次依次对应可以调整时、星期、日、月、年。在调整期间按up键对应加一,按down键对应减一。按八下跳出时间调整模式。在该模式下按alarm键无效。图4.3 按键部分流程设计 闹钟部分设计闹钟可以通过alarm键按下后进入设置页面,按up键可以开

25、启闹钟,按down键可以关闭闹钟。按两次alarm键可调整闹钟的秒,相应的按三四下可以调整分和时。按五下alarm键退出闹钟设置界面。当闹钟响起后,按任意键取消闹钟铃声。第五章仿真结果分析5.1 仿真效果P图5.1 整体仿真效果图由仿真图可以看到整个仿真设计的效果,DS1302时钟芯片为电路提供时间,单片机读取数据后送lcd1602上面显示,可显示时间日期和星期。4个独立按键连接到P2.4到P2.7,可以通过按键控制时间日期及闹钟的调整。蜂鸣器连到P3.6口,当定时闹钟到来时响起。图5.2 时间调整界面截图上图为时间调整模式截图,当按下set键后进入时间调整模式,此时按up和down对应可以使

26、秒加一和减一。再按下set键一次可以调整分,再按一次可以调整时,以此类推可以调整日期和星期。按八下set键退出时间调整模式。在该模式下按alarm键无效。图5.3 闹钟设置界面截图该界面为闹钟调整模式截图,当按下alarm键后,进入闹钟调整模式,此时按下up键可以开启闹钟,按下down键可以关闭闹钟。再按一下alarm可以调整闹钟的秒,按up加一按down减一。以此类推可以调整闹钟的时和分。当闹钟开启并且设定时间到来时,闹钟响起按任意键取消响铃。5.2 效果分析经过调试该设计可以基本满足各项要求,达到预期的效果。通过Proteus仿真我们可以看到最后效果,液晶上显示了时间日期和星期。并且可以通

27、过4个独立按键可以调整时间日期和闹钟,并且控制闹钟的开启和关闭。当设置了闹钟后时间到时自动打铃,按任意键取消铃声。通过修改程序该设计还可以附加其他功能,但由于时间关系,水平有限,就不一一赘述。结论通过这次毕业设计我有温习了大学所学的专业知识,锻炼了自己的钻研能力,经过十几周的努力终于完成了本次毕业设计。在本次设计中最关键的我认为是大方向的把握,首先拿到题目后我确定用所学的单片机的知识来设计,其次多功能闹钟我选择用DS1302时钟芯片来提供时间,显示部分我选择用LCD1602液晶来显示。用C语言编程,辅以Proteus和keil编译软件来完成本次设计。在大的方案确定下来后,我就开始逐一解决各个功

28、能模块,在很多小细节方面遇到很多问题,比如keil编译出错,仿真出错等等。在遇到问题后,我通过请教老师,并不断查阅各种资料文档,在这过程中我也学习到了不少新知识和研究问题的新方法。我觉得学习还是要学以致用,不然学得再多也没有发挥出作用,要多动手勤思考,只有这样大学所学的知识才不会浪费。参考文献1李朝青单片机原理及接口技术Mp3334.第3版北京:北京航空航天大学出版,20082 郭天祥.新概念51单片机C语言教程M.p323324.北京:电子工业出版社,2009.,2012.4 单片机电子时钟设计,EB/OL.百度文库,36a984bceb19e8b8f.5 阎石数字电子技术基础M第4版北京:

29、高等教育出版社,200151单片机C语言:魔法入门实例解析开发揭秘全攻略M.p255261.北京:北京航空航天大学出版社,2011.7 孙焕铭. 51单片机C程序应用实例详解M. p211214.北京:北京航空航天大学出版社,2011.8 郭天祥.新概念51单片机C语言教程M.p147148.北京:电子工业出版社,2009.9 郭天祥.新概念51单片机C语言教程M.p148149.北京:电子工业出版社,2009.10 郭天祥.新概念51单片机C语言教程M.p148.北京:电子工业出版社,2009.附录程序如下:#include <reg52.h>#include "int

30、rins.h"#define uchar unsigned char#define uint unsigned intuchar code tabe1="20 - -" /液晶一直显示的字符uchar code tabe2=" : : "uchar code tabe3="Alarm set:"uchar miao,fen,shi,nian,yue,ri,week,wendu_shi,wendu_ge,wendu_shu,wendu_bai,variate,alarm_shi,alarm_fen,alarm_miao;uch

31、ar flag=1,count=0,flag_up=0,flag_down=0,flag_alarm=0,alarm_on,alarm_count=0,done=0;uint wendu;/定义IOsbit ds1302_rst = P11; /1302复位sbit ds1302_io = P12; /数据输入输出void delay(uchar x)uchar y,z;for(z=x;z>0;z-)for(y=110;y>0;y-);void delay1() _nop_();_nop_(); /*ds1302*/void write_byte(uchar dat) /写一字节u

32、char k;ACC=dat; for(k=8;k>0;k-) ds1302_io=ACC0;ds1302_sclk=0; /拉低sclkds1302_sclk=1; /拉高sclkACC>>=1;uchar read_byte() uchar k; for(k=8;k>0;k-) ACC7=ds1302_io;ds1302_sclk=1; /拉高sclkds1302_sclk=0; /拉低sclkACC>>=1;return ACC; void ds1302_write(uchar add,uchar date) ds1302_rst=0;ds1302_s

33、clk=0; /在rst没拉高之前先把sclk置0ds1302_rst=1;write_byte(add);write_byte(date);ds1302_sclk=1; ds1302_rst=0; uchar ds1302_read(uchar add)uchar temp;ds1302_rst=0;ds1302_sclk=0; /在rst没拉高之前先把sclk置0ds1302_rst=1;write_byte(add);temp=read_byte();ds1302_sclk=1; ds1302_rst=0;return temp;/*void ds1302_init() /ds1302初

34、始化 ds1302_rst=0;ds1302_sclk=1; ds1302_write(0x8e,0x00);/写允许ds1302_write(0x80,0x58);ds1302_write(0x82,0x06);ds1302_write(0x84,0x12);ds1302_write(0x86,0x12);ds1302_write(0x88,0x12);ds1302_write(0x8a,0x01);ds1302_write(0x8c,0x11);ds1302_write(0x8e,0x80);/写保护 */*lcd1602*/void lcd_write_com(uchar com) /命

35、令字写入lcd单元中 lcd1602_rw=0; delay1(); lcd1602_rs=0; / RW=1,RS=0,写LCD命令字 delay1(); P0=com; /将com中的命令字写入LCD数据口 delay1(); lcd1602_e=1; /E端时序 delay1(); lcd1602_e=0; delay1(); lcd1602_rw=1; delay(5);void lcd_write_date(uchar date) /数据写入lcd单元中 lcd1602_rw=0; delay1(); lcd1602_rs=1; / RW=0,RS=1,写LCD命令字 delay1(

36、); lcd1602_e=1; / E端时序 delay1(); P0=date; / 将dat中的显示数据写入LCD数据口 delay1(); lcd1602_e=0; delay1(); lcd1602_rw=1; delay(5);void lcd1602_init() /LCD初始化函数 uchar lcdnum;P3=0xdf;lcd_write_com(0x38);lcd_write_com(0x0c);lcd_write_com(0x06);lcd_write_com(0x01);lcd_write_com(0x80);for(lcdnum=0;lcdnum<8;lcdnu

37、m+) /写第一行数据lcd_write_date(tabe1lcdnum);delay(2);lcd_write_com(0x80+0x40); /写入第二行数据for(lcdnum=0;lcdnum<13;lcdnum+)lcd_write_date(tabe2lcdnum);delay(2);/*显示部分*/void write_time1(uchar add,uchar date) /日期送显示uchar shi,ge;shi=date/10;ge=date%10;lcd_write_com(0x80+add);lcd_write_date(0x30+shi);lcd_write

38、_date(0x30+ge);void write_time2(uchar add,uchar date) /时间送显示uchar shi,ge;shi=date/10;ge=date%10;lcd_write_com(0x80+0x40+add);lcd_write_date(0x30+shi);lcd_write_date(0x30+ge);uchar bcd_decimal(uchar bcd) /bcd转换十进制 uchar decimal;decimal=bcd>>4;decimal=decimal*10+(bcd&=0x0f);return decimal; v

39、oid yinli_decimal(uint dat) /换后送显示 lcd_write_com(0x80+0x40+10); /送显示lcd_write_date(0x30+ymonth/10);lcd_write_date(0x30+ymonth%10);lcd_write_date(0x00); lcd_write_date(0x30+yday/10);lcd_write_date(0x30+yday%10); void write_week(uchar we) /星期送显示lcd_write_com(0x80+0x0d);switch(we)case 1: lcd_write_date

40、('M');lcd_write_date('0'); lcd_write_date('N'); break;case 2: lcd_write_date('T');lcd_write_date('U'); lcd_write_date('E'); break;case 3: lcd_write_date('W');lcd_write_date('E'); lcd_write_date('D'); break;case 4: lcd_write_date

41、('T');lcd_write_date('H'); lcd_write_date('U'); break;case 5: lcd_write_date('F');lcd_write_date('R'); lcd_write_date('T'); break;case 6: lcd_write_date('S');lcd_write_date('A'); lcd_write_date('T'); break;case 7: lcd_write_date

42、('S');lcd_write_date('U'); lcd_write_date('N'); break; /*按键处理*/uchar key_bcd(uchar key_decimal) /转成ds1302所需的BCD码 uchar temp;temp=(key_decimal/10)&0x0f)<<4)|(key_decimal%10);return temp;void key_up_down() /加减键处理 if(up=0) delay(2);flag_up=1;/加更新标志while(!up);switch(cou

43、nt) case 1: miao+;if(miao>59)miao=0;break;case 2: fen+;if(fen>59)fen=0;break;case 3: shi+;if(shi>23)shi=0;break;case 4: week+;if(week>7)week=1;break;case 5: ri+;if(ri>31)ri=1;break;case 6: yue+;if(yue>12)yue=1;break;case 7:nian+;if(nian>99)nian=0;break; if(down=0) /减键处理 delay(2)

44、;flag_down=1;/减更新标志while(!down);switch(count) case 1:miao-;if(miao=255)miao=59;break;case 2:fen-;if(fen=255)fen=59;break;case 3:shi-;if(miao=255)shi=23;break;case 4:week-;if(week<1)week=7;break;case 5: ri-;if(ri<1)ri=31;break;case 6: yue-;if(yue<1)yue=12;break;case 7:nian-;if(nian=255)nian=

45、99;break;/*闹钟*/void alarm_ring()if(alarm_on=1)/alarm_on=1 为闹钟有效if(shi=alarm_shi && fen=alarm_fen && miao=alarm_miao) flag_alarm=1;/闹钟时间到,闹钟标志位置1if(flag_alarm=1) uchar i,j,t;t=30;for(i=0;i<200;i+) alarm_out=alarm_out;for(j=0;j<t;j+);if(set=0 | up=0 | down=0 | nao=0) /闹钟响时,按任意键取消

46、闹钟 while(!set);while(!up);while(!down);while(!nao);flag_alarm=0;alarm_out=1;void alarm_huan() /按下闹钟键后,切换界面 uchar num;lcd_write_com(0x01);lcd_write_com(0x80);for(num=0;num<10;num+) /写第一行数据lcd_write_date(tabe3num);delay(2);lcd_write_com(0x0f);write_time2(4,alarm_shi);lcd_write_date(0x3a);write_time

47、2(7,alarm_fen);lcd_write_date(0x3a);write_time2(10,alarm_miao);if(alarm_on=0) lcd_write_com(0x80+0x40+13);lcd_write_date('O');lcd_write_date('F');lcd_write_date('F');if(alarm_on=1)lcd_write_com(0x80+0x40+13);lcd_write_date(' ');lcd_write_date('O');lcd_write_date('N'); void key_set_alarm()if(set=0 && alarm_count=0 && flag_alarm=0)delay(2);if(set=0)while(!set); /等待set释放count+; /按set一下,count加1 if(flag=1) done=1;flag=0;ds1302_write(0x8e,0x0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论