基于单片机内部定时计数器的数字钟设计
基于单片机的数字钟毕业设计(附程序全)

基于单片机的数字钟毕业设计(附程序全) 电子时钟设计随着现代人类生活节奏的加快,人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。
数码管显示的时间简单明了而且读数快、时间准确性更高~数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。
数字钟的精度、稳定度远远超过老式机械钟。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,并且由单片机的定时器计数。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。
关键词:数字钟;单片机;数码管;时间;准确性1目录第一章绪论1. 数字电子钟的意义和应用…………………………………………………………………… 3 第二章整体设计方案2.1 单片机的选择…………………………………………………………………………… 3 2.2 单片机的基本结构……………………………………………………………………… 5 第三章数字钟的硬件设计3.1 最小系统设计…………………………………………………………………………… 9 3.2 LED显示电路…………………………………………………………………………… 12 3.3 键盘控制电路…………………………………………………………………………… 14 第四章数字钟的软件设计4.1 系统软件设计流程图…………………………………………………………………… 15 4.2 数字电子钟的原理图…………………………………………………………………… 18 4.3 主程序…………………………………………………………………………………… 19 4.4 时钟设置子程序………………………………………………………………………… 20 4.5 定时器中断子程序……………………………………………………………………… 20 4.6 LED显示子程序………………………………………………………………………… 21 4.7 按键控制子程序………………………………………………………………………… 23 第五章系统仿真5.1 PROTUES软件介绍................................................................................. 24 5.2 电子钟系统PROTUES仿真........................................................................ 24 结束语. (2)5 参考文献 (26)2第一章绪论1.数字电子钟的意义和应用数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
单片机课堂展示 基于AT89C51单片机的数字时钟设计

CJNE A,#24H,DISH1 MOV HOUR,#00H DISH1:AJMP DISH ;转至时 显示缓冲区设置 KK2:JNB KEY3,KK3 ;判断 KEY3是否按下 JB KEY3,$ ;等待KEY3键释 放 MOV A,R3 RL A MOV DPTR,#KJMP2 JMP @A+DPTR KJMP2:AJMP DISCLK AJMP SDEC AJMP MDEC AJMP HDEC SDEC:MOV A,#9AH ;秒减1 CLR C SUBB A,#01H ADD A,SECOND DA A
3、程序代码
MOV TH0,#0B1H;定时器T0装入 初值20ms MOV TL0,#0E0H SETB ET0 ;T0中断允许 SETB EA ;总中断允许 MOV R2,#50 ;T0中断为1s SETB TR0 ;启动T0 MOV SECOND,#00H MOV MINUTE,#00H MOV HOUR,#08H ;初始化时间8 点00分00秒 MOV A,HOUR 时间值送显示缓 冲区79H~7EH ANL A,#0F0H SWAP A MOV 79H,A
二、设计背景
十一世纪的今天,最具代表性的计时产品就是电子万年历, 它是近代世界钟表业界的第三次革命。 第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率 源使钟表的走时差从分级缩小到秒级,代表性的产品就是带 有摆或摆轮游丝的机械钟或表。 第二次革命是石英晶体振荡器的应用,发明了走时精度更 高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。 第三次革命就是单片机数码计时技术的应用(电子万年 历),使计时产品的走时日差从分级缩小到1/600万秒,从原 有传统指针计时的方式发展为人们日常更为熟悉的夜光数字 显示方式,直观明了,并增加了全自动日期、星期、温度以 及其他日常附属信息的显示功能,它更符合消费者的生活需 求!
基于单片机的多功能数字钟的设计

西南科技大学本科生毕业论文I 基于单片机的多功能数字钟的设计摘要:本设计论文介绍了用AT89C2051单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序。
此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。
它的计时周期为12小时,显示满刻度为12时59分59秒99毫秒,另外应有校时功能。
电路由时钟脉冲发生器、时钟计数器、译码驱动电路和数字显示电路以及时间调整电路组成。
用晶体振荡器产生时间标准信号,这里采用石英晶体振荡器。
根据60秒为1分、60分为1小时、24小时为1天的计数周期,分别组成两个60进制(秒、分)、一个12进制(时)的计数器。
构成秒、分、时的计数,实现计时的功能。
显示器件选用LED七段数码管。
在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。
针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。
关键词:单片机;AT89C2051;数字钟;计时摘要时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
本设计论文介绍了用AT89C2051单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序。
此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。
它的计时周期为12小时,显示满刻度为12时59分59秒99毫秒,另外应有校时功能。
基于单片机的定时闹钟设计.

