《单片机电子时钟毕业论文.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟毕业论文.docx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 摘 要本设计以AT89C51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,
2、在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。关键词: 液晶显示器;单片机;数字时钟 - ii -AbstractAbstractThe design AT89C51 microcontroller core chip, and the Model 1602 hungry for a digital LCD clock electronic circuit. AT89C51 SCM is a VLSI chip, which integrates CPU, Memory (RAM / ROM), I / O interface, timer / counter, serial commu
3、nication interface circuit. With a high degree of integration, small size, high reliability and control functions, low power consumption characteristics. Model for the 1602 character LCD with micro-power consumption, small size, content rich, Ultra-thin and light many advantages, in a pocket-type in
4、struments and low-power application system, which is increasingly widely used. Keywords: liquid crystal display; microcontroller; digital clock 目 录目 录摘 要iAbstractii第 1 章 绪 论11.1 电子时钟研究意义及简介11.2 数字电子时钟的功能1第 2 章基于单片机的数字电子时钟的设计方案选择22.1 主控制器22.1.1 采用数字逻辑芯片22.1.2 采用单片机作为整个控制系统的核心22.2 时钟控制方案比较22.3 键盘显示方案比
5、较3第 3 章系统功能实现总体设计思路43.1 系统器件介绍43.1.1 AT89C51单片机的结构43.1.1.1 中央处理器(CPU)43.1.1.2 内部数据存储器(内部RAM)53.1.1.3 内部程序存储器(内部ROM)53.1.1.4 定时器/计数器53.1.1.5 并行I/O口 53.1.1.6 串行口 53.1.1.7 时钟电路53.1.2 LCD1602液晶的介绍53.1.2.1 LCD1602特征及应用53.1.2.2 LCD1602指令集53.1.2.3 LCD1602管脚功能63.2 数字时钟的总体设计63.3 数字时钟的功能6第 4 章基于单片机的数字电子钟系统硬件设
6、计84.1 时钟电路模块84.2 复位电路模块94.3 LCD1602显示电路模块104.4 按键电路模块114.5 闹铃电路模块114.6 系统硬件电路图12第 5 章基于单片机的数字电子钟系统软件设计145.1 系统软件设计145.2 主程序设计145.2.1 实现功能145.2.2 功能流程图155.3 按键扫描程序设计165.3.1 实现功能165.3.2 按键扫描流程图165.3.3 按键扫描部分代码175.4 时间更新程序处理函数185.4.1 实现功能185.4.2 工作流程图185.4.3 时间更新程序部分代码195.5 秒表更新程序处理函数235.5.1 时间更新程序部分代码
7、235.5.2 工作流程图245.5.3 函数部分代码255.6 显示切换函数处理程序275.6.1 实现功能275.6.2 工作流程图275.6.3 显示切换函数部分代码28结 论33致 谢34参考文献35附录A36附录B43 - 2 -第 1 章 绪 论1.1 电子时钟研究意义及简介时钟,是我们生活中不可缺少的,随着时代的发展,人们对时钟的要求越来越高,这就要我们对时钟的设计的要求也越来越来高。我们用过的机械时钟,它成本高,内部结构复杂,功能少;而采用集成电路的时钟,它电路较复杂,都不符合这个时代的设计理念。通过研究对比我们选择设计一款基于单片机的简易电子时钟,电子时钟一般由震荡器,分频器
8、,译码器,显示器等部分组成,这些都是数字电路最基本的,应用最广的电路。它成本低,体积小,简单实用,功能强大。这款简易电子时钟使用AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的年、月、日、时、分、秒和设置闹铃,用扬声器来进行定时提醒,用LCD1602来进行显示,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易1.2 数字电子时钟的功能电子时钟主要是利用电子技术将时钟电子化,数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。本简易电子时钟设计功能主要为:1.年月日时分秒显示及
9、校对功能,24小时制。2.具有闹铃功能。3.具有秒表功能。第 2 章 基于单片机的数字电子时钟的设计方案选择2.1 主控制器2.1.1 采用数字逻辑芯片本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。各个状态保持或转移的条件依赖于键盘控制信号。由于键盘控制信号繁多,系统的逻辑状态以及相互转移更是复杂,用纯粹的数字电路或小规模的可编程逻辑电路实现该系统有一定的困难,需要用中大规模的可编程逻辑电路。这样,系统的成本就会急剧上升相对于方案二。因此,本设计并未采用这种方案。2.1.2 采用单片机作为整个控制系统的核心由于单片机具有体积小、成本低、可靠性高、抗干扰能力强、应用灵活、开发效率
10、高、易于被产品化等优点,其具有很强的面向控制的能力,自70年代以来,在很多领域得到广泛的应用。单片机有8位,如51系列;有16位的如98系列;还有32位的,如当前市场比较热门的ARM单片机。单片机比较容易实现系统的智能化控制,而且方便,经济。鉴于市场上常见的51系列8位单片机的售价比较低廉,技术成熟,对于我们的系统在控制上完全能够胜任。我们的设计采用AT89C51型单片机。本系统的主控制器采用AT89C51单片机作为整个控制系统的核心2.2 时钟控制方案比较方案一 使用专用时钟芯片。使用微控制器控制专用时钟芯片实现计时控制,这种方案有着计时精度高、控制简单的优点,而且更易于实现日期/时间显示、
11、定时烹调等计时扩展功能。方案二 采用小规模集成元件定时此方案主要使用计数器/分频器。该方法价格便宜,但是接线复杂,设计也比较困难,对时序要求比较高。同时该方案功能单一,也无法实现复杂功能,可扩展性差。也不能实现一些人性化的界面设计方案三 利用MCU的内部定时器软件现实时钟功能。鉴于本系统采用AT89C51单片机作为整个控制系统的核心,充分利用单片机内部的时钟电路,进行定时控制,从而减少电路设计的复杂度,而且能够减少整套系统的成本。另外,单片机能够实现复杂功能,充分利用单片机扩展灵活特性,通过设计软件,能够设计出友好的人机界面接口和性能。况且单片机价格也比较便宜,性价比很高。本系统时钟控制部分我
12、们采用了方案三,从而充分体现出高性价比。2.3 键盘显示方案比较方案一 采用并行口扩展芯片扩展并行口的方法来设计键盘显示系统。采用键盘显示专用控制器8279显示时钟、火力、倒计时等等功能,而用LED显示各种工作状态的指示信号。这种方法键盘控制简单,但8279只能显示数字信息,显示能力有限,不灵活。如果采用这种方法,为了表达更多的信息,就必需使用许多LED来引导用户进行操作。方案二 中文字符显示和端口键盘扫描采用LCD液晶字符显示。字符显示具有强大的信息表达能力,采用这种显示方法只需少量的键盘加上软件配合,就可以实现多种用户功能控制和选择,目前市场上LCD1602系列的液晶显示模块技术比较成熟,
13、这是一种能够显示2行,每行16个字符的液晶显示模块。而少量的键盘,使用软件扫描方法将会比使用8279经济许多,而且控制起来也不为了实现更多的功能而又减少成本。我们采用了方案二作为本系统的键盘显示。综上所述,我们的总体设计思想是硬件尽量简单,用软件实现更多的功能,这样就可以用比较低的成本来实现这个系统 。本系统采用AT89C51作为主控部分,LCD1602液晶作为显示部分,键盘使用软件扫描方法,使用一个蜂鸣器作为声音提示部分第 3 章 系统功能实现总体设计思路3.1 系统器件介绍3.1.1 AT89C51单片机的结构AT89C51单片机是美国Atmel公司生产低电压,高性能CMOS 8位单片机,
14、片内含4k bytes的可反复擦写的只读程序存储器(EPROM)和128 bytes的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元,功能强大。AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。图3-1为AT89C51单片机的基本组成功能方块图。有图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。下面介绍几个主要部分。外时钟源外部事件数定时器/计数
15、器2*16数据存储器256B RAM程序存储器4KB ROM振荡器和时序OSCAT89C51可编程全双工串行口可编程I/O64kb总线扩展控制器闪中断外中断 控制 并行口 串行通信图3-1 AT89C51 功能方块图3.1.1.1. 中央处理器(CPU)中央处理器是单片机中最核心的部分,是单片机的大脑和心脏,主要完成运算和控制功能。AT89C51的CPU是一个字长为8位的中央处理单元,即它对数据的处理是按字节为单位进行的。3.1.1.2. 内部数据存储器(内部RAM)AT89C51 中共有256个RAM单元,但其中能作为寄存器供用户使用的仅有前面128个,后128个被专用寄存器占用。3.1.1
16、.3. 内部程序存储器(内部ROM)AT89C51 共有4 KB掩膜ROM,用于存放程序、原始数据等3.1.1.4. 定时器/计数器AT89C51 共有2 个16 位的定时器/计数器,可以实现定时和计数功能。3.1.1.5. 并行I/O口AT89C51 共有4 个8 位的I/O口(P0、P1、P2、P3口),可以实现数据的并行输入、输出。3.1.1.6. 串行口AT89C51有1 个全双工的可编程串行口,以实现单片机和其他设备之间的串行数据传送。3.1.1.7. 时钟电路AT89C51 单片机内部有时钟电路,但是晶振和微调电容需要外接。时钟电路为单片机产生时钟脉冲序列3.1.2 LCD1602
17、液晶的介绍3.1.2.1. LCD1602特征及应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中3.1.2.2. LCD1602指令集1602通过D0D7的8位数据端传输数据和指令。显示模式设置: (初始化)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
18、=0 当写入一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。3.1.2.3. LCD1602管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写
19、信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。3.2 数字时钟的总体设计此设计原理框图如下图3-2所示,此电路包括以下三个部分:单片机,键盘,闹铃电路。采用AT89C51芯片和LCD1602等来实现电子时钟的功能。LCD1602显示键盘51单片机闹铃电路独立键盘独立键盘图3-2总体设计图3.3 数字时钟的功能电子时钟主要是利用电子技术将时钟电子化,数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。本简易电子时钟设计功能主要为:1.年月日时分秒显示及校对功能,
20、24小时制。2.具有闹铃功能。3.具有秒表功能。第 4 章 基于单片机的数字电子钟系统硬件设计该数字电子时钟工作原理是用一片AT89C51单片机通过编程去控制LCD1602实现的。通过2个开关控制来进行时间的调节以及秒表功能,P2.0(key1)口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显示模式时,按此键可以选中相应的需要调整的位。当系统处于时间显示模式时,P2.1(key2)口控制按键,按此键对相应的选中位进行加,当系统处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。其工作流程:1.
21、年月日时分秒显示。通电后LCD自动显示C语言程序设置好的默认时间2.闹钟显示和设定。通电后,A的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。3.秒表显示以及启动和暂停以及清零。LCD处于正常显示时间模式下时按下key1释放后可以进入秒表模式,前3次按下key2的功能依次为启动停止清零,每按3次key2为一个轮回。4.1 时钟电路模块下图所示为时钟电路原理图,在AT89C51芯片内部有一个高增益反相放大器,其输出端为引脚XTAL2,输入为芯片引脚XTAL1。而在芯片外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,构成一个稳定的自激振荡电路,电路产生的振荡脉冲经过
22、触发器进行十二分频之后,便成为单片机的时钟信号。图4-1时钟电路模块4.2 复位电路模块下图所示为复位电路原理图,在单片机的实际应用系统中,除单片机本身需复位以外,外部扩展的I/O接口电路等也需要一个复位,因此需要一个系统的同步复位信号,即单片机复位后,CPU开始工作,外部的电路一定要复位好,以保证CPU有效地对外部电路进行初始化编程。单片机复位的条件是:必须使RST/VPD 或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。电路为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐降低。只要保证RST为高电平时间大于
23、两个机器周期,就能正常复位。图4-2复位电路模块4.3 LCD1602显示电路模块下图所示为LCD1602显示模块电路原理图图4-3显示电路模块4.4 按键电路模块下图所示为独立按键模块电路原理图,根据此电子时钟功能要求,需要设置以下两个功能键:工作模式键(key1),模式辅助键(key2)。按照键盘与CPU的连接方式可分为独立键盘和矩阵键盘。独立式键盘是各个按键相互独立,每个按键占用一个I/O口,外加上拉电阻,每个I/O口上的按键不会影响到其他I/O口的按键工作状态。独立式键盘电路配置灵活,软件结构简单,所以本设计采用独立式键盘。图4-4按键电路模块4.5 闹铃电路模块下图所示为闹铃模块电路
24、原理图,闹铃模式时,设定好闹铃的时间,闹铃的时间有时和分,当设定好的闹铃时间与系统的当前时间的时和分相等时,系统给P2.2端口送低交替的高低电平,蜂鸣器发出一定频率报警声,一分钟后报警声停止,如果这一分钟内有按键按下则报警声也停止。图4-5闹铃电路模块4.6 系统硬件电路图下图所示系统电路原理图, 该数字电子时钟工作原理是用一片AT89C51单片机通过编程去控制LCD1602实现的。通过2个开关控制来进行时间的调节以及秒表功能,P2.0(key1)口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显
25、示模式时,按此键可以选中相应的需要调整的位。当系统处于时间显示模式时,P2.1(key2)口控制按键,按此键对相应的选中位进行加,当系统处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。其工作流程:1.年月日时分秒显示。通电后LCD自动显示C语言程序设置好的默认时间2.闹钟显示和设定。通电后,A的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。3.秒表显示以及启动和暂停以及清零。处于正常显示时间模式下时按下key1释放后可以进入秒表模式,前3次按下key2的功能依次为启动停止清零,每按3次key2为一个轮回。图4-6硬件接线图第 5 章 基于单片机的数字电子钟系统软件设
26、计5.1 系统软件设计系统软件包含四个部分:主程序,定时器扫描程序,按键扫描程序,按键处理程序;通过这四个部分可以实现数字电子钟的功能设计。5.2 主程序设计程序设计主要是通过单片机内部TIMER0和TIMER1产生系统时钟信号,经过单片机的运算分别得到时间的年月日时分秒和秒表的时分秒毫秒,单片机在主程序中循环扫描按键端口,根据返回的键值分别将这些数据传给LCD1602对应显示出来。5.2.1 实现功能程序实现的功能是:正常显示年月日和时分秒以及闹钟的时分。若单片机检测到key1第一次按下并释放则LCD切换到显示秒表模式00:00:00:00,第二次按下key2并释放则返回到时钟显示模式。在时
27、钟正常显示模式下若前5按下key2按键并释放则一次选中闹钟的时分和时钟的分时年月日,选中位会出现光标闪烁并且时钟不自动走动,第6次按下key2并释放之后则正常显示时钟,6次为一个循环。在光标闪烁的时候若按下key1并且释放则可以对相应位进行校正。若在秒表显示模式下第一次按下key2并释放则启动秒表计时,第二次按下key2释放后则暂停秒表,第三次按下key2释放后则秒表清零,三次为一个循环。5.2.2 功能流程图通过以上分析可得图5-1系统工作流程图:图5-15.3 按键扫描程序设计5.3.1 实现功能当系统检测到有按键按下时返回相应的非零的键值,否则返回零。5.3.2 按键扫描流程图图5-2按
28、键扫描流程图5.3.3 按键扫描部分代码unsigned char key scan(void)static unsigned char value;/键值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;
29、do_key = 0;key_scan_step = 1;if(key_scan_step=1)&(KEY & 0x03) = 0x03)key_scan_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-3时间更新程
30、序流程图5.4.3 时间更新程序部分代码void update_time(void)if(t0=20)t0=0;time.second+;if(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
31、(time.month12)time.month=1;time.year+;if(time.year 2060)time.year = 2012;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)
32、 time.day=1;time.month+;if(time.month12)time.month=1;time.year+;if(time.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
33、.day%10+0,WDATA);write_lcd(0x8B,WCMD);write_lcd(time.day/10+0,WDATA);write_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_l
34、cd(0x85,WCMD);write_lcd(time.year%1000%100/10)+0,WDATA);write_lcd(0x86,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,W
35、DATA);write_lcd(0xC3,WCMD);write_lcd(time.minute/10+0,WDATA);if(model_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-4秒表更新程序流程图5.5.3 函数部分代码void update_stop_wa
36、tch(void)if(sw_t1=1)sw_t1=0;time.sw_msecond+;if(time.sw_msecond99)time.sw_msecond=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%1
37、0+0,WDATA);write_lcd(0xC2,WCMD);write_lcd(time.sw_hour/10+0,WDATA);if(model_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);wr
38、ite_lcd(time.sw_second/10+0,WDATA);if(model_flag = 1)write_lcd(0xCC,WCMD);write_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 工作流程图图5-5切换程序流程图5.6.3 显示切换函数部分代码void shift_display(void)if(model_
39、flag = 0 & time_change_flag = 0 & shift_flag =0)shift_flag = 1;dowrite_lcd(0x01,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,
40、WCMD);write_lcd(time.month/10+0,WDATA);write_lcd(0x89,WCMD);write_lcd(time.month%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+