电子电路基于单片机的数字电子时钟的设计与制作_第1页
电子电路基于单片机的数字电子时钟的设计与制作_第2页
电子电路基于单片机的数字电子时钟的设计与制作_第3页
电子电路基于单片机的数字电子时钟的设计与制作_第4页
电子电路基于单片机的数字电子时钟的设计与制作_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、成 绩: 江西科技师范大学 毕业设计(论文)题 目: 基于单片机的数字电子时钟的设计与制作: based on scm in digital clock the design and manufacture 院(系): 通信与电子学院 专 业: 电子信息工程 学生姓名: 曾光辉 学 号: 20083470 指导教师: 占华林 年 月 日目录1. 前言.1 1.1电子时钟研究意义及简介 1 1.2数字电子时钟功能. 12.基于单片机的数字电子时钟的设计与方案选择.2 2.1主控制器 2 2.2时钟控制方案比较. 22.3键盘显示方案比较. 33.系统功能实现总体设计思路 . 3 3.1 系统硬件

2、介绍. 33.2数字电子钟的总体设计 73.3数字电子钟的功能. 74.基于单片机的数字电子钟系统硬件设计. 8 4.1 时钟电路模块. 8 4.2复位电路模块. 9 4.3lcd1602显示电路模块. 9 4.4按键电路模块. 10 4.5闹铃模块. 104.6系统硬件电路图. 115. 基于单片机的数字电子钟系统的软件设计. 135.1 系统软件设计. 135.2主程序设计. 135.3按键扫描程序设计. 14 5.4时间更新函数程序设计. 16 5.5秒表更新函数程序设计. 21 5.6显示切换函数程序设计. 246.实物和结果分析. 296.1 程序调试. 296.2 电路调试. 31

3、6.3课程设计结果分析. 327.总结. 33参考文献. 33附录. 34元件清单. 34控制电路的c语言源程序. 35基于单片机的数字电子时钟的设计与制作 摘要; 本系统由核心元件at89c51单片机、lcd1602、独立按键、蜂鸣器构成,用来实现数字电子钟和秒表功能。主控部分是由单片机和独立按键两部分构成,显示部分是lcd1602显示模块构成,闹铃部分是外接蜂鸣器构成。实现了秒表和数字电子时钟的功能。工作过程中有各种工作状,显示年月日,同时显示时钟;而在秒表工作状态时只显示启动秒表后或暂停秒表后的当前累计的时间。 关键词: 单片机 时钟 秒表 at89c511. 前言1.1电子时钟研究意义

4、及简介时钟,是我们生活中不可缺少的,随着时代的发展,人们对时钟的要求越来越高,这就要我们对时钟的设计的要求也越来越来高。我们用过的机械时钟,它成本高,内部结构复杂,功能少;而采用集成电路的时钟,它电路较复杂,都不符合这个时代的设计理念。通过研究对比我们选择设计一款基于单片机的简易电子时钟,电子时钟一般由震荡器,分频器,译码器,显示器等部分组成,这些都是数字电路最基本的,应用最广的电路。它成本低,体积小,简单实用,功能强大。这款简易电子时钟使用at89c51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的年、月、日、时、分、秒以及闹铃

5、,用一扬声器来进行定时提醒,用lcd1602来进行显示,同时使用c语言程序来控制整个时钟显示,使得编程变得更容易。1.2数字电子时钟功能电子时钟主要是利用电子技术将时钟电子化,数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。本简易电子时钟设计功能主要为:1.年月日时分秒显示及校对功能,24小时制。2.具有闹铃功能。3.具有秒表功能。2.基于单片机的数字电子时钟的设计与制作方案选择根据题目要求需求,本系统主要实现微波炉的用户输入控制、显示控制、工作控制和时钟控制和音响控制,而键盘和显示分部尤其重要。对于这样一个系统使用单片机控制系统加上外围电路将会比较容易