目录目录 (I)一设计题目 (1)二设计要求 (1)三作用与目的 (1)四设备及软件 (2)1.AT89C51单片机 (2)2. Proteus仿真软件 (2)3.Keil软件 (3)五系统设计方案 (4)1 电路的总体原理框图 (4)2 工作原理 (5)六系统硬件设计 (5)1.系统总体设计 (5)2.系统时钟电路设计 (6)3.系统复位电路的设计 (6)4.闹钟指示电路设计 (6)5.电子闹钟的显示电路设计 (6)七系统软件设计 (7)1.主模块的设计 (7)2.基本显示模块设计 (8)3. 时间设定模块设计 (9)4. 闹铃功能的实现 (10)八 Proteus软件仿真 (11)1.本次试验的效果图 (12)2.性能及误差分析: (12)九设计中的问题及解决方法 (13)十设计心得 (14)参考文献 (15)致谢 (16)附录1 系统整体结构电路原理图 (17)附录2 程序清单 (18)基于单片机的定时闹钟设计一设计题目基于单片机的定时闹钟二设计要求1、能显示时时-分分-秒秒。
2、能够设定定时时间、修改定时时间。
3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。
三作用与目的以单片机为核心的数字时钟是很有社会意义和社会价值的。
钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等功能数字闹钟通过数字电路实现时、分、秒。
数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
多功能数字钟的应用非常普遍。
由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
基于单片机的数字钟毕业设计(附程序全)

基于单片机的数字钟毕业设计(附程序全) 电子时钟设计随着现代人类生活节奏的加快,人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。
数码管显示的时间简单明了而且读数快、时间准确性更高~数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。
数字钟的精度、稳定度远远超过老式机械钟。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,并且由单片机的定时器计数。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。
关键词:数字钟;单片机;数码管;时间;准确性1目录第一章绪论1. 数字电子钟的意义和应用…………………………………………………………………… 3 第二章整体设计方案2.1 单片机的选择…………………………………………………………………………… 3 2.2 单片机的基本结构……………………………………………………………………… 5 第三章数字钟的硬件设计3.1 最小系统设计…………………………………………………………………………… 9 3.2 LED显示电路…………………………………………………………………………… 12 3.3 键盘控制电路…………………………………………………………………………… 14 第四章数字钟的软件设计4.1 系统软件设计流程图…………………………………………………………………… 15 4.2 数字电子钟的原理图…………………………………………………………………… 18 4.3 主程序…………………………………………………………………………………… 19 4.4 时钟设置子程序………………………………………………………………………… 20 4.5 定时器中断子程序……………………………………………………………………… 20 4.6 LED显示子程序………………………………………………………………………… 21 4.7 按键控制子程序………………………………………………………………………… 23 第五章系统仿真5.1 PROTUES软件介绍................................................................................. 24 5.2 电子钟系统PROTUES仿真........................................................................ 24 结束语. (2)5 参考文献 (26)2第一章绪论1.数字电子钟的意义和应用数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
基于单片机的数字钟设计

基于单片机的数字钟设计引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。
尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。
注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。
手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。
所以,要制作一个定时系统。
提醒容易忘记时间的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
基于单片机的定时和控制装置在许多行业有着广泛的应用,数字钟作为其中最基本的一个应用实例,具有结构简单应用广泛的特点。
数字钟中使用了单片机中最为常用的输入输出设备按键开关和数码管;数字钟程序主要应用单片机的定时器和中断实现计时和显示功能。
当今数字种作为一个单元电路被广泛应用于电子表、电子万年历等产品中,带来广泛的经济效益。
目前的单片机产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。
现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流。
目前,单片机正朝着高性能和多品种方向发展,趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
基于单片机控制的智能定时闹钟设计(含完整程序仿真图)

摘要本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。
电子钟设计可采用数字电路实现,也可以采用单片机来完成。
数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。
若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外, AT89C51的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。
设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。
采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。
课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真试验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。
设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。
显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。
基于单片机的定时闹钟设计

