单片机万年历电子钟设计报告含电路图和源程序文件_第1页
单片机万年历电子钟设计报告含电路图和源程序文件_第2页
单片机万年历电子钟设计报告含电路图和源程序文件_第3页
单片机万年历电子钟设计报告含电路图和源程序文件_第4页
单片机万年历电子钟设计报告含电路图和源程序文件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、万年历设计报告 TOC o 1-3 h u HYPERLINK l _Toc20113 一、设计要求及方案论证 PAGEREF _Toc20113 3 HYPERLINK l _Toc4135 1.1设计要求: PAGEREF _Toc4135 3 HYPERLINK l _Toc21894 1.1.1 基本要求 PAGEREF _Toc21894 3 HYPERLINK l _Toc26420 1.1.2 播放第 PAGEREF _Toc26420 3部分 HYPERLINK l _Toc19518 1.2 基本系统方案选择与论证 PAGEREF _Toc19518 3 HYPERLINK

2、l _Toc20626 1.2.1 MCU芯片选型方案及演示: PAGEREF _Toc20626 3 HYPERLINK l _Toc25647 1.2.2 显示模块选择方案及理由: PAGEREF _Toc25647 4 HYPERLINK l _Toc22202 1.2.3 时钟芯片选型方案及演示: PAGEREF _Toc22202 4 HYPERLINK l _Toc2403 1.3 电路设计的最终决定 PAGEREF _Toc2403 4 HYPERLINK l _Toc23354 2. 理论分析与计算 PAGEREF _Toc23354 4 HYPERLINK l _Toc200

3、17 2.1、秒的产生由定时器T0产生: PAGEREF _Toc20017 4 HYPERLINK l _Toc2563 三、系统的硬件设计与实现 PAGEREF _Toc2563 5 HYPERLINK l _Toc28123 3.1 电路设计框图: PAGEREF _Toc28123 5 HYPERLINK l _Toc15389 3.2 系统硬件概述: PAGEREF _Toc15389 6 HYPERLINK l _Toc25830 3.3 主机电路设计 PAGEREF _Toc25830 6 HYPERLINK l _Toc27922 3.3.1 单片机主控模块设计 PAGEREF

4、 _Toc27922 6 HYPERLINK l _Toc21862 3.3.2 显示模块设计 PAGEREF _Toc21862 7 HYPERLINK l _Toc16525 3.3.3 闹钟模块设计 PAGEREF _Toc16525 9 HYPERLINK l _Toc24226 3.3.4 功率调节模块 PAGEREF _Toc24226 9 HYPERLINK l _Toc16888 四、系统的软件设计 PAGEREF _Toc16888 10 HYPERLINK l _Toc2730 4.1 程序流程图 PAGEREF _Toc2730 10 HYPERLINK l _Toc56

5、73 4.2 闹钟模块流程图: PAGEREF _Toc5673 11 HYPERLINK l _Toc18909 4.3 按键调整模块流程图: PAGEREF _Toc18909 11 HYPERLINK l _Toc22365 五、测试计划及测试结果分析 PAGEREF _Toc22365 13 HYPERLINK l _Toc29559 5.1测试设备 PAGEREF _Toc29559 13 HYPERLINK l _Toc22027 5.2 软件测试平台 Keil C51 PAGEREF _Toc22027 13 HYPERLINK l _Toc15252 5.3 模块测试 PAGE

6、REF _Toc15252 13 HYPERLINK l _Toc3420 5.3.1 显示模块测试 PAGEREF _Toc3420 13 HYPERLINK l _Toc21071 5.4 试验结果分析与结论 PAGEREF _Toc21071 14 HYPERLINK l _Toc20547 5.4.1 测试结果分析 PAGEREF _Toc20547 14 HYPERLINK l _Toc15596 5.4.2测试结论 PAGEREF _Toc15596 14 HYPERLINK l _Toc7316 六、工作总结 PAGEREF _Toc7316 14 HYPERLINK l _To

7、c16678 参考文献 PAGEREF _Toc16678 14 HYPERLINK l _Toc11140 附录一:系统电路图 PAGEREF _Toc11140 15 HYPERLINK l _Toc15385 附录 III:System C 程序 PAGEREF _Toc15385 16一、设计要求及方案论证1.1设计要求:1.1.1基本要求(1) 精确显示:时、分、秒(24小时制)(2) 显示星期几(3) 显示公历(4) 时间、日期、星期可调整(5) 断电记忆功能1.1.2发挥作用(1) 闹钟功能(2)显示农历(3) 显示二十四节气(4) 其他1.2 基本系统方案的选择与论证1.2.1

