毕业设计(论文)-基于单片机的数字日历时钟的设计.doc_第1页
毕业设计(论文)-基于单片机的数字日历时钟的设计.doc_第2页
毕业设计(论文)-基于单片机的数字日历时钟的设计.doc_第3页
毕业设计(论文)-基于单片机的数字日历时钟的设计.doc_第4页
毕业设计(论文)-基于单片机的数字日历时钟的设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

2010届毕业设计论文 第30 页 共30页1 引言著名数学家华罗庚说过:时间是由分秒积成的,善于利用零星时间的人,才会做出更大的成绩来。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。单片机模块中最常见的是数字钟,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。2 单片机的基本组成与特点单片机也称单片微型计算机,在结构上它采用大规模集成电路技术把微处理器(CPU)和随机存取数据存储器(RAM)、只读程序存储器(ROM)、输入输出电路(I/O口)以及定时计数器、串行通信口(SCI)、时钟电路、脉宽调制电路(PWM)、模拟多路转换器及A/D转换器等电路集成到单独的一块芯片上,构成一个最小的完善的计算机系统。这些电路能在软件的控制下单独、准确、迅速、高效的完成程序设计者事先规定的任务。21 单片机的基本组成单片机是通过内部总线把计算机的各主要部件接为一体,其内部总线包括地址总线、数据总线和控制总线。其中,地址总线的作用是在进行数据交换时提供地址,CPU通过它们将地址输出到存储器或I/O接口;/数据总线的作用是在CPU与存储器或I/O接口之间,或存储器与外设之间交换数据;控制总线包括CPU发出的控制信号线和外部送入CPU的应答信号线等。22 单片机的特点1种类多,型号全。很多单片机厂家逐年扩大适应各种需要,有针对性地推出一系列型号产品,使系统开发工程师有很大的选择余地。大部分产品有较好的兼容性,保证了已开发产品能顺利移植,较容易地使产品进行升级换代。2高集成度,体积小,可靠性强单片机将各功能部件集成在一块晶体芯片上,集成度很高,体积自然也是最小的。芯片本身是按工业测控环境要求设计的,内部布线很短,其抗工业噪音性能优于一般通用的CPU。单片机程序指令,常数及表格等固化在ROM中不易破坏,许多信号通道均在一个芯片内,故可靠性高3控制功能强为了满足对对象的控制要求,单片机的指令系统均有极丰富的条件:分支转移能力,I/O口的逻辑操作及位处理能力,非常适用于专门的控制功能。4低电压,低功耗,便于生产。现在新型单片机的功耗越来越小,供电电压从5V降低到了3.2V,甚至1V,工作电流从mA降到A级,gz2频率从十几兆可编程到几十千赫兹。特别是很多单片机都设置了多种工作方式,这些工作方式包括等待,暂停,睡眠,空闲,节电等。5易扩展。单片机片内具有计算机正常运行所必需的部件。芯片外部有许多供扩展用的三总线及并行、串行输入/输出管脚,很容易构成各种规模的计算机应用系统。把原本是外围接口芯片的功能集成到一块芯片内,在一片芯片中构造了一个完整的功能强大的微处理应用系统。6优异的性价比。单片机的性能极高。为了提高速度和运行效率,单片机已开始使用RISC流水线和DSP等技术。单片机的寻址能力也已突破64KB的限制,有的已可达到1MB和16MB,片内的ROM容量可达62MB,RAM容量则可达2MB。由于单片机的广泛使用,因而销量极大,各大公司的商业竞争更使其价格十分低廉,其性能价格比极高。7具有C语言开发环境,友好的人机互动环境。大多数单片机都提供基于C语言开发平台,并提供大量的函数供使用,这使产品的开发周期、代码可读性、可移植性都大为提高。23 单片机的分类单片机作为计算机发展的一个重要领域,应用一个较科学的分类方法。根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。2.3.1 通用型/专用型这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。2.3.2 总线型/非总线型这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。2.3.3 控制型/家电型这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工业控用。3 单片机的应用分类单片机具有体积小,重量轻、性价比高、开发性强、可靠性高和使用灵活扥特点,器应用范围非常广泛。现在单片机已经被广泛应用到了工业、商业、国防和日常生活等人类活动的各个领域3.1 工业自动化控制在工业控制系统的设计中,很多地方都可以看到单片机的身影。设计者可以根据自己的实际需要开发一个单片机控制系统。这种方式具有成本低、设计灵活、使用方便的特点,适用于工业产品的开发。另外,在化工、建筑、也冶金等各种工业领域都要用单片机进行控制。3.2 智能化仪表采用单片机的智能化仪表不但可以大大提升仪表的档次,而且可以实现采集数据处理和存储、故障诊断、联网集控制功能。3.3 家用电器在家用电器中单片使用非常普遍,常见的有洗衣机、电冰箱、空调、音响、电视机、手机扥。现在,在一些高级玩具中也配有单片机。3.4 办公自动化设备现代办公室使用的大量通信和办公设备多数嵌入了单片机。如打印机、复印机、传真机、绘图机、考勤机、电话以及通用计算机中的键盘译码、磁盘驱动等。3.5 商业营销设备在商业营销系统中已广泛使用的电子称、收款机、条形码阅读器、IC卡刷卡机、出租车计价器以及仓储安全监测系统、商场保安系统、空气调节系统、冷冻保险系统等都采用了单片机控制。3.6 汽车电子产品现代汽车的集中显示系统、动力监测控制系统、自动驾驶系统、通信系统和运行监视器(黑匣子)等都离不开单片机。综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。4 数字日历时钟的功能及总体方案介绍4.1 数字日历时钟的功能介绍数字日历时钟采用液晶双行显示,第一行显示年月日,第二行显示时间,具有闰年补偿功能,24小时计时法,可以通过键盘设置时间及日期。通过KEY1进入设置状态,按一下设置秒,按下设置分,按三下设置时,按四下设置日,按五下设置月,按六下设置年,按七下退出设置状态,时钟继续运行;KEY2为“+”健,每按一下则相对应的加一;KEY3为“-”健,每按一下则相对应的减一;RST为复位键,该键使得程序重新开始运行。4.2 数字日历时钟总体方案介绍图1AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可解决许多较复杂系统控制问题,日历时钟并不是特别复杂,采用现有的I/O口便可完成,所以本设计的基本结构如图1:4.2.1 计时方案利用AT89C52单片机内部的定时/计数器进行中断定时,由外部的石英晶体振荡器提供12MHZ的振荡频率,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。4.2.2 键盘方案AT89C52的P3.0口接KEY1,P3.1口接KEY2,P3.2口接KEY3,这三个键的公共端接地,构成独立式键盘电路。4.2.3 显示方案AT89C52的P0口接1602液晶显示器的D0-D7口,采用的并口通信方式, P3.4口接液晶显示器的使能端,P3.5口接液晶显示器的数据/命令选择端,液晶显示器的端口3与地之间接100K的电位器,以控制显示亮度。这样就构成了显示电路。4.2.4 电源及复位电路电源采用标准的5V电源,可以由USB供电,也可由外部电源适配器供电。复位电路采用上电复位兼手动复位电路,可以方便的使程序回到初始状态。5 数字日历时钟的工作原理5.1 实现时钟计数的基本方法利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现时钟计数。采用12MHZ的晶振,一个机器周期是12个振荡周期,一个振荡周期为1/12MHZ。所以每个机器周期的时间T=1us,把定时器设为工作方式0,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒, 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒),从秒到分和从分到时的计时是通过累加和数值比较实现。5.2 液晶显示的基本方法液晶显示采用长沙太阳人电子有限公司的SMC1602A的液晶显示器,其显示容量为162个字符。接口信号说明见表1表1 接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择短(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7DOData I/O15BLA背光源正极8D1Data I/O16BLK背光源负极其基本操作时序:1读状态:输入:RS=L,RW=H,E=H输出:D0-D7=状态字2写指令:输入:RS=L,RW=L, D0-D7=指令码,E=高脉冲输出:无3读数据:输入:RS=H,RW=H,E=H输出:D0-D7=数据4写数据:输入:RS=H,RW=L, D0-D7=数据,E=高脉冲输出:D0-D7=状态字初始化设置:显示模式设置见表2表2 显示模式设置指令码功能00111000设置162显示,57点阵,8为数据接口显示开/关及光标设置见表3表3 显示开/关及光标设置指令码00001DCBD=1 开显示; D=0 关显示C=1 显示光标; C=0不显示光标B=1 光标闪烁; B=0 光标不闪烁000001NSN=1 但读货写一个字符后地址指针加一,且光标加一N=0 当读或写一个字符后地址指针减一,且光标减一 S 当写一个字符,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0 当写一个字符,整屏显示不移动数据指针设置见表4表4 数据指针设置指令码功能80H+地址码(0-27H,40H-67H)设置数据地址指针其他设置见表5表5指令码功能01H显示清屏:1.数据指针清零2.所有显示清零02H显示回车:1.数据指针清零初始化的过程设置显示模式为162显示,57点阵,8位数据接口:指令码=0x38开显示,设置不显示光标,光标不闪烁:指令码=0x0c设置当读或写一个字符后地址指针加一,且光标加一:指令码=0x06数据指针清零,显示清屏:指令码=0x01将数据指针设置为80H:指令码=0x80写指令的过程设置为命令状态:RS=0使能信号低:E=0将指令码输入到P0口延时5ms使能型号高:E=1延时5ms使能型号高:E=0写数据的过程设置为数据状态:RS=1使能信号低:E=0将数据输入到P0口延时5ms使能型号高:E=1延时5ms使能型号高:E=0通过以上步骤实现对1602液晶显示器显示功能。5.3 闰年补偿功能实现的基本方法闰年补偿是日历中必不可少的,每隔四年2月份有29天,根据这一规律,只要能被4整除且没有余数的年就是闰年,实现这一判断有两种方法:1.用年份除4取模,模为0表是闰年,不为0则不是闰年;2.用年份与3位与,如果与下的结果为0为闰年,不为0则不是闰年,我选择的是第二种方法,这种方法可以减少CPU的运算强度。5.4 键盘功能实现的基本方法键盘模块由三个按键组成独立式键盘,三个按键的常开端接单片机的I/O口,公共端接地,只要按下按键对单片机输入低电平信号,由单片机内部的程序实现消抖,其消抖的步骤如下:1检测I/O口是否有低电平信号,2延时5ms,再次检测I/O口是否有低电平信号,3如确实有低电平信号,向单片机发出按键确认信号,如果没有,则跳出消抖程序。5.5 复位功能实现的基本方法本设计采用上电复位兼手动复位,由一电阻串联开关后并联一个电容,再和一电阻串联,单片机接通电原,电容进入充电状态,给RST一个高电压,就进入上电复位状态。在单片机运行中,当按钮按下后,由两电阻组成的串联分压电路,使RST端获得足够时间的阀值以上电压,单片机即进行复位。在单片机复位后,松开按钮,单片机即可开始正常运行程序。6 数字液晶日历时钟的硬件电路6.1 数字液晶日历时钟原理图在硬件电路中,采用的是AT89C52单片机,AT89C52为40 脚双列直插封装的8 位通用微处理器,40个端口大致可分为电源、时钟、I/O口、数据总线、地址总线、控制总线几个部分。他们的功能如下, 电源:Ucc(40端子) 芯片工作电源,+5VUss (20端子) 电源接地端时钟:XTAL1(19端子)接外部石英晶体和微调电容的一端,也是MCS-51内部振荡电路反相放大器的输入端。在采用外部时钟时,该端子应接地。XTAL2(18端子)接外部石英晶体和微调电容的另一端,也是内部振荡电路反相放大器的输入端。振荡电路的频率就是外部石英晶体的固有频率。当采用外部时钟电路时,该端子输入外部时钟脉冲,用示波器观察此端子是否有脉冲信号输出,即可判断MCS-51的振荡电路是否正常工作。控制总线:ALE/PROG(30端子)地址锁存允许信号。在MCS-51上电正常工作后,该端子不断以晶体振荡器1/6的频率向外输出正脉冲信号。当MCS-51访问片外存储器,ALE用来锁存扩展地址的低8位(P0口)的地址信号,在不访问外部存储器ALE也以振荡器的1/6的频率固定输出正脉冲,可用作为外输出的时钟信号或用于定时。同样,可用示波器检查ALE端子是否有脉冲信号输出来判断MCS-51芯片的好坏。在MCS-51访问外部数据存储器时,将少一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LSTTL。在8751单片机EPROM编程期间。此端子接编程脉冲,实现其第二功能PROG.PSEN(29端子)外部程序存储器读选通信号。在访问外部程序存储器时,此端子定时输出负脉冲作为读取外部存储器的选通信号。在从外部程序存储器取命令(或数据)期间,RSEN在每个机器周期(12个脉冲时期)内两次有效。PSEN可以驱动8个LSTTL。RST/Upd(9端子) 复位信号输入端。在该端子上保持两个机器周期的高电平时,可对MCS-51实现复位操作。该端子的第二功能Upd是作为备用电源的输入端,在Ucc掉电或电压降至低电平规定时,由Upd向外部数据存储器提供电源,以保持存放其中的数据。EA/Upp(31端子)外部程序存储器地址允许输入端。在MCS-51内、外程序存储器都具备时,EA为高电平,从内部程序存储器开始访问,EA为低电平时,则跳过内部程序存储器,从外部存储器开始访问。并行I/O:P0口(32-39端子)它除可以作为一般I/O外,还可作为MCS-51单片机的8位准双向数据总线和低8位地址总线。在MCS-51访问外部存储器时,它分别先输出要访问存储单元的低8位地址,然后作为可进行输入/输出的数据总线。所谓“准双向”,是指P0口在做输入口使用时应先进行写“1”操作。P0口中每位能驱动8个LSTTL负载。P1口(1-8端子)它是一个带内部上拉电阻8位准双向I/O端子。P1口的每位能驱动4个LSTTL负载。P2口(21-28端子)它是一个带内部上拉电阻的8位准双向口。在访问外部存储器时,它输出高8位地址,和P0口输出的低8位地址共同作为16位地址总线。P2口的每位能驱动4个LSTTL负载。P3口(10-17端子)P3口是一个内部上拉电阻的准双向I/O口,它的每位能驱动LSTT负载。信号端子的第二功能:由于工艺及标准化等原因,芯片的端子数目是有限制的。例如MCS-51系列把芯片引线端子数目限定为40个,但单片机为实现其功能所需要的数目却远远超过此数,因此就出现要与可能的矛盾。如何解决这个矛盾?兼职是唯一可行的办法,即给一些信号端子赋予双重功能。如果把前述信号定义为端子第一功能的话,则根据需要在定义的信号就是它的第二功能。下面介绍某些信号端子的第二功能,P3的8条口线都定义有第二功能见表6:表6 P3的8条口线都定义口线第二功能信号名称口线第二功能信号名称P3.0RXD串行数据接收P3.4T0定时器/计数器0计数输入P3.1TXD串行数据发送P3.5T1定时器/计数器1计数输入P3.2INT0外部中断0申请P3.6WR外部RAM写选通P3.3INT1外部中断1申请P3.7RD外部RAM读选通根据上述端口说明,设计数字液晶日历时钟原理图见附录26.2 数字液晶日历时钟PCB图图3 数字液晶日历时钟PCB图数字液晶日历时钟PCB图见图36.3 数字液晶日历时钟元件清单数字液晶日历时钟元件清单见表7表7 元件清单元件名称规格型号数量(个)单片机AT89C521液晶显示器SMC 1602A1上拉排阻10K1晶振12MHz1电容33pF2电容10F1按键BUTTON5电阻10K1电阻1K1电阻1001USB母插座1电源适配器DC5V1连接线USB导线16.4 数字液晶日历时钟实物(用面包板字制作的实物)数字液晶日历时钟实物见图4图4面包板制作的实物图7 数字液晶日历时钟的软件设计及基于Proteus的软件仿真7.1 基于单片机的日历时钟源程序基于单片机的日历时钟源程序见附录1。7.2 基于Proteus的软件仿真基于Proteus的软件仿真图见图5:图5基于Proteus的软件仿真图8 数字日历时钟的使用说明及调试过程8.1 使用说明时间显示:电子钟上电后,电子钟显示2010-05-0100:00:00并开始运行,如下图6所示:图6时间调整:按一次SET键,光标在秒位置闪烁,如图7所示这时可以设置秒,按键,数字依次加一,按键,数字依次减一,按两次SET键,光标在分位置闪烁,这时可以设置秒,按键,数字依次加一,按键,数字依次减一,时、日、月、年设置方法与分秒相同,当按第七次SET键,此时时钟又恢复正常运行。图78.2 调试过程将电路按照原理图在面包板上焊接好,将烧好程序的单片机插入40脚插座,接通电源,此时数字时钟显示初始日期,将日期及时间设置好后,其正常运行,按下复位键,没有任何反应,断开电源,查看硬件电路,发现在面包板上单片机I/O口语复位键的那根线没有连接,将其焊接好以后重新上调试,这时能正常运行,按下复位键后恢复到初始状态。8.3 误差分析在调试运行过程中,在所有参数正确的情况下,我的结果仍出现运行缓慢情况。产生误差的主要原因是我们用软件计时,计时1秒是采用定时器的中断服务程序。当电子钟运行1秒,执行中断程序需要一定时间,这个时间就是所产生的误差,这个误差是不可避免的。同时,单片机工作也会受到环境的影响,比如温度、湿度,以及其它电子设备的干扰。因此,应该让电子钟工作在适度温度、干燥和电子干扰较少的环境下,还有一种方法就是采用实时时钟芯片,这样可以使误差降低到最少。结 论通过两个月的学习和调试过程,终于完成了单片机模块数字日历时钟的工作。并且使数字日历时钟能够顺利运行,完成了预期的目标。从单片机数字日历时钟的设计过程中也找到了一些单片机开发的规律:先了解所有元件的具体内容,从而画出其电路图,使数字钟从简易变成多功能的方式,虽没有做多功能数字钟,却知晓了其方法。从而让我踏入了单片机应用领域的第一步。然而在调试过程中有也有许多的不足之处:例如编写调试程序有点不足。希望能够在以后的不断深入学习中能够弥补自己的不足之处。同时更是朝着单片机应用领域迈进。致 谢在此结束之际,我要感谢我在学院求学期间里,每一位都曾经授予我知识和做人道理的老师,在这里我由衷的说一句:老师,你们辛苦啦!在这即将毕业的时候,我的心里有着不知是什么样的心情,大学三年的寒窗苦读在这一瞬之间也宣告结束,即将真正走进社会大家庭的我是老师和我的亲人在教诲和告诫我,使我的路不是那么的曲折、迷离,在此我要再次感谢我的恩师和我的亲人,非常的谢谢你们,一直对我的教导! 参 考 文 献1 汤竞难,沈国琴.51单片机C语言开发与实例.北京:人民邮电出版社,20082 耿长清.单片机应用技术.北京:化学工业出版社,20023 宋戈,黄鹤松,员玉良,蒋海峰.51单片应用开发范例大全.北京:人民邮电出版社20104 周润景,张丽娜,丁莉.基于PROTEUS的电路设计及单片机设计与仿真(第2版).北京:北京航天航空大学出版社,20105 郑锋,王巧芝,陈绘兵,王鼎嫒.51单片机应用系统典型模块开发大全.北京:中国铁道出版社,20106 赵广林.Protel99SE电路设计与制版.北京:电子工业出版社,20057 张毅刚,修林成,胡振江.MCS-51单片机应用设计M.哈尔滨:哈尔滨工业大学出版社,19908 李华.MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版社,19939 李光飞.单片机课程设计实例指导M.北京:北京航空航天大学出版社,2004附录A:基于单片机的日历时钟源程序#include#define uchar unsigned char #define uint unsigned intsbit key1=P30;/*定义设置键*/sbit key2=P31;/*定义UP键*/sbit key3=P32;/*定义DOWN键*/sbit lcden=P34;/*定义液晶显示器使能端*/sbit rs=P35;/*定义液晶显示器数据与指令使能端*/uchar count,key1num;uint runnian,nian1,nian2;char miao,shi,fen,ri,yue;uchar code table= 2010-05-23;uchar code table1= 00:00:00;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/*写指令程序*/rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/*写数据程序*/rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void init()/*初始化程序*/uchar num;lcden=0;miao=0;fen=0;shi=0;ri=23;yue=05;nian1=10;nian2=20;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num13;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)write_date(table1num);delay(5);TMOD=0x01;/*定时器0,16位工作方式*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;/*打开定时器0中断*/TR0=1;/*启动定时器*/void write_nyr(uchar add,uchar date)/*写年月日程序*/uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void write_sfm(uchar add,uchar date)/*写时分秒程序*/uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void panduannian()/*判断闰年程序*/uint a;a=nian1&3;if(a=0)runnian=1;elserunnian=0;void keyscan()/*键盘设置程序*/if(key1=0)delay(5);if(key1=0)/*键盘1消抖程序*/key1num+;while(!key1);if(key1num=1)TR0=0;write_com(0x80+0x40+10);write_com(0x0f);if(key1num=2)write_com(0x80+0x40+7);if(key1num=3)write_com(0x80+0x40+4);if(key1num=4)write_com(0x80+11);if(key1num=5)write_com(0x80+8);if(key1num=6)write_com(0x80+5);if(key1num=7)key1num=0;write_com(0x0c);TR0=1;if(key1num!=0)if(key2=0)delay(5);if(key2=0)/*键盘2消抖程序*/while(!key2);if(key1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(key1num=2)fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(key1num=3)shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(key1num=4)ri+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)if(ri=32)ri=1;if(yue=4|yue=6|yue=9|yue=11)if(ri=31)ri=1;if(yue=2&runnian=1&ri=30)ri=1;if(yue=2&runnian=0&ri=29)ri=1;write_nyr(11,ri);write_com(0x80+11);if(key1num=5)yue+;if(yue=13)yue=1;write_nyr(8,yue);write_com(0x80+8);if(key1num=6)nian1+;if(nian1=100)nian1=0;nian2+;if(nian2=100)nian2=0;write_nyr(3,nian2);write_com(0x80+3);write_nyr(5,nian1);write_com(0x80+5);if(key3=0)delay(5);if(key3=0)/*键盘3消抖程序*/while(!key3);if(key1num=1)miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(key1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(key1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);if(key1num=4)ri-;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)if(ri=-1)ri=31;/*对31天的月份进行判断程序*/if(yue=4|yue=6|yue=9|yue=11)if(ri=-1)ri=30;/*对30天的月份进行判断程序*/if(yue=2&runnian=1&ri=-1

温馨提示

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

评论

0/150

提交评论