6、实现,下面对各部分分别进行论证。 2.1主控制器方案一 采用数字逻辑芯片。本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。各个状态保持或转移的条件依赖于键盘控制信号。由于键盘控制信号繁多,系统的逻辑状态以及相互转移更是复杂,用纯粹的数字电路或小规模的可编程逻辑电路实现该系统有一定的困难,需要用中大规模的可编程逻辑电路。这样,系统的成本就会急剧上升相对于方案二。因此,本设计并未采用这种方案。方案二 采用单片机作为整个控制系统的核心。由于单片机具有体积小、成本低、可靠性高、抗干扰能力强、应用灵活、开发效率高、易于被产品化等优点,其具有很强的面向控制的能力,自70年代以来,在很多领域得

7、到广泛的应用。单片机有8的位,如51系列;有16位的如98系列;还有32位的,如当前市场比较热门的arm单片机。单片机比较容易实现系统的智能化控制,而且方便,经济。鉴于市场上常见的51系列8位单片机的售价比较低廉,技术成熟,对于我们的系统在控制上完全能够胜任。我们的设计采用at89c51型单片机。本系统的主控制器采用at89c51单片机作为整个控制系统的核心。2.2时钟控制方案比较方案一 使用专用时钟芯片。使用微控制器控制专用时钟芯片实现计时控制,这种方案有着计时精度高、控制简单的优点,而且更易于实现日期/时间显示、定时烹调等计时扩展功能。方案二 采用小规模集成元件定时此方案主要使用计数器/分

8、频器。该方法价格便宜,但是接线复杂,设计也比较困难,对时序要求比较高。同时该方案功能单一,也无法实现复杂功能,可扩展性差。也不能实现一些人性化的界面设计。方案三 利用用mcu的内部定时器软件现实时钟功能。鉴于本系统采用at89c51单片机作为整个控制系统的核心,充分利用单片机内部的时钟电路,进行定时控制,从而减少电路设计的复杂度,而且能够减少整套系统的成本。另外,单片机能够实现复杂功能,充分利用单片机扩展灵活特性,通过设计软件,能够设计出友好的人机界面接口和性能。况且单片机价格也比较便宜,性价比很高。 本系统时钟控制部分我们采用了方案三,从而充分体现出高性价比。2.3键盘显示方案比较方案一 采

9、用并行口扩展芯片扩展并行口的方法来设计键显系统。采用键盘显示专用控制器8279显示时钟、火力、倒计时等等功能,而用led显示各种工作状态的指示信号。这种方法键盘控制简单,但8279只能显示数字信息,显示能力有限,不灵活。如果采用这种方法,为了表达更多的信息,就必需使用许多led来引导用户进行操作。方案二 中文字符显示和端口键盘扫描采用lcd液晶字符显示。字符显示具有强大的信息表达能力,采用这种显示方法只需少量的键盘加上软件配合,就可以实现多种用户功能控制和选择,目前市场上lcd1602系列的液晶显示模块技术比较成熟,这是一种能够显示2行,每行16个字符的液晶显示模块。而少量的键盘,使用软件扫描

10、方法将会比使用8279经济许多,而且控制起来也不为了实现更多的功能而又减少成本。我们采用了方案二作为本系统的键盘显示。综上所述,我们的总体设计思想是硬件尽量简单,用软件实现更多的功能,这样就可以用比较低的成本来实现这个系统 。本系统采用89c51作为主控部分,lcd1602液晶作为显示部分,键盘使用软件扫描方法,使用一个蜂鸣器作为声音提示部分。3.系统功能实现总体设计思路3.1.系统器件介绍1. at89c51单片机的结构 at89c51单片机是美国atmel公司生产低电压,高性能cmos 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(eprom)和128 bytes的随机存

11、取数据存储器(ram),器件采用atmel公司的高密度、非易失性存取技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器(cpu)和flash 存储单元,功能强大。at89c51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。图3-1为at89c51单片机的基本组成功能方块图。有图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括cpu、存储器、可编程i/o口、定时器/计数器、串行口等,各部分通过内部总线相连。下面介绍几个主要部分。图3-1 at89c51 功能方块图1(1)中央处理器(cpu)中央处理器是单片机最核心的部分,是单片机的大脑和心脏,主要