8、单片机芯片选型方案及演示:选项一:以89C51芯片为硬件核心,采用Flash ROM,科有4KB ROM存储空间,可工作于3V超低电压,完全兼容MCS-51系列单片机,但用于电路设计因为它没有ISP在线编程技术。 , 在调试电路时,当因错误修改程序或程序新增功能需要烧录到程序中时,反复拔插芯片会在一定程度上损坏芯片。选项二:使用AT89S52,所有芯片ROM使用Flash ROM;可配合3V超底压工作;同时也完全兼容MCS-51系列单片机。芯片内存为8KB ROM存储空间,同时拥有89C51个功能,并具有在线编程和可擦除技术,在调试电路时,由于程序修改错误或程序新增功能需要烧录进入程序,芯片无

9、需多次插拔,不会损坏芯片。所以选择使用AT89S52作为主控系统。1.2.2显示模块选择场景和参数:选项一:点阵数码管用于显示。点阵数码管由八行八列的发光二极管组成。它更适合显示文本。如果用来显示数字,太浪费了,而且价格也比较高,所以不需要这种显示。作为显示器。选项二:采用LED数码管动态扫描。 LED数码管价格适中。最适合显示数字,但不能显示图形字符。显示星期时只能用数字表示。而且,当采用动态扫描方式与单片机连接时,最好在编程时进行比较。复杂的。因此,LED数码管不用作显示器。第三种解决方案:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可以显示文字、图形、各种显示,清晰可见,所以本设计采

10、用了LCD液晶显示屏。1.2.3时钟芯片的选型方案及演示:选项一:DS1302时钟芯片用于实现时钟。 DS1302芯片是一款高性能时钟芯片,可自动计算秒、分、时、日、周、月、年、年,带闰年补偿,精度高,1位RAM作为数据暂存区,工作电压为2.5V 5.5V ,2.5V时功耗小于300 nA。但是标题中明确规定不能使用任何专用的时钟芯片和模块,所以没有采用这种方案。 .选项二:直接用单片机定时计数器提供秒信号,用程序计算年、月、日、周、时、分、秒。采用这种方案可以减少芯片的使用,节省成本。所以使用这个计划。1.3 电路设计的最终决定综上所述,本工作的方案选择:采用AT89S52作为主控系统;使用

11、单片机定时器提供时钟;液晶屏作为显示器。2、理论分析与计算2.1、秒的产生由定时器T0产生:T0设置为10ms定时初始值dc00H(216=65536D,dc00H=56320D)定时时间=(65536-56320)*(1/11.0592)*12=10ms(MCU晶振f0=11.0592Mhz)使用累加法将计时时间累加一百次生成一秒时间: 100*10ms=1000ms=1s2.2 .总天数算法:首先,使用if语句判断定义年份与输入年份之间的每一年是否为闰年。这是闰年。一年的总天数为366,否则为355。然后判断输入的年份是否为定义的年份,如果是,则令总天数S=1,否则,用累积法计算定义年份和

12、输入年份之间的总天数,然后计算从输入年份的一月到要输出的月份的天数。加起来之间的天数,如果月份是闰年的月份,并且月份大于2月,则总天数加1,否则不加,从1月1日开始计算月份定义年份到产出年份。一天中的总天数。 2.3将月份的第一天作为星期几的输出算法:将总天数除以7得到余数,再加2作为星期几,如果是7,就是星期天。 2.4 .计算输出月份的完整日历算法:计算输出月份的第一天为星期几后,用空格填充日期前的位置,输出从日期到结束的天数月,加上当月的天数每月的第一天是星期几然后除以7得到0换行,就可以完整的输出当月的日历了。5. 计算某一天的星期几的算法:泽勒公式历史上的某一天是哪一天?未来的一天将

13、是一周中的哪一天?这个问题有很多公式(两个通用公式和一些分段公式),其中最著名的是 Zeller 公式。即:w=y+y/4+c/4 -2c+26(m+1)/10+d-1公式中的符号含义如下,w:星期; c: 世纪 1; y:年份(两位数); m:月(m大于等于5小于等于14,即在Zeiler公式中,某年的1月和2月应计算为上一年的12月和4月,例如2003年1月1日,按2002年12月1日计算); d:天; 表示四舍五入,即只取整数部分。 (C为世纪减一,y为年份的后两位数,M为月份,d为天数。1月和2月计算为上一年的第13和第14个月。此时, C 和 y 计算如上一年的值。)计算出的 W 除