定时闹钟的激活机 制
优点: 相比没有激活功能的定时闹钟,设 有激活机制的定时闹钟省去了用户在 不 需要闹铃提示的时候手动去暂停发出 警 报声的定时闹钟的麻烦。
开始
设置闹钟时间
闹钟是否激活? N
Y 闹钟时间= 当前时间? N
Y 蜂鸣器发 出警示声
S4键被 N 按下? Y
结束
图2 闹钟程序流程 图
3 .闹铃响起的条件和停止
1 响起的条件 2 定时闹钟发出警报声需要满足以下两个
条件: 3 系统时间与设定的闹铃时间相等 4 闹铃提示功能被激活,即显示屏上有
“N” 5 的提示信息。 6 闹铃停止的两种方法 7 按一次K4键撤销闹铃提示服务。 8 等待系统时间分位与设定的闹铃时间分
系统仿真电路图
实物图
结束
谢谢观看 !
(2).第二次按K1键, 光标从分位跳到时 位, , 表示当前设置的是闹钟的时位。
(3).当将闹钟的分位和时位均设置完毕 时, 第三次按下K1键, 光标消失, 系统正 常显 示时间和日期等信息。
2 .闹铃的开启
即使系统设有闹铃时间,蜂鸣器也不 一定会在设定时间发出警报声。为避免闹 铃在用户不需要的时候响起,该定时闹钟 系统采用了闹钟激活机制。只有在设置了 闹钟时间并且用户有激活闹铃服务的时候, 蜂鸣器才会在设定时间发出警报声。激活 方式: 按一次K4键。再按一次则会取消。当 闹铃激活时,LCD显示屏上会出现“N”的 提示信息,提示有闹钟提示开启。
图1 实时时钟程序流程 图
图二 1602型LCD的驱动程序流程图
二、 时间和日期的修改
在系统正常运行过程中, 当K1键第一次 被按下时, 关闭定时器(TR0=0), 并且在 时间的秒位出现闪烁的光标, 提示用户现在 更改的是时间的秒位部分。可通过继续按 K1来选择需要调整的其他位, 利用K2进行加 运算, K3进行减运算。直到K1键被第十次按 下的时候, 打开定时器(TR0=1)。系统回 到显示时间和日期的模式下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机内部定时计数器的数字钟设计(带时间、日期调节功能)方跃春(副教授)大学城栏目:世界大学城居民新闻空间栏目:方法库共207篇论文| 附件【数字钟调整日期、时间程序流程图.swf 1.swf clock_2.c】收藏到我的学习空间收藏到我的课堂魔方方跃春(副教授) 发表于2011-5-26 1:54:23 阅读(565)评论(3)流程图链接!/*基于单片机内部定时计数器的数字钟设计1、用单片机内部定时计数器T0进行计时;2、用LCD1062液晶器显示日期、时间;3、具有闰年自动计算功能;4、具有根据年、月、日计算星期功能;5、具有时间、日期调整功能。
Design:长沙民政职业技术学院,方跃春*/#include<reg51.h>#define uchar unsigned char //宏定义#define uint unsigned int //宏定义sbit rs=P3^5; //液晶数据/指令选择端:1-数据,0-指令sbit lcden=P3^4; //液晶使能控制端:1-有效,0-无效sbit shift_key=P3^2;//位置移动键sbit up_key=P3^3;//增加键uchar temp=0;//定义定时器溢出计数变量,每隔50ms 产生1次溢出,temp加1uint year=2011;//定义年变量并赋初值2011年uchar month=05,day=23,week;//定义月、日、星期变量,并赋初值5月23日uchar hour=0,minute=00,second=00;//定义时、分、秒变量,并赋初值12时00分00秒uchar codeweek_string[7][4]={"MON","TUE","WED","THU","FR I","SAT","SUN"};//定义星期英文缩写表uchar datamonth_day[12]={31,0,31,30,31,30,31,31,30,31,30 ,31};//定义每月天数表/*--定时计数器T0及中断初始化函数--*/void init(void){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位初值EA=1;//开总中断ET0=1;//开启定时器0中断EX0=1;//开启外部中断,外部中断用于调整时间 PT0=1;//将定时器0中断设置高优先级,调整时间期不停止计时TR0=1;//启动定时器0}/*----------1ms延时函数----------*/void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=114;j>0;j--);}/*-------LCD1602写指令函数-----*/void LCD1602_write_com(uchar com){rs=0;//rs=0,置指令输入状态P0=com;//输出指令码delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*-------LCD1602写数据函数-----*/void LCD1602_write_dat(uchar dat){rs=1;//rs=1,置数据输入状态P0=dat; //输出待显示字符的字符码(ASCII码)delay(1);//延时1mslcden=1;//lcden=1,使能端有效delay(1);//延时1mslcden=0;//lcden=0,使能端无效}/*********************公历平年的2月只有28天,公历闰年的2月有29天。
判断公历闰年的算法:①、普通年能被4整除且不能被100整除的为闰年。
如:2011年不是闰年,2012年是闰年...2100年也不是闰年。
②、世纪年能被400整除的是闰年。
如:2000年是闰年,1900年不是闰年。
*********************/void leapyear() //判断某年是否闰年函数{if ((year%400==0) || (year%100!=0) && (year%4==0))month_day[1]=29;//闰年2月29天elsemonth_day[1]=28;//平年2月28天}/*************************由年、月、日计算星期的算法(基姆拉尔森计算公式):W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:计算时要将一月和二月看成是上一年的十三月和十四月。
例:2012-1-10需要换算成2011-13-10来代入公式计算。
**************************/uchar CaculateWeek(int y,char m, char d)//由年、月、日计算星期函数{uchar w;if(m==1){m=13;y=y-1;}else if(m==2){m=14;y=y-1;}w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return w;}/*定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/void time0() interrupt 1{TH0=(65536-50000)/256;//重装初值TL0=(65536-50000)%256;if(temp==19)//为了加快仿真速度,将temp设为1,实际应为20{temp=0;if(second==59)//为了加快仿真速度,将second设为2,实际应为59{second=0;if(minute==59)//为了加快仿真速度,将minute设为2,实际应为59{minute=0;if(hour==23)//为了加快仿真速度,将hour设为2,实际应为23{hour=0;leapyear();//闰、平年计算 if(day==month_day[month-1] )//判断日期是否到了每月最后一天{day=1;if(month==12){month=1;year++;}else month++;}else day++;}else hour++;}else minute++;}else second++;}else temp++;week=CaculateWeek(year,month,day);//根据年月日计算星期}void int0() interrupt 0//外部中断函数,当按下setup键时产生外部中断进入调整状态{bit flag;uchar setup_bit=0;//setup_bit用于计数移位次数do//循环{if(shift_key==0)//判断移位键是否按下 {delay(1);//延时消抖if(shift_key==0)//确认移位键是否按下{while(!shift_key);//等待移位键释放if(setup_bit==10)//共10位{setup_bit=0; //移位计数值返回0LCD1602_write_com(0x0c);//关闭光标显示goto rep;//转移到中断程序结束处}else{setup_bit++;//移位计数值加1LCD1602_write_com(0x0e);//打开光标显示}}}switch(setup_bit)//判断调整哪位,从而确定光标显示位置{case 1:LCD1602_write_com(0x80+0x44+4) ;//光标设置到分个位显示位置break;case 2:LCD1602_write_com(0x80+0x44+3) ;//光标设置到分十位显示位置break;case 3:LCD1602_write_com(0x80+0x44+1) ;//光标设置到时个位显示位置break;case 4:LCD1602_write_com(0x80+0x44+0) ;//光标设置到时十位显示位置break;case 5:LCD1602_write_com(0x80+0x01+9) ;//光标设置到日个位显示位置break;case 6:LCD1602_write_com(0x80+0x01+8) ;//光标设置到日十位显示位置break;case 7:LCD1602_write_com(0x80+0x01+6) ;//光标设置到月个位显示位置break;case 8:LCD1602_write_com(0x80+0x01+5) ;//光标设置到月十位显示位置break;case 9:LCD1602_write_com(0x80+0x01+3) ;//光标设置到年个位显示位置break;case 10:LCD1602_write_com(0x80+0x01+2) ;//光标设置到年十位显示位置break;default:break;}if(up_key==0)//判断增加键是否按下{delay(1);//延时消抖if(up_key==0)//确认增加键是否按下{while(!up_key);//等待增加键释放flag=1;//增加键已按动}elseflag=0;//增加键未按动}elseflag=0;//增加键未按动if(flag)//若增加键按动{switch(setup_bit)//判断是哪位,从而调整哪位{case 1:if(minute%10==9)//若分个位为9minute=minute-9;//则分个位清零elseminute++;//否则分个位加1LCD1602_write_dat(0x30+min ute%10);//写入1602break;case 2:if(minute/10==5)//若分十位为5minute=minute-50;//则分十位清零elseminute=minute+10;//否则分十位加1LCD1602_write_dat(0x30+min ute/10);//写入1602break;case 3:if(hour%10==9)hour=hour-9;elsehour++;LCD1602_write_dat(0x30+hou r%10);//写入1602break;case 4:if(hour/10==2)hour=hour-20;elsehour=hour+10;LCD1602_write_dat(0x30+hou r/10);//写入1602break;case 5:if(day%10==9)day=day-9;elseday++;LCD1602_write_dat(0x30+day %10);//写入1602break;case 6:if(day/10==3)day=day-30;elseday=day+10;LCD1602_write_dat(0x30+day /10);//写入1602break;case 7:if(month%10==9)month=month-9;elsemonth++;LCD1602_write_dat(0x30+mon th%10);//写入1602break;case 8:if(month/10==1)month=month-10;elsemonth=month+10;LCD1602_write_dat(0x30+mon th/10);//写入1602break;case 9:if(year%10==9)year=year-9;elseyear++;LCD1602_write_dat(0x30+yea r%10);//写入1602break;case 10:if(year%100/10==9)year=year-90;elseyear=year+10;LCD1602_write_dat(0x30+yea r%100/10);//写入1602break;default: break;}}}while(setup_bit!=0);//若所有位未调整完则返回,否则退出调整模式rep:;}/*-------LCD1602初始化函数-----*/void LCD1602_init(){LCD1602_write_com(0x38); //设置液晶显示方式:16x2行,5x7点阵,8位数据总线LCD1602_write_com(0x0c); //设置字符显示开关及光标显示模式:开启字符显示,不显示光标LCD1602_write_com(0x06); //设置数据指针及显示屏移动模式:数据指针增(即光标右移),显示屏不移LCD1602_write_com(0x01); //液晶屏幕清屏}/*-------主函数---------*/void main(){init();//定时计数器T0及中断初始化LCD1602_init();//LCD1602初始化while(1){uchar i;LCD1602_write_com(0x80+0x01); //设置第1行显示首地址01LCD1602_write_dat(0x30+year/1000);//输出年千位的字符码LCD1602_write_dat(0x30+(year%1000)/100 );//输出年百位的字符码LCD1602_write_dat(0x30+(year%100)/10); //输出年十位的字符码LCD1602_write_dat(0x30+year%10);//输出年个位的字符码LCD1602_write_dat('-');//输出'-'字符码 LCD1602_write_dat(0x30+month/10);//输出月十位的字符码LCD1602_write_dat(0x30+month%10);//输出月个位的字符码LCD1602_write_dat('-');//输出'-'字符码 LCD1602_write_dat(0x30+day/10);//输出日十位的字符码LCD1602_write_dat(0x30+day%10);//输出日个位的字符码LCD1602_write_dat('(');//输出'('字符码for (i=0;i<3;i++)LCD1602_write_dat(week_string[week ][i]);//输出星期英文缩写字符码LCD1602_write_dat(')');//输出')'字符码LCD1602_write_com(0x80+0x40+0x04); //设置第2行显示首地址04LCD1602_write_dat(0x30+hour/10);//输出小时十位的字符码LCD1602_write_dat(0x30+hour%10);//输出小时个位的字符码LCD1602_write_dat(':');//输出':'字符码 LCD1602_write_dat(0x30+minute/10);//输出分十位的字符码LCD1602_write_dat(0x30+minute%10);//输出分个位的字符码LCD1602_write_dat(':');//输出':'字符码 LCD1602_write_dat(0x30+second/10);//输出秒十位的字符码LCD1602_write_dat(0x30+second%10);//输出秒个位的字符码}}网友评论评论内容最多输入2000个字符李文2011-6-1 20:44:14 发表程序很详细,下来参考一下。