12、完成运算和控制功能。at89c51的cpu是一个字长为8位的中央处理单元,即它对数据的处理是按字节为单位进行的。(2)内部数据存储器(内部ram) at89c51 中共有256个ram单元,但其中能作为寄存器供用户使用的仅有前面128个,后128个被专用寄存器占用。(3)内部程序存储器(内部rom) at89c51 共有4 kb掩膜rom,用于存放程序、原始数据等。(4)定时器/计数器at89c51 共有2 个16 位的定时器/计数器,可以实现定时和计数功能。(5)并行i/o 口 at89c51 共有4 个8 位的i/o口(p0、p1、p2、p3口),可以实现数据的并行输入、输出。(6)串行口

13、at89c51有1 个全双工的可编程串行口,以实现单片机和其他设备之间的串行数据传送。(7)时钟电路 at89c51 单片机内部有时钟电路,但晶振和微调电容需要外接。时钟电路为单片机产生时钟脉冲序列。(8)终端系统 at89c51 的中断系统功能较强,可以满足一般控制应用的需要。它共有5 个中断源:2 个外部中断源/into和/int1 ;3 个内部中断源,即2个定时/计数中断,1个串行口中断。由上所述,at89c51虽然是一块芯片,但它包括了构成计算机的基本部件,因此可以说它是一台简单的计算机,它的引脚如图3-2所示。 图3-2 dip封装引脚图10vcc:供电电压。vss:接地。p0口:p

14、0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲

15、器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。 p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电

16、平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口,如下表所示:p3口管脚 备选功能p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 /int0(外部中断0)p3.3 /int1(外部中断1)p3.4 t0(计时器0外部输入)p3.5 t1(计时器1外部输入)p3.6 /wr(外部数据存储器写选通)p3.7 /rd(外部数据存储器读选通)p3口同时为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许端的输出电平用于锁存

17、地址的地址字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。/psen:外部程序存储器的选通信号端。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/

18、vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出1。2. lcd1602液晶的介绍 (1) lcd 1602特征及应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中(2) lcd 1602指令集1602通过d0d7的8位数据端传输数据和指令。显示模式设置: (初

19、始化)0011 0000 0x38 设置162显示,57点阵,8位数据接口;显示开关及光标设置: (初始化)0000 1dcb d显示(1有效)、c光标显示(1有效)、b光标闪烁(1有效)0000 01ns n=1(读或写一个字符后地址指针加1 &光标加1),n=0(读或写一个字符后地址指针减1 &光标减1),s=1 且 n=1 (当写一个字符后,整屏显示左移)s=0 当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80h,所以数据地址为80h+地址码(0-27h,40-67h)其他设置:01h(显示清屏,数据指针=0,所有显示=0);02h(显示回车,数据指针=0)。(3) lcd1

20、602管脚功能1602采用标准的16脚接口,其中:第1脚:vss为电源地第2脚:vdd接5v电源正极第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。第4脚:rs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:rw为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:e(或en)端为使能(enable)端。第714脚:d0d7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.2数字电子钟的总体设计此设计原理框

21、图如下图3-2-1所示,此电路包括以下三个部分:单片机,键盘,闹铃电路。采用atc89c52芯片和lcd1602等来实现电子时钟的功能。51单片机lcd1602显示独立键盘闹铃电路图3-2-13.3 数字电子钟的功能电子时钟主要是利用电子技术将时钟电子化,数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。本简易电子时钟设计功能主要为:1.年月日时分秒显示及校对功能,24小时制。2.具有闹铃功能。3.具有秒表功能。4.基于单片机的数字电子钟系统硬件设计该数字钟工作原理是用一片at89c51单片机通过编程去控制lcd1602实现的。通过2个开关控制来进行时间的

22、调节以及秒表功能,p2.0(key1)口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显示模式时,按此键可以选中相应的需要调整的位。当系统处于时间显示模式时,p2.1(key2)口控制按键,按此键对相应的选中位进行加,当系统处于处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。其工作流程:1.年月日时分秒显示。通电后lcd自动显示c语言程序设置好的默认时间2.闹钟显示和设定。通电后,a的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。3.秒表显示以及启动和暂停以及清零。处于