14、以 7,余数为星期几。如果余数为 0,则为星期日。以2049年10月1日(国庆100周年)为例,使用泽勒公式计算,过程如下:泽勒公式:w=y+y/4+c/4 -2c+26(m+1 )/10 +d-1 =49+49/4+20/4-220+26(10+1)/10+1-1 =49+12.25+5 -40+ 28.6 =49+12+5-40+28 =54(除以三、系统硬件设计与实现3.1 电路设计框图:AT89S52主控模块液晶模组键盘模块键盘模块闹钟模块3.2 系统硬件概述:本电路采用AT89S52单片机控制,具有在线编程功能,功耗低,可在3V超低电压下工作;显示部分采用LCD1602实现,可同时显

15、示16x02或32个字符;闹钟部分由蜂鸣器组成,蜂鸣器是一种一体化结构的电子发声器。它采用 HYPERLINK %20%20%20%20:/baike.baidu%20%20%20%20/view/2070482.htm t _blank 直流电压供电,广泛用于 HYPERLINK %20%20%20%20:/baike.baidu%20%20%20%20/view/3314.htm t _blank 计算机、打印机、复印机、报警器、 HYPERLINK %20%20%20%20:/baike.baidu%20%20%20%20/view/1387196.htm t _blank 电子玩具、汽

16、车电子设备、机器、 HYPERLINK %20%20%20%20:/baike.baidu%20%20%20%20/view/281961.htm t _blank 定时器等电子产品中作为发声装置 HYPERLINK :/baike.baidu /view/481400.htm t _blank 。3.3 主机电路设计3.3.1单片机主控模块设计AT89S52 MCU 是一款 40 针双列直插芯片,具有四个 I/O 端口 P0、P1、P2、P3。 MCS-51 MCU 共有 4 个 8 位 I/O 端口(P0、P1、P2、P3),每条 I/O 线可独立输出或输入。单片机的最小系统如下图所示,1

17、8脚和19脚接时钟电路,XTAL1接外部晶振和微调电容的一端,片内是振荡器反相放大器的输入,XTAL2 连接到外部晶振和微调电容。芯片上的另一端是振荡器反相放大器的输出端。第9脚为复位输入端,接电容、电阻和开关,然后足以给复位电路上电,第20脚为接地端,第40脚为电源端。如图-1图-1主控系统3.3.2显示模块设计LCD1602液晶显示工业字符型液晶,可同时显示16x02或32个字符。 (16 列和 2 行) ,共有 16 个引脚,通过 D0D7 的 8 位数据端传输数据和指令。引脚图如图 6-5 所示。图 6-5 LCD1602 管脚示意图LCD1602 的引脚功能如表 6-5 所示:表 6

18、-5 LCD1602 引脚功能引脚 1VS_ _一般地引脚 2电压_连接电源 (+5V)引脚 30 _LCD对比度调节端,接正电源时对比度最弱,接接地电源时对比度最高引脚 4R SRS 是寄存器选择。高电平为1时选择数据寄存器,低电平为0时选择指令寄存器。引脚 5读/写R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。引脚 6乙E(或EN)端为使能端,下降沿使能。引脚 7数据库0底部 4 位三态、双向数据总线 0 位引脚 8数据库1底部 4 位三态、双向数据总线 1 位引脚 9DB2 _底部 4 位三态、双向数据总线 2 位引脚 10DB3 _底部 4 位三态、双向数据总

19、线 3 位引脚 11DB4 _高 4 位三态、双向数据总线 4 位引脚 12DB5 _高 4 位三态、双向数据总线 5 位引脚 13DB6 _高 4 位三态、双向数据总线 6 位引脚 14数据库7高 4 位三态、双向数据总线 7 位引脚 15BLA背光电源正极引脚 16黑色背光电源负极1602液晶模块的控制器共有11条控制指令,如表10-14所示:序列号操作说明RS读/写D7D6D5D4D3D2D1D01清晰的显示00000000012光标返回000000001*3设置输入模式00000001ID小号4显示开/关控制0000001DC乙5光标或字符移位000001S/C右/左*6设置功能000

20、01深度学习F*7设置字符生成内存地址0001字符生成内存地址8设置数据存储器地址001显示数据存储器地址9读取繁忙标志或地址01高炉柜台地址10将数据写入 CGRAM 或 DDRAM)10要写入的数据11从 CGRAM 或 DDRAM 读取11读取数据内容表 10-14:控制命令列表1602液晶模块的读写操作、屏幕操作和光标操作都是通过指令编程实现的。 (注:1为高电平,0为低电平)命令1:清除显示,命令代码为01H,光标复位到地址00H。命令2:光标复位,光标返回地址00H。命令 3:光标和显示模式设置 I/D:光标移动方向,高电平向右,低电平向左 S:屏幕上的所有文字是向左还是向右移动。

21、高电平有效,低电平无效。命令 4:显示开关控制。 D:控制整体显示的开启和关闭,高电平表示开启显示,低电平表示关闭显示 C:控制光标开启和关闭,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。命令5:光标或显示移位 S/C:电平高时移动显示的文字,电平低时移动光标。指令6:功能设置指令 DL:高电平时4位总线,低电平时8位总线 N:低电平时单行显示,高电平时双行显示 F:低电平时5x7点阵字符,5x10点阵级别高时显示矩阵字符。指令 7:字符发生器 RAM 地址设置。指令 8:DDRAM 地址设置。命令 9:读忙信号和光标地址 BF:是忙标志位,高电平表示忙

22、,此时模块不能接收命令或数据,低电平表示不忙。指令 10:写入数据。指令 11:读取数据。将lcd的管脚连接到单片机,通过单片机实现显示器的输出。电路图实现如下:3.3.3闹钟模块的设计闹钟模块由蜂鸣器实现,是一种一体化结构的电子发声器, HYPERLINK %20%20%20%20:/baike.baidu%20%20%20%20/view/2070482.htm t _blank 采用直流电压供电。蜂鸣器的导通由单片机p3.7脚输出的电平变化控制。设计如下:3.3.4功率调节器模块方案一:LM7805稳压器方案二:USB接口+5V供电四、系统的软件设计开始开始初始化LCD、时间日期处理程序

23、允许LCD显示?读取时间LCD显示LCD关闭YESNO扫描按键时间设定闹钟设定4.1 程序流程图开始开始初始化扫描按键闹钟设定数据保存返回4.2 闹钟模块流程图:4.3 按键调整模块流程图:5、测试计划及测试结果分析5.1测试设备序列号姓名影响1凯尔 51 软件编写和调试 C 程序并生成可刻录的 hex 文件2模拟软件 Proteus焊接前电路的模拟和测试3变压器提供5V输出电源4数字万用表测试工作电源检测电路操作5.2 软件测试平台Keil C51Keil C51是美国Keil Software公司出品的兼容51系列的单片机C语言软件开发系统。与汇编相比,C语言在功能、结构、可读性和可维护性

24、等方面优势明显,易于学习和使用。 .用汇编语言再用C开发后,体会更深刻。 Keil C51软件提供丰富的库函数和强大的集成开发调试工具,具有全Windows界面。还有一点很重要,只要看一下编译后生成的汇编代码,就可以发现Keil C51生成的目标代码非常高效,大部分语句生成的汇编代码紧凑易懂。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分的功能和使用。 Keil C51工具包的整体结构,其中uVision和Ishell分别是C51 for Windows和Dos的集成开发环境(IDE),可以完成编辑、编译、链接、调试、仿真的整个开发过程。5.3 模块测试5.

25、3.1显示模块测试问题:LCD1602液晶屏背光灯亮但不显示内容。解决问题:初步假设已经供电,但单片机不工作。用万用表测试LCD使能端的6个引脚和写命令选择端的4个引脚,两者都有电位变化,单片机已经启动。再假设 LCD1602 的显示对比度没有适当调整。要使电路正常工作,请缓慢旋转变阻器,但仍然没有任何显示。假设 LCD1602 的某些引脚短路了 3 次。测试各管脚电平后发现6管脚线某处接电源VCC,使数据指令无法写入LCD1602显示器,导致无法显示容量。修正后显示正常,问题解决。 VCC1602MOXx01) /);5.4 试验结果分析与结论5.4.1测试结果分析测试时,如果lcd1602

26、不显示,先用万用表测试电路,检查工作电压是否正常,找出电路工作不正常的部分,再检查各引脚接线。5.4.2测试结论经过多次反复测试分析,可以更加熟悉电路的原理和功能,同时提高电路的设计能力和分析能力。同时进一步完善了软件编程,增强了编程能力。同时,所学的知识也得到了很大的提高和巩固。六、作品总结在整个设计过程中,运用了团队精神和分工。本人吴玉壮健,负责电路设计、软件编程,编写设计报告。佩文负责在线查看相关有用信息,王文龙负责电路焊接,充分发挥人的主观能动性。 ,自学,学到了很多没学过的知识。干得好。达到了预期的目的。在最初的设计中,它扮演了“三个走狗,上一个亮”的角色。互相学习,互相讨论,互相研