23、正常显示时间模式下时按下key1释放后可以进入秒表模式,前3次按下key2的功能依次为启动停止清零,每按3次key2为一个轮回。4.1时钟电路模块下图4-1-1所示为时钟电路原理图,在at89c51芯片内部有一个高增益反相放大器,其输出端为引脚xtal2,输入为芯片引脚xtal1。而在芯片外部,xtal1和xtal2之间跨接晶体振荡器和微调电容,构成一个稳定的自激振荡电路,电路产生的振荡脉冲经过触发器进行十二分频之后,便成为单片机的时钟信号。 图3-1-14.2复位电路模块下图4-2-1所示为复位电路原理图,在单片机的实际应用系统中,除单片机本身需复位以外,外部扩展的i/o接口电路等也需要一个

24、复位,因此需要一个系统的同步复位信号,即单片机复位后,cpu开始工作,外部的电路一定要复位好,以保证cpu有效地对外部电路进行初始化编程。单片机复位的条件是:必须使rst/vpd 或rst引脚加上持续两个机器周期(即24个振荡周期)的高电平。电路为上电复位电路,它是利用电容充电来实现的。在接电瞬间,rst端的电位与vcc相同,随着充电电流的减少,rst的电位逐渐降低。只要保证rst为高电平时间大于两个机器周期,就能正常复位。 图4-2-14.3 lcd1602显示电路模块下图4-3-1所示为lcd1602显示模块电路原理图 图4-3-14.4按键电路模块下图4-4-1所示为独立按键模块电路原理

25、图,根据此电子时钟功能要求,需要设置以下两个功能键:工作模式键(key1),模式辅助键(key2)。按照键盘与cpu的连接方式可分为独立键盘和矩阵键盘。独立式键盘是各个按键相互独立,每个按键占用一个i/o口,外加上拉电阻,每个i/o口上的按键不会影响到其他i/o口的按键工作状态。独立式键盘电路配置灵活,软件结构简单,所以本设计采用独立式键盘。图4-4-14.5闹铃模块下图4-5-1所示为闹铃模块电路原理图,闹铃模式时,设定好闹铃时间,闹铃时间有时和分,当设定好的闹铃时间跟系统的当前时间的时和分相等时,系统给p2.2端口送低交替的高低电平,蜂鸣器发出一定频率报警声,一分钟后报警声停止,如果这一分

26、钟内有按键按下则报警声也停止。图4-5-14.6系统硬件电路图下图4-6-1所示系统电路原理图, 该数字钟工作原理是用一片stc89c52单片机通过编程去控制lcd1602实现的。通过2个开关控制来进行时间的调节以及秒表功能,p2.0(key1)口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显示模式时,按此键可以选中相应的需要调整的位。当系统处于时间显示模式时,p2.1(key2)口控制按键,按此键对相应的选中位进行加,当系统处于处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。其工作流程:

27、1.年月日时分秒显示。通电后lcd自动显示c语言程序设置好的默认时间2.闹钟显示和设定。通电后,a的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。3.秒表显示以及启动和暂停以及清零。处于正常显示时间模式下时按下key1释放后可以进入秒表模式,前3次按下key2的功能依次为启动停止清零,每按3次key2为一个轮回。 图4-6-15.基于单片机的数字电子钟系统的软件设计5.1系统软件设计 系统软件包含四个部分:主程序,定时器扫描程序,按键扫描程序,按键处理程序;通过这四个部分可以实现数字电子钟的功能设计。5.2主程序设计程序设计主要是通过单片机内部timer0和timer1产