27、究。完成了最初的想法。在这个设计中,我知道我们做任何事情都需要有一颗平常心,不要想着走捷径,一步一个脚印。它也培养了我们的耐心,我们在做任何事情时都有耐心。我在这次比赛中学到了很多,这是最重要的。总之,我们参加电子竞技的能力得到了全方位的提升。参考新概念51单片机C语言教程郭天祥编译电子工业2009单片机C语言应用百例紫文变微控制器原理与应用电子科技大学 2006附录一:系统电路图附录二:模拟效果图附录 III:System C 程序#include#include无符号字符代码 dis_week=SUN,MON,TUE,WED,THU,FRI,SAT;无符号字符代码 para_month13

28、=0,0,3,3,6,1,4,6,2,5,0,3,5; /周月参数无符号字符数据 dis_buf116; /LCD上显示缓冲区无符号字符数据 dis_buf216; /LCD下显示缓冲区unsigned char data year,month,date,week;/年、月、日、周unsigned char data armhour,armmin,armsec;/报警时分秒无符号字符数据时、分、秒、秒100; /时、分、秒、百分之一秒unsigned char data flag,vkey,skey;/设置状态计数标志,按钮之前的值,按钮的当前值位报警; /标识是否启用报警,1-启用,0-禁用

29、位 rs = P20; /LCD数据/指令选择端(H/L)sbit rw = P21; /LCD读/写选择端(H/L)sbit ep = P22; /LCD使能控制sbit PRE = P16; /调整键(k3)位 SET = P17; /调整键(k4)sbit SPK = P37;无效延迟(无符号字符毫秒); /延时程序位 lcd_busy(); /测试LCD忙状态程序无效 lcd_wcmd(char cmd); /写命令到LCD程序无效 lcd_wdat(char dat); /向LCD程序写入数据无效 lcd_pos(char pos); /LCD数据指针定位程序无效 lcd_init(

30、); /LCD初始化设置程序无效 pro_timedate(); /时间日期处理程序无效亲显示(); /显示处理程序无效 pro_key(); /密钥处理程序无效时间警报(); /定时闹钟功能(闹钟)无符号字符扫描键(); /密钥扫描器无符号字符 week_proc(); /星期自动计算和显示功能位闰年(); /判断是否是闰年无效 lcd_sef_chr(); /LCD自定义字符程序void update_disbuf(unsigned char t1,unsigned char t2,unsigned char dis_h,unsigned char dis_m,unsigned char

31、dis_s); /更新显示缓冲函数/ 延迟程序无效延迟(无符号字符毫秒) 而(毫秒-) 无符号字符 i;for(i = 0; i 250; i+)_nop_(); /执行一个_nop_()指令一个机器周期_nop_();_nop_();_nop_();/测试LCD忙状态位 lcd_busy()位结果;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();结果 =(位)(P0&0 x80); /LCD的D0-D7中,D7=1为忙,D7=0为空闲ep = 0;返回结果;/写命令到LCD无效 lcd_wcmd(字符 cmd)而(lcd_busy()

32、; /当lcd_busy为1时,再次查看LCD忙状态,当lcd-busy为0时,开始写命令rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/将数据写入LCD无效 lcd_wdat(字符数据)而(lcd_busy(); /当lcd_busy为1时,再次检查LCD忙状态,当lcd-busy为0时,开始写入数据rs = 1;rw = 0;ep = 0;P0 = 数据;_nop_();_nop_();_n

33、op_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/LCD数据指针定位程序无效 lcd_pos(字符位置)lcd_wcmd(位置|0 x80); /数据指针=80+地址码(00H27H,40H67H)/设置两个自定义字符,(注意:LCD1602中自定义字符的地址为0 x00-0 x07,可以定义8个字符)/这里我们设置一个自定义字符放在0 x00位置(000),另一个放在0 x01位置(001)无效 lcd_sef_chr() /第一个自定义字符lcd_wcmd(0 x40); /“01 000 000”第1行地址(D7D6

34、为地址设置命令形式,D5D4D3为字符存储位置(0-7),D2D1D0为字符行地址(0-7)lcd_wdat(0 x 1f); /“XXX 11111”第1行数据(D7D6D5为XXX,表示为任意数字(通常为000),D4D3D2D1D0为字符行数据(1-亮,0-灭)lcd_wcmd(0 x41); /“01 000 001”第2行地址lcd_wdat(0 x11); /“XXX 10001”第2行数据lcd_wcmd(0 x42); /“01 000 010”第3行地址lcd_wdat(0 x15); /“XXX 10101”第3行数据lcd_wcmd(0 x43); /“01 000 01

35、1”第4行地址lcd_wdat(0 x11); /“XXX 10001”第4行数据lcd_wcmd(0 x44); /“01 000 100”第5行地址lcd_wdat(0 x 1f); /“XXX 11111”第5行数据lcd_wcmd(0 x45); /“01 000 101”第6行地址lcd_wdat(0 x 0a); /“XXX 01010”第6行数据lcd_wcmd(0 x46); /“01 000 110”第7行地址lcd_wdat(0 x 1f); /“XXX 11111”第7行数据lcd_wcmd(0 x47); /“01 000 111”第8行地址lcd_wdat(0 x00

36、); /“XXX 00000”第8行数据/ 第二个自定义字符lcd_wcmd(0 x48); /“01 001 000”第1行地址lcd_wdat(0 x01); /“XXX 00001”第1行数据lcd_wcmd(0 x49); /“01 001 001”第2行地址lcd_wdat(0 x1b); /“XXX 11011”第2行数据lcd_wcmd(0 x 4a); /“01 001 010”第3行地址lcd_wdat(0 x1d); /“XXX 11101”第3行数据lcd_wcmd(0 x4b); /“01 001 011”第4行地址lcd_wdat(0 x19); /“XXX 1100

37、1”第4行数据lcd_wcmd(0 x 4c); /“01 001 100”第5行地址lcd_wdat(0 x1d); /“XXX 11101”第5行数据lcd_wcmd(0 x4d); /“01 001 101”第6行地址lcd_wdat(0 x1b); /“XXX 11011”第6行数据lcd_wcmd(0 x4e); /“01 001 110”第7行地址lcd_wdat(0 x01); /“XXX 00001”第7行数据lcd_wcmd(0 x 4f); /“01 001 111”第8行地址lcd_wdat(0 x00); /“XXX 00000”第8行数据/LCD初始化设置无效 lcd

38、_init()lcd_wcmd(0 x38); /设置LCD为16X2显示,5X7点阵,8位数据接口延迟(1);lcd_wcmd(0 x 0c); /LCD开启显示和光标设置(光标不闪烁,不显示“-”)延迟(1);lcd_wcmd(0 x06); /LCD显示光标移动设置(光标地址指针加1,全屏显示不动)延迟(1);lcd_wcmd(0 x01); /清除LCD的显示内容延迟(1);/计算闰年位闰年()位跳跃;if(year%4=0&year%100!=0)|year%400=0)/闰年条件飞跃=1;别的飞跃=0;返回飞跃;/自动计算处理周无符号字符 week_proc() 无符号字符 num

39、_leap;无符号字符 c;num_leap=year/4-year/100+year/400;/从00年到年的闰年数if(leap_year()& month 59)秒 = 0;分钟+;如果(分钟 59)min=0;小时+;如果(小时23)小时=0;日期+;if (月=1|月=3|月=5|月=7|月=8|月=10|月=12)if (date31) date=1;month+; /大月有31天if (月=4|月=6|月=9|月=11)if (date30) date=1;month+; /小月有 30 天如果(月=2)if(leap_year() /闰年条件if (date29) date=1

40、;month+; /2月是闰年29天别的if (date28) date=1;month+; /2月28天如果(月12)月=1;年+;如果(年99)年=0;week_proc();if (sec=armsec & min=armmin & hour=armhour)如果(警报)TR1=1; /当启用闹钟时,闹钟时间到了,启动Timer1/显示处理程序无效 pro_display() 无符号字符 i;lcd_pos(0 x00);对于 (i=0;i=15;i+)lcd_wdat(dis_buf1i);lcd_pos(0 x40);对于 (i=0;i= 100) /1 秒时间 (100*10ms=1000ms=1s)sec100 = 0;pro_timedate();/调用时间和日期处理程序if (sec&0 x01) / hello 一秒, kitty 一秒update_disbuf(0 x00,KITTY,小时,分钟,秒); /0 x00代表自定义字符,显示00位置别的update_di

温馨提示

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

评论

0/150

提交评论