28、生系统时钟信号,经过单片机的运算分别得到时间的 年 月 日 时 分 秒 和秒表的 时 分 秒 毫秒,单片机在主程序中循环扫描按键端口,根据返回的键值分别将这些数据传给lcd1602对应显示出来。5.2.1实现功能 程序实现的功能是:正常显示 年 月 日 和 时 分 秒 以及闹钟的 时 分。若单片机检测到key1第一次按下并释放则lcd切换到显示秒表模式00:00:00:00,第二次按下key2并释放则返回到时钟显示模式。在时钟正常显示模式下若前5按下key2按键并释放则一次选中闹钟的 时 分和时钟的 分 时 年 月 日,选中位会出现光标闪烁并且时钟不自动走动,第6次按下key2并释放之后则正常

29、显示时钟,6次为一个循环。在光标闪烁的时候若按下key1并且释放则可以对相应位进行校正。若在秒表显示模式下第一次按下key2并释放则启动秒表计时,第二次按下key2释放后则暂停秒表,第三次按下key2释放后则秒表清零,三次为一个循环。5.2.2工作流程图 通过以上分析可得图5-2系统工作流程图: 图5-2-1 5.3按键扫描程序设计5.3.1实现功能当系统检测到有按键按下时返回相应非零的键值,否则返回零。5.3.2按键扫描流程图(如图5-3-1) 图5-3-15.3.3按键扫描部分代码unsigned char key_scan(void)static unsigned char value;

30、/键值static unsigned char do_key;/执行相应命令标识static unsigned char key_scan_step;/键盘扫描步骤if(key_scan_step=0)key_value = 0;if(do_key=0)if(key & 0x03 != 0x03)t1=0;do_key=1;if(t1=key_shake_time)&(key & 0x03) != 0x03)value = key & 0x03;do_key = 0;key_scan_step = 1;if(key_scan_step=1)&(key & 0x03) = 0x03)key_sc

31、an_step = 0;switch(value)case 0x02 :value = 1;break;case 0x01 :value = 2;break;case 0x03 :value = 0;break;default :value = 0;break;return(value);elsereturn(0);5.4时间更新函数处理程序5.4.1实现功能通过对t0值的判断来得到 秒 分 时 日 月 年 的计算5.4.2工作流程图(如图5-2-1) 图5-2-15.4.2时间更新函数部分代码void update_time(void)if(t0=20)t0=0;time.second+;i

32、f(time.second59)time.second=0;time.minute+;if(time.minute59)time.minute=0;time.hour+;if(time.hour23)time.hour=0;time.day+;switch(time.month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(time.day31)time.day=1;time.month+;if(time.month12)time.month=1;time.year+;if(time.year 2060)time.year = 20

33、12;break;case 4:case 6:case 9:case 11:if(time.day30)time.day=1;time.month+;if(time.month12)time.month=1;time.year+;if(time.year 2060)time.year = 2012;break; case2:if(time.year/4=0)&(time.year/100!=0)|(time.year/400=0)&(time.day29) time.day=1;time.month+;if(time.month12)time.month=1;time.year+;if(tim

34、e.year max_year)time.year = min_year; else if(time.day28) time.day=1;time.month+;if(time.month12)time.month=1;time.year+;if(time.year 2060)time.year = 2012; break;default:break;if(model_flag = 0)write_lcd(0x8c,wcmd);write_lcd(time.day%10+0,wdata);write_lcd(0x8b,wcmd);write_lcd(time.day/10+0,wdata);w

35、rite_lcd(0x89,wcmd);write_lcd(time.month%10+0,wdata);write_lcd(0x88,wcmd);write_lcd(time.month/10+0,wdata);write_lcd(0x83,wcmd);write_lcd(time.year/1000)+0,wdata);write_lcd(0x84,wcmd);write_lcd(time.year%1000/100)+0,wdata);write_lcd(0x85,wcmd);write_lcd(time.year%1000%100/10)+0,wdata);write_lcd(0x86

36、,wcmd);write_lcd(time.year%10+0,wdata);if(model_flag = 0)write_lcd(0xc1,wcmd);write_lcd(time.hour%10+0,wdata);write_lcd(0xc0,wcmd);write_lcd(time.hour/10+0,wdata);if(model_flag = 0)write_lcd(0xc4,wcmd);write_lcd(time.minute%10+0,wdata);write_lcd(0xc3,wcmd);write_lcd(time.minute/10+0,wdata);if(model_

37、flag = 0)write_lcd(0xc7,wcmd);write_lcd(time.second%10+0,wdata);write_lcd(0xc6,wcmd);write_lcd(time.second/10+0,wdata);5.5 秒表更新函数处理程序5.5.1实现功能通过对t1值的判断来得到秒表的毫秒 秒 分 时 的计算5.5.2工作流程图(如图5-5-1)图5-5-15.5.3函数部分代码void update_stop_watch(void)if(sw_t1=1)sw_t1=0;time.sw_msecond+;if(time.sw_msecond99)time.sw_ms

38、econd=0;time.sw_second+;if(time.sw_second59)time.sw_second=0;time.sw_minute+;if(time.sw_minute59)time.sw_minute=0;time.sw_hour+;if(time.sw_hour23)time.sw_hour=0;if(model_flag = 1)write_lcd(0xc3,wcmd);write_lcd(time.sw_hour%10+0,wdata);write_lcd(0xc2,wcmd);write_lcd(time.sw_hour/10+0,wdata);if(model_

39、flag = 1)write_lcd(0xc6,wcmd);write_lcd(time.sw_minute%10+0,wdata);write_lcd(0xc5,wcmd);write_lcd(time.sw_minute/10+0,wdata);if(model_flag = 1)write_lcd(0xc9,wcmd);write_lcd(time.sw_second%10+0,wdata);write_lcd(0xc8,wcmd);write_lcd(time.sw_second/10+0,wdata);if(model_flag = 1)write_lcd(0xcc,wcmd);wr

40、ite_lcd(time.sw_msecond%10+0,wdata);write_lcd(0xcb,wcmd);write_lcd(time.sw_msecond/10+0,wdata);5.6显示切换函数处理程序5.6.1实现功能通过对模式标志位model_flag值的判断来决定显示器的显示模式5.6.2工作流程图(如图4-6-1)图5-6-15.6.3显示切换函数部分代码void shift_display(void)if(model_flag = 0 & time_change_flag = 0 & shift_flag =0)shift_flag = 1;dowrite_lcd(0x

41、01,wcmd);/清屏write_lcd(0x8b,wcmd);write_lcd(time.day/10+0,wdata);write_lcd(0x8b,wcmd);write_lcd(time.day/10+0,wdata);write_lcd(0x8c,wcmd);write_lcd(time.day%10+0,wdata);write_lcd(0x8a,wcmd);write_lcd(-,wdata);write_lcd(0x88,wcmd);write_lcd(time.month/10+0,wdata);write_lcd(0x89,wcmd);write_lcd(time.mo

42、nth%10+0,wdata);write_lcd(0x87,wcmd);write_lcd(-,wdata);write_lcd(0x83,wcmd);write_lcd(time.year)/1000+0,wdata);write_lcd(0x84,wcmd);write_lcd(time.year%1000/100+0,wdata);write_lcd(0x85,wcmd);write_lcd(time.year)%1000%100/10+0,wdata);write_lcd(0x86,wcmd);write_lcd(time.year)%10+0,wdata);write_lcd(0x

43、cf,wcmd);write_lcd(time.alarm_minute%10+0,wdata);write_lcd(0xce,wcmd);write_lcd(time.alarm_minute/10+0,wdata);write_lcd(0xcd,wcmd);write_lcd(:,wdata);write_lcd(0xcc,wcmd);write_lcd(time.alarm_hour%10+0,wdata);write_lcd(0xcb,wcmd);write_lcd(time.alarm_hour/10+0,wdata);write_lcd(0xc9,wcmd);write_lcd(a,wdata);write_lcd(0xc7,wcmd);write_lcd(time.second%10+0,wdata);write_lcd(0xc6,wcmd);write_lcd(time.second/10+0,wdata);write_lcd(0xc5,wcmd);write_lcd(:,wdata);write_lcd(0xc4,wcmd);

温馨提示

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

评论

0/150

提交评论