(整理)单片机课程设计—万年历

合集下载

单片机课程设计-万年历

单片机课程设计-万年历

一、课程设计名称万年历二、课程设计目的1、掌握单片机的原理、应用。

2、学会利用单片机设计电路。

3、培养大家的创新意识及动手能力。

三、课程设计内容(一)方案设计我们组设计的万年历是以一片40引脚的单片机AT89C52为主体,结合16位定时器/计数器和LED数码管等元器件来实现的,主要有几个单元电路构成,分别是复位电路、振荡电路、按键电路、整点报时电路和显示电路,下面给出了电路框图及其分析和说明。

1、复位电路此单元电路为手动复位电路,由按键、电解电容、电阻等构成,与单片机的RST引脚相连接,在单片机运行过程中可以随时按键复位,电路图如图1所示:图-1 复位电路2、振荡电路此单元电路由晶振和电容构成,其中的晶振频率为12MHz,与单片机的XTAL1和XTAL2引脚相连接,具体电路如图2所示:图-2振荡电路3、调整电路此单元电路主要由多个弹性按键构成,在所设计的电路中与单片机的I/O(P1)口相连接,具体电路可参考图3:图-3按键调整电路图中的按键K0、K1、K2、K3分别具有不同的功能,其中K0、K1、K2用于校准,K0调节小时(或年)、K1调节分(或月)、K2调节秒(或日);K3用于切换,启动时万年历显示的为时分秒,当按下K3时可以切换到年月日显示界面。

4、整点报时电路此部分电路通过采用晶体管驱动蜂鸣器实现的,每当显示时间出现整点时(如12:00:00),蜂鸣器会发出短暂响声,起到整点报时功能。

实际电路中与单片机的P1.3相连接,具体电路可参照图4:图-4整点报时电路5、显示电路此单元电路为万年历的显示屏,由共阳数码管构成,采用动态扫描的方式来显示年月日和时分秒,示意图如图5所示:图-5数码管显示电路注意:实际中电路与上述电路不同,稍复杂些,而且采用的是两个四位一体的数码管,还要接限流电阻(较小,如470欧)和晶体管(如9012)。

(二)系统硬件设计该系统主要由时钟电路部分、中央处理单元、数码管显示部分组成,各组成部分如图所示。

单片机课程设计报告(万年历)

单片机课程设计报告(万年历)

v .. . ..目录一、摘要 (2)二、设计任务 (4)三、总体方案设计与论证 (4)1、液晶显示模块 (4)2、实时时间计算模块 (5)3、实时环境温度采集模块 (5)4、报警模块 (6)5、设置模块 (6)四、总体方案组成框图 (7)五、系统硬件设计 (8)1、LCD显示模块 (8)2、实时时间计算模块 (12)3、实时环境温度检测模块 (16)4、报警模块 (21)5、设置模块 (22)六、系统软件设计 (23)七、系统硬件电路设计 (24)八、系统硬件PROTEUS仿真原理图 (25)九、系统硬件仿真运行情况图 (26)1、显示欢迎界面 (26)2、显示实时时间 (26)3、显示当前温度 (27)4、时间设置 (27)5、最高报警温度设置 (28)6、闹钟时间设置 (28)7、超温 (29)8、闹钟时间到 (29)附录一:实物图 (30)附录二:PCB图 (32)附录三:源程序代码 (33)附录四:参考文献 (62). . . 资料. .v .. . ..摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。

M bn本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。

计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。

(完整版)单片机毕业课程设计—万年历

(完整版)单片机毕业课程设计—万年历

郑州轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目:电子万年历学生姓名:系别:专业:班级:学号:指导教师:2011年12月16日设计题目:电子万年历设计任务与要求:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能方案比较:方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。

方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源电路、复位电路、晶振电路等模块。

主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

两个方案工作原理大致相同,只有显示模块和时钟电路不同。

LED 数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。

DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。

单片机有定时器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。

对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

逻辑总框图:该电子万年历的总体设计框图如图(1)所示。

单片机课程设计--基于51单片机的万年历

单片机课程设计--基于51单片机的万年历

单片机课程设计报告万年历的设计基于51单片机的万年历摘要:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。

在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。

万年历的设计过程在硬件与软件方面进行同步设计。

硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。

在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。

显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。

软件方面主要包括日历程序、时间调整程序,显示程序等。

程序采用C语言编写。

所有程序编写完成后,在KeilC51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

一、设计要求基本要求:1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”;2,具有日历功能;③时间可以通过按键调整。

发挥部分:④具有闹钟功能(可以设定多个)。

二:总体设计电路设计框图系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由单片机定时功能提供;温度的采集由DS18B20构成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,使用时不需要额外的外围电路。

单片机课程设计报告电子万年历

单片机课程设计报告电子万年历

单片机课程设计报告电子万年历单片机课程设计报告:电子万年历一、设计简介在本次单片机课程设计中,我们选择了电子万年历作为设计主题。

电子万年历是一种结合了数字电路、单片机技术和实时时钟(RTC)技术的电子产品,它具有显示年份、月份、星期、日、时、分、秒的功能,还可以根据用户的需求进行定时、闹钟、报时等功能。

二、硬件设计我们采用了基于8051内核的单片机作为主控芯片。

该单片机具有丰富的I/O 端口,适于实现各种复杂的输入输出操作。

此外,它还内置了定时器和中断控制器,可以很方便地实现实时时钟功能。

1.显示模块:为了方便用户查看时间信息,我们选用了LCD显示屏作为显示设备。

LCD屏具有功耗低、体积小、显示内容丰富等优点。

2.实时时钟(RTC)模块:我们采用了常用的DS1302芯片作为实时时钟模块。

该芯片可以提供秒、分、时、日、星期、月、年的信息,而且还有可编程的报警功能。

3.按键模块:为了实现人机交互,我们设计了一组按键。

用户可以通过按键来调整时间、设置闹钟等。

4.电源模块:为了保证系统的稳定工作,我们采用了稳定的5V直流电源。

三、软件设计我们采用了C语言编写程序。

程序主要由以下几个部分组成:1.主程序:主程序主要负责读取RTC模块的时间信息,并控制LCD显示屏显示时间。

同时,主程序还要检测按键输入,根据用户的需求进行相应的操作。

2.RTC驱动程序:为了正确地读取和设置DS1302芯片的时间信息,我们编写了相应的驱动程序。

驱动程序包括初始化和读写寄存器两部分。

3.按键处理程序:按键处理程序用于检测按键输入,并根据按键值执行相应的操作。

比如,用户可以通过按键来增加或减少时间,设置闹钟等。

4.LCD显示程序:LCD显示程序用于控制LCD显示屏的显示内容。

在本设计中,我们使用了点阵字符库,将时间信息以字符的形式显示在LCD屏上。

四、测试与验证为了确保我们的电子万年历设计正确无误,我们进行了以下的测试和验证:1.硬件测试:首先,我们对硬件电路进行了测试,确保每个模块都能正常工作。

基于51单片机的万年历设计

基于51单片机的万年历设计

基于51单片机的万年历设计一、系统设计方案本万年历系统主要由 51 单片机、时钟芯片、液晶显示屏、按键等部分组成。

51 单片机作为核心控制器,负责整个系统的运行和数据处理。

时钟芯片用于提供精确的时间信息,液晶显示屏用于显示万年历的相关内容,按键则用于设置时间和功能切换。

二、硬件设计1、单片机选型选用常见的 51 单片机,如 STC89C52 单片机,它具有性能稳定、价格低廉、易于编程等优点。

2、时钟芯片选择 DS1302 时钟芯片,该芯片能够提供高精度的实时时钟,具有闰年补偿功能,并且可以通过串行接口与单片机进行通信。

3、液晶显示屏采用 1602 液晶显示屏,能够清晰地显示字符和数字,满足万年历的显示需求。

4、按键电路设计四个按键,分别用于时间设置、功能切换、加和减操作。

三、软件设计1、主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、时钟芯片初始化、液晶显示屏初始化等。

然后读取时钟芯片中的时间数据,并在液晶显示屏上显示出来。

接着进入循环,不断检测按键状态,根据按键操作执行相应的功能,如时间设置、功能切换等。

2、时钟芯片驱动程序通过单片机的串行接口向 DS1302 发送命令和数据,实现对时钟芯片的读写操作,获取准确的时间信息。

3、液晶显示屏驱动程序编写相应的函数,实现对1602 液晶显示屏的字符和数字显示控制。

4、按键处理程序采用扫描方式检测按键状态,当检测到按键按下时,执行相应的按键处理函数,实现时间设置和功能切换等操作。

四、时间设置功能通过按键操作进入时间设置模式,可以分别设置年、月、日、时、分、秒等信息。

在设置过程中,液晶显示屏会显示当前设置的项目和数值,并通过加、减按键进行调整。

设置完成后,将新的时间数据保存到时钟芯片中。

五、显示功能万年历的显示内容包括年、月、日、星期、时、分、秒等信息。

通过合理的排版和显示控制,使这些信息在液晶显示屏上清晰、直观地呈现给用户。

六、系统调试在完成硬件和软件设计后,需要对系统进行调试。

(完整版)基于51单片机的万年历的设计

(完整版)基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING目录第一部分课程设计任务书 (1)一、课程设计题目 (1)二、课程设计时间 (1)三、实训提交方式 (1)四、设计要求 (1)第二部分课程设计报告 (2)一、单片机发展概况 (2)二、MCS-51单片机系统简介 (2)三、设计思想 (3)四、硬件电路设计 (3)1. 总体设计 (3)2. 晶振电路 (4)3. 复位电路 (4)4. DS1302时钟电路 (5)5. 温度采集系统电路 (5)6. 按键调整电路 (6)7. 闹钟提示电路 (6)五、软件设计框图 (7)六、程序源代码 (8)1. 主程序 (8)2. 温度控制程序 (11)3. 日历设置程序 (13)4. 时钟控制程序 (18)5. 显示设置程序 (20)七、结束语 (23)八、课程设计小组分工 (23)九、参考文献 (23)第一部分课程设计任务书一、课程设计题目用中小规模集成芯片设计制作万年历。

二、课程设计时间五天三、实训提交方式提交实训设计报告电子版与纸质版四、设计要求(1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。

(2)可通过键盘自动调整时间。

(3)具有闹钟功能。

(4)能够显示环境温度,误差小于±1℃(5)计时精度:月误差小于20秒。

第二部分课程设计报告一、单片机发展概况单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段:第一阶段(1976-1978):初级单片机微处理阶段。

该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。

第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。

第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。

微机原理课程设计---万年历设计

微机原理课程设计---万年历设计

微机原理课程设计---万年历设计目录目录.....................................................1、课程设计内容 (1)1.1任务要求 (1)1. 2方案选择 (1)1. 3项目进度计划 (2)2、硬件选型及电路设计 (3)2. 1硬件的选型 (3)2.2电路的设计 (4)3.系统软件设计 (10)3.1 DS1302读写程序设计 (10)3.2 PCB板设计源文件及原理图展示 (12)4.课程设计总结 (13)4. 1 本人在项目实现中的分工 (13)4.2 个人遇到的困难与获得的主要成果 (14)4.3 课程设计完成结果分析与个人小结 (14)参考文献 (15)1 课程设计内容1.1任务要求目的系统以AT89S52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,从而以达到对时间计时,完成万年历的基本功能。

背景二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。

电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。

所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。

由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。

随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。

它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用STC89C52单片机作为核心,功耗小,能在5V的低压工作,电压可选用4.5~5.5V电压供电。

万年历单片机课程设计报告

万年历单片机课程设计报告

1 任务和设计要求首先要学会安装软件, 要熟悉会使用。

2 系统设计系统框图3 硬件设计3.1 电路原理图3.2 主要单元电路3.3 元件清单4 软件设计4.1 程序流程图4.2程序清单TIME_WEEK DATA 52H TIME_YEAR DATA 5DH TIME_MONTH DATA 5EH TIME_DATA DATA 5FH YEARH DATA 36HYEAR DATA 35H MONTH DATA 34HDAY DATA 33HHOUR DATA 32H MINUTE DATA 31HSEC DATA 30HAAA BIT P3.0BBB BIT P3.1AA BIT P3.3BB BIT P3.4CC BIT P3.5BL BIT P3.2BZ1 BIT 21H.0 TIMES DATA 20H COM DATA P1 ORG 0000HLJMP START ORG 0003H RETIORG 000BH LJMP INTT0ORG 0013H RETIORG 001BH RETIORG 0023H RETISTART:MOV R0,#30H MOV R7,#9 CLEETE:MOV @R0,#00H INC R0DJNZ R7,CLEETE MOV TIMES,#00H MOV TMOD,#01H MOV TL0,#0C0H MOV TH0,#63H MOV SEC,#0MOV MINUTE,#0H MOV HOUR,#0H MOV DAY,#01H MOV MONTH,#01H MOV YEAR,#01H MOV YEARH,#20H SETB EASETB ET0SETB TR0MOV R4,#19 START1:CALL DISPJNB AA,SETMM1 JMP START1 SETMM1:CALL SETMMJMP START1 SETMM:CALL DISPCALL DISPJB AA,SETMM0 SETMM2:JNB AA,SETMM3CLR ET0CLR TR0MOV SEC,#0MOV TIMES,#01H MOV R0,#MINUTE SETMM4:NOPINC22:CALL OFFLCALL INC11CALL DISPJB AA,INC22CALL DISPJB AA,INC22INC R0MOV A,TIMESRL AMOV TIMES,AJNB TIMES.5, SETMM4 SETMM12:JNB AA , SETMM11 SETMM0:SETB TR0SETB ET0RETSETMM11:CALL DISPJMP SETMM12 SETMM3:CALL DISPJMP SETMM2INC11:MOV R3,#40INC111:MOV A,@R0JB BB,INC17ADD A,#1DA ACALL INC000INC13:JNB BB , INC14INC17:MOV @R0,A CALL DISP DJNZ R3,INC111RETINC14:CALL DISP JMP INC13 OFFL:MOV 22H,@R0 MOV R6,#10 OFF1:MOV R7,#10OFF2:MOV @ R0, # 0AAH CALL DISPDJNZ R7 , OFF2DJNZ R6 , OFF1MOV @ R0 , 22H RETINC000:JB TIMES.0, INC001 JB TIMES.1, INC002 JB TIMES.2, INC003 JB TIMES.3, INC004 JB TIMES.4, INC005 JMP INCOUTINC005:CJNE A, #99H, INCOUT MOV A,#00H JMP INCOUT INC004:CJNE A, # 13H, INCOUT MOV A,#01H JMP INCOUTINC003:CJNE A,# 32H ,INCOUT MOV A,#01H JMP INCOUT INC002:CJNE A,#24H,INCOUT MOV A,#00H JMP INCOUT INC001:CJNE A,# 60H , INCOUT MOV A,#00H INCOUT:RETINTT0:PUSH ACC PUSH PSWORL TL0,#0C0HMOV TH0,#63H DJNZ R4 , CLKE111 JMP LOOP11 CLKE111:JMP CLKELOOP11:MOV R4,#19H MOV A,SECADD A,#1DA AMOV SEC,A CJNE A, #60H , CLKE99 MOV SEC,#0 MOV A,MINUTE ADD A,#1DA AMOV MINUTE,A CLK0:CJNE A, # 60H, CLKE MOV MINUTE,#0 MOV A,HOURADD A,#1DA AMOV HOUR,ACJNE A, # 24H, CLKE MOV HOUR,#0 MOV A,DAYADD A,#1DA AMOV DAY,A MOV A,MONTH INC AMOVC A, @A + PC SJMP CLK1DB 31H,28H,31H DB 30H,31H,30H DB 31H,31H,30H DB 00H,00H,00H DB 00H,00H,00H DB 31H,30H,31H CLK1:CLR CSUBB A,DAYJNC CLKEMOV A,MONTH CJNE A,#2,CLK3MOV A,YEAR ANL A,#13HJNB ACC.4,CLK2ADD A,#2CLK2:ANL A,#3JNZ CLK3MOV A,DAY XRL A,#29HJZ CLKECLK3:MOV DAY,#1 MOV A,MONTH ADD A,#1DA AMOV MONTH,A CJNE A,#13H,CLKE MOV MONTH,#1 MOV A,YEAR ADD A,#1DA AMOV YEAR,A CLKE99:CALL CONVERT CLKE:POP PSW POP ACC RETIDISP:PUSH PSW PUSH ACC MOV 23H,R0 DISP99:MOV R1,#40H MOV R0,#30H MOV R2,#9 DISP1:MOV A,@R0ANL A,#0FHMOV @R1,AMOV A,@R0SWAP AANL A,#0FHINC R1MOV @R1,ADJNZ R2,DISP2 CALL DISPLAYMOV R0,23HPOP ACCPOP PSWRETDISP2:INC R1INC R0JMP DISP1 DISPLAY:MOV R1,#40HMOV R5,#19SETB AAAPLAY:SETB BBBNOPCLR BBBCLR AAAMOV A,@R1MOV DPTR,#TAB MOVC A,@A+DPTR MOV COM,ACALL DL1MSMOV COM,#0FFHDJNZ R5,PLAY1CLR BBBSETB AAARETPLAY1:INC R1JMP PLAYTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0A3H,8EH,0ABH DL1MS:MOV 25H,R7MOV 24H,R6MOV R7,#20DS1:MOV R6,#10DJNZ R6,$DJNZ R7,DS1MOV R7,25HMOV R6,24HRETSTART_YEAR EQU 01 CONVERT_YEAR DATA 5CH CONVERT_MONTH DATA 38H CONVERT_DATE DATA 37H TEMP_BYTE1 DATA 57H TEMP_BYTE2 DATA 58H TEMP_BYTE3 DATA 59H TEMP_BYTE4 DATA 5AH TEMP_BYTE5 DATA 5BH CONVERT:MOV A, YEARMOV TIME_YEAR,AMOV A,MONTHMOV TIME_MONTH,AMOV A,DAYMOV TIME_DATA,AMOV A,TIME_YEARMOV B,#16DIV ABMOV CONVERT_YEAR,B MOV B,#10MUL ABADD A,CONVERT_YEARMOV CONVERT_YEAR,AMOV A,TIME_MONTHJNB ACC.4,CON_02CLR ACC.4ADD A,#10CON_02:MOV CONVERT_MONTH,A MOV A,TIME_DATAMOV B,#16DIV ABMOV CONVERT_DATE,BMOV B,#10MUL ABADD A,CONVERT_DATEMOV CONVERT_DATE,AMOV DPTR,#MONTH_DATAMOV A,CONVERT_YEARCON_06:CLR CSUBB A,#START_YEARMOV B,#3MUL ABADD A,DPLMOV DPL,AMOV A,BADDC A,DPHMOV DPH,AMOV A, #2MOVC A, @A+DPTRCLR ACC.7MOV B, #32DIV ABMOV TEMP_BYTE1,AMOV TEMP_BYTE2,BMOV TEMP_BYTE3,#0MOV A,CONVERT_MONTH CJNE A,#10,CON_08CON_08:JC CON_09MOV TEMP_BYTE3,#1CON_09:MOV A,CONVERT_YEAR ANL A,#03HJNZ CON_10MOV A,CONVERT_MONTH LCALL GET_RUN_DAYS_LOW SJMP CON_12CON_10:MOV A,CONVERT_MONTH LCALL GET_DAYS_LOWCON_12:MOV B,CONVERT_DATE DEC BADD A,BMOV TEMP_BYTE4,AJNC CON_14INC TEMP_BYTE3CON_14:MOV A,TEMP_BYTE1 LCALL GET_DAYS_LOWDEC AADD A,TEMP_BYTE2MOV TEMP_BYTE5,AMOV A,CONVERT_MONTHCJNE A,TEMP_BYTE1,CON_20 MOV A,CONVERT_DATECJNE A,TEMP_BYTE2,CON_20 CON_20:JC CON_22LJMP CON_60CON_22:MOV A,CONVERT_YEAR JNZ CON_24MOV A,#100CON_24:DEC AMOV CONVERT_YEAR,A MOV A,DPLCLR CSUBB A,#3MOV DPL,AJNC CON_26DEC DPHCON_26:MOV A,TEMP_BYTE5 CLR CSUBB A,TEMP_BYTE4MOV TEMP_BYTE3,AMOV CONVERT_MONTH,#12 CLR F0CLR AMOVC A,@A+DPTRANL A,#0F0HSWAP A;MOV TEMP_BYTE4,AJZ CON_30MOV A, #2MOVC A , @A+DPTRMOV C, ACC.7MOV A, #1MOVC A, @A+DPTRRLC ASJMP CON_34CON_30:MOV A, #1MOVC A, @A+DPTRCON_34:MOV TEMP_BYTE5, A CON_40:MOV A, TEMP_BYTE5 RRC AMOV TEMP_BYTE5, AJC CON_42MOV B, #29SJMP CON_44CON_42:MOV B, #30CON_44:MOV A, TEMP_BYTE3 CLR CSUBB A, BJZ CON_46JNC CON_50CPL AINC ACON_46: INC AMOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_DATE, A MOV A, CONVERT_MONTH MOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_MONTH, A MOV A, CONVERT_YEAR MOV B, #10DIV ABSWAP AORL A, BMOV CONVERT_YEAR, A CALL WEEKRETCON_50:MOV TEMP_BYTE3, A JB F0, CON_52DEC CONVERT_MONTHCON_52:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE4, CON_54CPL F0CON_54:SJMP CON_40CON_60:MOV A, TEMP_BYTE4CLR CSUBB A, TEMP_BYTE5MOV TEMP_BYTE4, AJNC CON_62DEC TEMP_BYTE3CON_62:MOV CONVERT_MONTH, #1 CLR AMOVC A, @A+DPTRMOV TEMP_BYTE5, AANL A, #0F0HSWAP AXCH A, TEMP_BYTE5CLR F0ANL A, #0FHMOV TEMP_BYTE1, AMOV A, #1MOVC A, @A+DPTRMOV TEMP_BYTE2, AANL A, #0F0HORL A, TEMP_BYTE1SWAP AMOV TEMP_BYTE1, AMOV A, #2MOVC A, @A+DPTRMOV C, ACC.7MOV A, TEMP_BYTE2ANL A, # 0FHSWAP AMOV ACC.3, CMOV TEMP_BYTE2, ACON_70:MOV A, TEMP_BYTE2 RLC AMOV TEMP_BYTE2, AMOV A, TEMP_BYTE1RLC AMOV TEMP_BYTE1, AJC CON_72MOV B, #29SJMP CON_74CON_72:MOV B, #30CON_74:MOV A, TEMP_BYTE4CLR CSUBB A,BJNC CON_78MOV B, AMOV A, TEMP_BYTE3JZ CON_76DEC TEMP_BYTE3MOV TEMP_BYTE4, BSJMP CON_80CON_76:MOV A, TEMP_BYTE4 LJMP CON_46CON_78:MOV TEMP_BYTE4, ACON_80:MOV A, CONVERT_MONTH CJNE A, TEMP_BYTE5, CON_82 CPL F0JNB F0, CON_82SJMP CON_70CON_82:INC CONVERT_MONTH SJMP CON_70GET_DAYS_LOW:MOVC A, @A+PCRETDB 0,31,59,90,120,151,181,212,243,17,48,78 GET_RUN_DAYS_LOW:MOVC A, @A+PCRETDB 0,31,60,91,121,152,182,213,244,18,49,79 MONTH_DATA:DB 04DH,04AH,0B8H;2001DB 00DH,04AH,04CH;2002DB 00DH,0A5H,041H;2003DB 025H,0AAH,0B6H;2004DB 005H,06AH,049H;2005DB 07AH,0ADH,0BDH;2006DB 002H,05DH,052H;2007DB 009H,02DH,047H;2008DB 05CH,095H,0BAH;2009DB 00AH,095H,04EH;2010DB 00BH,04AH,043H;2011DB 04BH,055H,037H;2012 DB 00AH,0D5H,04AH;2013 DB 095H,05AH,0BFH;2014 DB 004H,0BAH,053H;2015 DB 00AH,05BH,048H;2016 DB 065H,02BH,0BCH;2017 DB 005H,02BH,050H;2018 DB 00AH,093H,045H;2019 DB 047H,04AH,0B9H;2020 DB 006H,0AAH,04CH;2021 DB 00AH,0D5H,041H;2022 DB 024H,0DAH,0B6H;2023 DB 004H,0B6H,04AH;2024 DB 069H,057H,03DH;2025 DB 00AH,04EH,051H;2026 DB 00DH,026H,046H;2027 DB 05EH,093H,03AH;2028 DB 00DH,053H,04DH;2029 DB 005H,0AAH,043H;2030 DB 036H,0B5H,037H;2031 DB 009H,06DH,04BH;2032 DB 0B4H,0AEH,0BFH;2033DB 004H,0ADH,053H;2034 DB 00AH,04DH,048H;2035 DB 06DH,025H,0BCH;2036 DB 00DH,025H,04FH;2037 DB 00DH,052H,044H;2038 DB 05DH,0AAH,038H;2039 DB 00BH,05AH,04CH;2040 DB 005H,06DH,041H;2041 DB 024H,0ADH,0B6H;2042 DB 004H,09BH,04AH;2043 DB 07AH,04BH,0BEH;2044 DB 00AH,04BH,051H;2045 DB 00AH,0A5H,046H;2046 DB 05BH,052H,0BAH;2047 DB 006H,0D2H,04EH;2048 DB 00AH,0DAH,042H;2049 DB 035H,05BH,037H;2050 DB 009H,037H,04BH;2051 DB 084H,097H,0C1H;2052 DB 004H,097H,053H;2053 DB 006H,04BH,048H;2054 DB 066H,0A5H,03CH;2055DB 00EH,0A5H,04FH;2056 DB 006H,0B2H,044H;2057 DB 04AH,0B6H,038H;2058 DB 00AH,0AEH,04CH;2059 DB 009H,02EH,042H;2060 DB 03CH,097H,035H;2061 DB 00CH,096H,049H;2062 DB 07DH,04AH,0BDH;2063 DB 00DH,04AH,051H;2064 DB 00DH,0A5H,045H;2065 DB 055H,0AAH,0BAH;2066 DB 005H,06AH,04EH;2067 DB 00AH,06DH,043H;2068 DB 045H,02EH,0B7H;2069 DB 005H ,02DH, 04BH; 2070 DB 08AH, 095H, 0BFH; 2071 DB 00AH, 095H, 053H; 2072 DB 00BH, 04AH, 047H; 2073 DB 06BH, 055H, 03BH; 2074 DB 00AH, 0D5H, 04FH; 2075 DB 005H, 05AH, 045H; 2076 DB 04AH, 05DH, 038H; 2077DB 00AH, 05BH, 04CH; 2078 DB 005H, 02BH, 042H; 2079 DB 03AH, 093H, 0B6H; 2080 DB 006H, 093H, 049H; 2081 DB 077H, 029H, 0BDH; 2082 DB 006H, 0AAH, 051H; 2083 DB 00AH, 0D5H, 046H; 2084 DB 054H, 0DAH, 0BAH; 2085 DB 004H, 0B6H, 04EH; 2086 DB 00AH, 057H, 043H; 2087 DB 045H, 027H, 038H; 2088 DB 00DH, 026H, 04AH; 2089 DB 08EH, 093H, 03EH; 2090 DB 00DH, 052H, 052H; 2091 DB 00DH, 0AAH, 047H; 2092 DB 066H, 0B5H, 03BH; 2093 DB 005H, 06DH, 04FH; 2094 DB 004H, 0AEH, 045H; 2095 DB 04AH, 04EH, 0B9H; 2096 DB 00AH, 04DH, 04CH; 2097 DB 00DH, 015H, 041H; 2098 DB 02DH, 092H, 0B5H; 2090DB 00DH, 053H, 049H; 2100 TIME_WEEK1 DATA 52H WEEK:MOV A, TIME_YEARMOV B, #16DIV ABMOV TEMP_BYTE1, BMOV B, #10MUL ABADD A, TEMP_BYTE1MOV TEMP_BYTE1, AMOV A, TIME_MONTHJB ACC.7, GETW02MOV A, #100ADD A, TEMP_BYTE1MOV TEMP_BYTE1, AMOV A, TIME_MONTHCLR ACC.7GETW02: JNB ACC.4, GETW04 ADD A , #10CLR ACC.4GETW04: MOV TEMP_BYTE2,AMOV A, TIME_DATAMOV B, #16DIV ABMOV TEMP_BYTE3, BMOV B, #10MUL ABADD A, TEMP_BYTE3MOV TEMP_BYTE3, AMOV A ,TEMP_BYTE1ANL A, #03HJNZ GETW10MOV A, TEMP_BYTE2CJNE A, #3,GETW06GETW06: JNC GETW10DEC TEMP_BYTE3GETW10: MOV A,TEMP_BYTE2 LCALL GET_CORRECTADD A, TEMP_BYTE1MOV B, #7DIV ABMOV A, TEMP_BYTE1ANL A, #0FCHRR ARR AADD A, BADD A, TEMP_BYTE3 MOV B, #7DIV ABMOV A, BCJNE A, #0,OUTOUT MOV B, #8 OUTOUT:MOV TIME_WEEK, B RETGET_CORRECT: MOVC A, @A+PC RETDB 0,3,3,6,1,4,6,2,5,0,3,5 END5 系统仿真及调试6 仿真结果及分析上图为运行时的显示, 左边两个数码管显示器显示的是年、月、日, 中间的显示的是时、分、秒, 右边显示的是农历日期以及星期。

基于STM32单片机的万年历设计毕业设计论文

基于STM32单片机的万年历设计毕业设计论文

万年历是一种可以显示年、月、日、星期的电子设备,广泛应用于日常生活和办公场所。

本文将介绍一个基于STM32单片机的万年历的设计思路和实现过程。

首先,我们需要明确设计目标。

在这个项目中,我们的目标是使用STM32单片机开发一个功能齐全、易于操作的万年历。

具体地说,这个万年历应该能够显示当前的年、月、日和星期,并且能够进行日期的加减操作,同时应该具备一些辅助功能如闹钟设置、倒计时等。

接下来,我们需要进行硬件设计。

首先需要选择适当的显示屏,比如常见的LCD或OLED屏幕。

然后,我们需要选择合适的按键和外部触发器,用于用户的交互输入。

同时,还需要添加一些必要的接口,如USB接口用于数据传输和维护。

在软件设计方面,我们需要定义合适的数据结构来存储日期、时间、闹钟等信息。

同时,需要编写相应的程序来实现日期的显示和更新、日期的加减、闹钟的设置等功能。

在实现倒计时功能时,我们可以使用定时器中断来实现精确的计时。

此外,为了提高用户体验,我们可以添加一些额外的功能。

比如,我们可以为万年历设计一个简洁美观的用户界面,考虑使用图形库绘制用户界面元素。

同时,可以添加一些实用的功能如温湿度监测、天气预报等。

最后,在整个开发流程结束后,我们需要进行集成测试和调试,确保万年历的各项功能正常运行。

并且,我们还可以考虑为万年历添加一些优化和改进措施,如增加存储容量、优化节能技术等。

综上所述,基于STM32单片机的万年历设计主要涉及硬件设计和软件设计两个方面。

通过精心的设计和合理的实现,我们可以开发出一款功能丰富、易于使用的万年历产品,满足用户的各种需求。

单片机万年历课程设计

单片机万年历课程设计

单片机万年历课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和万年历的功能需求。

2. 使学生掌握单片机编程的基本语法和逻辑结构。

3. 帮助学生掌握如何在单片机上实现日期、时间的计算与显示。

技能目标:1. 培养学生运用单片机进行项目设计的能力,特别是万年历的实际应用。

2. 培养学生独立编程和调试程序的能力,解决实际项目中遇到的问题。

3. 提高学生团队协作能力和项目管理的意识。

情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发学生的创新意识和探索精神。

2. 增强学生面对困难的勇气和毅力,培养他们积极解决问题的态度。

3. 通过团队合作,培养学生的集体荣誉感和责任感。

课程性质:本课程为实践性强的设计与制作课程,以单片机技术为核心,结合编程和电子技术,实现万年历的制作。

学生特点:学生为高年级学生,已具备一定的单片机基础知识,有编程基础,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手操作和实际应用。

教学过程中要关注学生的个体差异,提供适当的指导与帮助,确保每个学生都能在原有基础上得到提升。

通过课程学习,使学生能够将所学知识应用于实际项目中,达到学以致用的目的。

二、教学内容1. 单片机基础回顾:复习单片机的硬件结构、工作原理及I/O口编程。

- 教材章节:第三章单片机硬件结构与工作原理;第四章I/O口编程。

2. 定时器与中断:学习单片机定时器的工作原理,掌握中断编程方法。

- 教材章节:第五章定时器与中断;第六章中断编程。

3. 日期时间计算:讲解日期时间的计算方法,如何在单片机中进行实现。

- 教材章节:第七章日期时间计算;第八章单片机实现日期时间计算。

4. 显示技术:学习LED显示技术,掌握动态扫描显示方法。

- 教材章节:第九章LED显示技术;第十章动态扫描显示。

5. 万年历设计与实现:结合所学知识,设计并实现单片机万年历。

- 教材章节:第十一章项目设计与实现;第十二章万年历设计与制作。

单片机万年历毕业设计

单片机万年历毕业设计

单片机万年历是一种非常实用的电子设备,它可以准确地显示日期和时间,并且可以自动调整闰年和月份的天数。

在现代社会,随着人们生活水平的提高和科技的发展,电子设备在人们的日常生活中发挥着越来越重要的作用。

在这种背景下,单片机万年历应运而生,它不仅可以帮助人们准确地了解日期和时间,还可以提醒人们重要的日程安排。

单片机万年历的设计原理是通过单片机的控制,实现对时钟芯片的读取和控制,从而实现准确的时间显示。

同时,通过编程控制,还可以实现闰年和月份天数的自动调整功能。

为了实现更加精确的时间显示,可以通过连接网络进行时间同步,从而保证万年历的准确性。

单片机万年历的设计需要考虑多个方面,包括硬件设计和软件设计。

在硬件设计方面,需要选择适合的单片机和时钟芯片,同时还需要设计合适的电路板和显示屏,以及其他必要的外围电路。

在软件设计方面,需要编写相应的程序代码实现对时钟芯片的读取和控制,并实现闰年和月份天数的自动调整功能。

此外,还可以添加一些其他功能,如闹钟、倒计时等,以增加万年历的实用性和娱乐性。

在进行单片机万年历的毕业设计过程中,需要注意以下几个关键点。

首先,要确保硬件电路的正常工作,包括各个元件的连接和供电的稳定性。

其次,要确保编写的软件程序能够准确地读取和显示时间,并能够自动调整闰年和月份天数。

再次,要确保设计的功能实用性和稳定性,如闹钟功能的准点提醒、倒计时功能的精确计算等。

最后,还需要注意外观的美观性和易用性,以增加用户的满意度和使用体验。

综上所述,单片机万年历作为一种实用的电子设备,在现代社会中具有广泛的应用前景。

通过对硬件和软件的设计,可以实现准确的时间显示和自动调整功能,从而方便人们的日常生活和工作。

在进行单片机万年历的毕业设计过程中,需要注重电路的稳定性和软件的功能完善性,并通过实际测试和调试,不断优化设计,以实现更好的效果。

希望通过这篇文献,能够为单片机万年历的毕业设计提供一些参考和帮助。

单片机课程设计电子万年历

单片机课程设计电子万年历

单片机课程设计电子万年历随着科技的不断发展,电子技术已经成为人们生活、工作不可或缺的一部分。

而单片机则是电子技术中的重要组成部分。

随着单片机技术的不断升级,我们可以将其应用到更多的领域中,比如电子万年历。

电子万年历是一种集成了日期、时间和闹钟等功能的电子设备,它可以准确地显示时间,并且可以进行时间的调整、计数和闹钟的设置。

电子万年历通常采用单片机控制芯片和准确的时钟芯片,可以实现精确的时间测量和计算。

在单片机课程设计中,电子万年历是一种常见的课程设计项目,它涉及到单片机的基础知识、控制芯片的编程、外围设备的接口以及显示器的驱动等方面。

下面将详细介绍如何设计一款功能齐全、性能稳定的电子万年历。

一、硬件设计电子万年历的硬件设计包括单片机控制芯片的选型、时钟芯片的选型、LED数码管的选型以及外围电路的设计等方面。

1. 单片机控制芯片的选型单片机控制芯片是电子万年历的核心部分,它决定了万年历的计算性能和功能扩展能力。

在选型时,我们需要考虑芯片的性能、价格、开发工具的可用性以及支持的外围设备等因素。

常见的单片机控制芯片包括AT89S52、PIC16F877A、STM32、ARM等系列。

在实际应用中,我们可以根据项目需求进行选择。

2. 时钟芯片的选型时钟芯片是电子万年历中不可缺少的一部分,它决定了万年历的时间准确度和计算精度。

在选型时,我们需要考虑芯片的稳定性、精度、功耗和价格等因素。

常见的时钟芯片包括DS1302、DS1307、DS3231等。

这些芯片采用了时分秒、日月年等多种时间单位,可以满足不同计算需求。

3. LED数码管的选型LED数码管是电子万年历的显示设备,它决定了万年历的外观和显示效果。

在选型时,我们需要考虑LED数码管的亮度、颜色、尺寸和价格等因素。

常见的LED数码管包括共阳、共阴、四位、八位等多种类型。

在选型时,我们需要根据实际需求进行选择。

4. 外围电路的设计外围电路是电子万年历中的重要组成部分,它包括按键、蜂鸣器、电源管理等多个模块。

单片机课程设计--基于51单片机的万年历

单片机课程设计--基于51单片机的万年历

单片机课程设计--基于51单片机的万年历单片机课程设计基于 51 单片机的万年历一、引言在现代生活中,时间的准确记录和显示对于我们的日常生活和工作具有重要意义。

万年历作为一种能够同时显示年、月、日、星期、时、分、秒等信息的设备,给人们带来了极大的便利。

本次课程设计旨在利用 51 单片机实现一个简单实用的万年历系统。

二、系统设计方案(一)硬件设计1、单片机选型选择经典的 51 单片机,如 STC89C52 单片机,其具有性能稳定、价格低廉、资源丰富等优点,能够满足本设计的需求。

2、显示模块采用液晶显示屏(LCD1602)作为显示设备,能够清晰地显示数字和字符信息。

3、时钟芯片选用DS1302 时钟芯片,它可以提供精确的实时时钟数据,包括年、月、日、星期、时、分、秒等。

4、按键模块设置三个按键,分别用于调整时间、选择调整项(年、月、日、时、分、秒等)以及切换显示模式(正常显示和设置模式)。

(二)软件设计1、主程序流程系统初始化后,首先读取 DS1302 中的时间数据,并将其显示在LCD1602 上。

然后进入循环,不断检测按键状态,根据按键操作进行相应的时间调整和显示模式切换。

2、时间读取与显示程序通过与 DS1302 进行通信,读取实时时间数据,并将其转换为适合LCD1602 显示的格式进行显示。

3、按键处理程序检测按键的按下状态,根据不同的按键执行相应的操作,如调整时间、切换显示模式等。

三、硬件电路设计(一)单片机最小系统单片机最小系统包括单片机芯片、晶振电路和复位电路。

晶振电路为单片机提供时钟信号,复位电路用于系统初始化时将单片机的状态恢复到初始值。

(二)显示电路LCD1602 显示屏通过数据总线和控制总线与单片机相连。

数据总线用于传输要显示的数据,控制总线用于控制显示屏的读写操作和显示模式。

(三)时钟电路DS1302 时钟芯片通过串行通信接口与单片机进行通信。

单片机通过发送特定的指令和数据,对 DS1302 进行读写操作,获取或设置时间信息。

单片机课程设计_万年历

单片机课程设计_万年历

单片机系统课程设计成绩评定表设计课题:万年历学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:万年历专业班级:学生姓名:学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书摘要:随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活中。

日历是人们不可或缺的日常用品。

但一般日历都为纸制用品,使用不便,寿命不长。

电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。

本设计以AT89C52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片,完成时间的调整和掉电保护,全部信息用LED 数码管显示。

时间、日期调整由按键来实现。

日历能显示阳历和时、分、秒。

关键词:万年历;52系列单片机;时钟芯片目录1 概述 (1)2 总体方案设计 (1)2.1 方案1——基于AT89C52单片机的万年历设计 (1)2.2 方案2——基于AT89C52单片机和DS1302的万年历设计 (2)2.3 总体方案 (2)3 硬件电路设计 (3)3.1 主控器 AT89C52 (3)3.1.1 AT89C52的主要性能 (4)3.1.2 AT89C52的引脚及其功能 (4)3.2 时钟电路的设计 (7)3.2.1 DS1302的性能特性 (7)3.3.2 DS1302数据操作原理 (8)3.3 显示电路的设计 (10)3.4 键盘接口的设计 (12)4 系统软件设计 (12)4.1 主程序设计 (13)4.2 中断服务程序设计 (13)4.3 子程序设计 (14)4.3.1 延时子程序 (14)4.3.2 数码管动态扫描子程序 (14)4.3.3 定时器初始化子程序 (15)4.3.4 键盘扫描子程序 (15)4.3.5 显示子程序 (16)5 系统调试与总结 (16)参考文献 (19)附录A 源程序 (20)附录B 系统原理图 (29)1 概述在日新月异的21世纪里,家用电子产品得到了迅速发展。

单片机课程设计-万年历

单片机课程设计-万年历

单片机课程设计题目名称:姓名:学号:系别:班级:指导老师:完成时间:华南理工大学广州学院课程设计任务书一、实现功能利用51单片机芯片和DS1302芯片设计电子万年历功能图如下通过四个按键输入调整,在LCD液晶模块上能显示阳历年、月、日、星期、时、分、秒和阴历月、日,在显示农历时间时,能标明是否为闰年。

当切断主5V电源时,由3.3V 备用电池供电,1302内时钟仍然工作。

当重新接上5V电源后,则可以实时显示当前时间。

二、开发环境操作系统:windows XP开发芯片:89C52RC+编译器:keil51三、硬件实现1、整体仿真图如下2、12864LCD12864采用8位并行数据传送方式,占用单片机的P0口。

由于P0口用作普通I/O口时为开漏输出,所以为了输出高电平,增大负载能力,需在每个P0位接一个上拉电阻,本设计中采用10K的排阻接线。

图中的RV1为LCD背光调节电位器,可调节屏幕的亮度。

3、DS13021脚接+5V电源;8脚接3.3V备份电源;2、3脚接晶振;4脚接地;5脚接P2.6;6脚接P2.4;7脚接P2.5;+5V工作时,DS1302的7脚时钟信号由单片机的P2.5口提供,当以3.3V工作时时钟由其2、3脚外接的晶振提供时钟,晶振的震荡频率为32.768KHz。

4、按键选择按键一端接P2.0,另一端接地;加按键一端接P2.1,另一端接地;减按键一端接P3.1,另一端接地;确定按键一端接P3.2,另一端接地;四、软件实现程序流程图如下1、农历为复杂的历法,因此适宜采用查表法进行编程;2、编程中接按键的四个管脚皆为查询方式,单片机上电默认为高电平,当按键按下去的时候变为低电平,输入有效,并执行相应的事件处理程序;3、12864采用8位并行数据传送方式,占用单片机的P0口;4、DS1302位一线串行方式,所以在编程中对时序的要求非常严格,应认真注意时序的先后;主要程序源代码uchar Read1302(uchar ADDRorCOMM){uchar dat;DS1302_RST=0; //禁止数据传输DS1302_SCLK=0; //确保写写之前SCLK被拉低DS1302_RST=1; //启动数据传输DS1302InputByte(ADDRorCOMM); //写入命令或地址dat=DS1302OutputByte(); // 读出数据DS1302_SCLK=1; //将时钟电平置于高电平状态置高是为了让下次写的时候能准确的被拉低保证电平状态的正确性//DS1302_RST=0; //禁止数据传输return(dat);}void Init_1302(void) //(2008年7月12日12时00分00秒星期六){uchar flag;flag=Read1302(0x81); //读秒寄存器if(flag&0x80) //CH为0(flag最高位是0),时钟走动,不用初始化。

万年历单片机课程设计-精品

万年历单片机课程设计-精品

课程设计任务书题目:万年历显示模块设计初始条件:具备电子电路的设计知识和能力;具备单片机系统的设计方法;具备单片机软件编程技术;熟悉单片机常用软件的使用;要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、了解并参与万年历电路的设计2、对万年历显示部分进行计算机仿真3、设计万年历显示电路4、具备时间、日期及星期的切换显示功能5、完成符合学校要求的设计说明书时间安排:设计时间2周,其中3天原理设计,3天仿真,3天电路调试,1天答辩指导教师签名:年月日系主任(或责任教师)签名:年月日摘要单片计算机即单片微型计算机。

由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本次课程设计包括AT89C51单片机最小系统包括复位和时钟电路及供电系统、LCD液晶显示电路。

利用相关设计软件进行原理图设计即利用Keil软件编程以及Proteus软件仿真来巩固单片机应用、模拟电路、数字电路课程及学会各种工程软件的使用。

关键字:单片机 AT89C51 DS1302目录1设计方案选择 (1)1.1控制部分的方案选择 (1)1.2 显示模块选择方案和论证 (1)1.3时钟芯片的选择方案和论证 (1)2系统的硬件设计与实现 (1)2.1 电路设计框图 (1)2.2 系统硬件概述 (2)2. 3 主要单元电路的器件 (2)2.3.1单片机主控制模块 (2)2.3.2时钟电路模块的设计 (3)2.3.3显示模块的设计 (5)2.3.4 实时时钟电路设计 (5)2.3.5 功能按钮设计 (6)3 整体电路图 (7)参考文献 (7)附件 (10)1设计方案选择1. 1控制部分的方案选择采用51系列的89C51单片机,89C51单片机有丰富的中断源和时基,方便本实验的设计。

基于51单片机电子万年历设计

基于51单片机电子万年历设计

一、引言电子万年历是一种以数字形式实时显示日期、星期和时间等信息的电子设备。

在现代人日常生活中,万年历是一种常见的小型电子产品。

本文将基于51单片机设计一款简单实用的电子万年历。

二、设计原理1.时钟模块:采用DS1302实时时钟模块。

DS1302通过三线式串行接口与51单片机进行通信,可以实时获取日期、星期和时间等信息。

2.显示模块:使用数码管显示日期、星期和时间等信息。

共使用四块共阳数码管,采用数码管模块进行驱动,通过IO口进行数据传输。

3.按键模块:设计四个按键,分别为设置、上、下和确定。

通过按键来调整日期、星期和时间等信息。

4.闹钟功能:加入闹钟功能,可以设定闹钟时间,到达设定时间时,会有提示音。

5.温湿度传感器:加入温湿度传感器,可以实时监测环境温湿度,并在数码管上进行显示。

6.外部电源:由于51单片机工作电压较高,需要使用外部电源进行供电。

三、硬件设计1.电源电路:使用稳压电源芯片LM7805进行5V稳压,将稳压后的电压供给单片机和各个模块。

2.时钟模块:DS1302模块与单片机通过串行通信进行连接。

时钟模块上的时钟信号、数据信号和复位信号分别与单片机的IO口相连。

3.数码管显示模块:共有四块共阳数码管,通过595芯片进行驱动。

单片机的IO口与595芯片的串行、时钟和锁存引脚相连,595芯片的输出引脚与数码管的各段相连。

4.按键模块:通过电阻分压来实现按键功能,按下按键时,相应的IO口会被拉低。

5.闹钟功能:使用蜂鸣器来产生提示音,通过IO口与单片机相连。

6.温湿度传感器:使用DHT11温湿度传感器。

传感器的数据引脚通过IO口与单片机相连。

四、软件设计1.时钟显示:通过DS1302获取日期、星期和时间等信息,将其转化为数码管需要的编码格式,并通过595芯片进行显示。

2.按键操作:对按键进行扫描,根据按键的不同操作进行相应的处理。

例如按下设置键进行日期和时间的设置,按下上下键进行数值的变化,按下确定键进行数值的确认。

单片机课程设计万年历

单片机课程设计万年历

项目一万年历一、任务目的通过对万年历的设计和制作,应用了单片机的数码管、键盘接口技术,以及定时/计数器、中断等程序设计技术,进一步训练了单片机并行I/O端口的应用能力、循环程序设计、键盘查询程序设计和调试能力,让同学们初步了解了作为单片机的重要输入设备——键盘接口技术和程序设计方法。

二、设计要求用单片机设计一个在数码管能同时显示年月日时分秒,具体要求:根据提供的单片机,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。

三、系统硬件电路设计可分为最小系统、数码管显示、按键三个单元电路,要求画出各部分电路图,写出工作原理。

最小系统:数码管显示:按键:四、软件设计主流程图:流程图:软件设计有三部分:计时(区分大小月与平月)、显示、校时(使用按键)。

#include <reg51.h>unsigned char msec,sec,min,hou,day=20,mon=3,ci;/*定义msec为50ms计数变量,sec为秒变量,min为分变量,hou为时变量,day 为天变量,mon为月变量,ci为循环次数*/int year=2013;/*定义year为年变量,定义起始年为2013年*/sbit P30=P3^0;/*通过sbit定义可位寻址变量*/sbit P32=P3^2;sbit P33=P3^3;sbit P34=P3^4;void delay(unsigned char i)/*延时函数,当i=1时,延时255微秒*/ { unsigned char j,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}//函数名:T0_INT//函数功能:定时器0中断函数,50ms定时时间到,自动执行该函数,判断是否中断20次//形式参数:无//返回值:无void T0_INT() interrupt 1//定时器0中断类型号为1{TH0=0x3c; //50ms定时初值TL0=0xb0;msec++; //中断次数增1if(msec==20) //中断次数为20次么?{msec=0; //是,1s计时到,50ms计数变量清零sec++; //秒变量加1if(sec==60) //到60s么?{sec=0; //是,1分计时到,秒变量清零min++; //分变量加1if(min==60) //到60分么?{ min=0; //是,1小时计时到,分变量清零hou++; //时变量加1if(hou==24) //到24时么?{ hou=0; //是,1天计时到,时变量清零day++; //天变量加1if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) //月是为1,3,5,7,8,10,12么?{if(day==32){day=1;mon++;} } //是,天到32么?是,天变量复位为1,月变量加1else if( mon==2) //月是为2么?{if(day==29){day=1;mon++;}} //是,天到29么?是,天变量复位为1,月变量加1else //月是为4,6,9,11么?{if(day==31){day=1;mon++;}} //是,天到31么?是,天变量复位为1,月变量加1if(mon==13) //月到13么?{ mon=1; //是,1年计时到,月变量复位到1year++;}}}}}} //年变量加1void main() //主函数{unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f};//定义数字0~9字型显示码,数码管共阴TMOD=0x01; //定时器0工作方式1TR0=1; //启动定时器TH0=0x3c; //50ms定时初值TL0=0xb0;EA=1; //开总中断ET0=1; //定时器0中断while(1){if(P30==1) //P3.0=1么?(开关是开启的么?){ for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[sec%10];delay(2); //选中P2为0x00时控制的数码管,显示秒个位P2=0x01;P0=led[sec/10];delay(2); //选中P2为0x01时控制的数码管,显示秒十位P2=0x02;P0=led[min%10];delay(2); //选中P2为0x02时控制的数码管,显示分个位P2=0x03;P0=led[min/10];delay(2); //选中P2为0x03时控制的数码管,显示分十位P2=0x04;P0=led[hou%10];delay(2); //选中P2为0x04时控制的数码管,显示时个位P2=0x05;P0=led[hou/10];delay(2);} //选中P2为0x05时控制的数码管,显示时十位if(P32==0) //P3.2=0么?按钮按下么?{delay(55);if(P32==0) {sec++;}if(sec==60) {sec=0;}} //是,延时55*255um;P3.2=0么?是,秒变量加1;秒到60么?是,秒变量清零if(P33==0) //P3.3=0么?按钮按下么?{delay(55);if(P33==0) {min++;}if(min==60) {min=0;}} //是,延时55*255um;P3.3=0么?是,分变量加1;分到60么?是,分变量清零if(P34==0) //P3.4=0么?按钮按下么?{delay(55);if(P34==0) {hou++;}if(hou==24) {hou=0;}}} //是,延时55*255um;P3.4=0么?是,时变量加1;时到24么?是,时变量清零else if(P30==0) //P3.0=0么?(开关是闭合的么?){for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[day%10];delay(2); //选中P2为0x00时控制的数码管,显示天个位P2=0x01;P0=led[day/10];delay(2); //选中P2为0x01时控制的数码管,显示天十位P2=0x02;P0=led[mon%10];delay(2); //选中P2为0x02时控制的数码管,显示月个位P2=0x03;P0=led[mon/10];delay(2); //选中P2为0x03时控制的数码管,显示月十位P2=0x04;P0=led[year%10];delay(2); //选中P2为0x04时控制的数码管,显示年个位P2=0x05;P0=led[year/10%10];delay(2); //选中P2为0x05时控制的数码管,显示年十位P2=0x06;P0=led[year/100%10];delay(2); //选中P2为0x06时控制的数码管,显示年百位P2=0x07;P0=led[year/1000];delay(2);} //选中P2为0x07时控制的数码管,显示年千位if(P32==0) //P3.2=0么?按钮按下么?{delay(50);if(P32==0){day++;}if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10|| mon==12) //是,延时50*255um;P3.2=0么?是,天变量加1;月是为1,3,5,7,8,10,12么?{if(day==32){day=1;} } //是,天到32么?是,天变量复位为1else if( mon==2) //月是为2么?{if(day==29){day=1;}} //是,天到29么?是,天变量复位为1else //月是为4,6,9,11么?{if(day==31){day=1;}}} //是,天到31么?是,天变量复位为1if(P33==0) //P3.3=0么?按钮按下么?{delay(50);if(P33==0) {mon++;}if(mon==13) {mon=1;}} //是,延时50*255um;P3.3=0么?是,月变量加1;月到13么?是,月变量复位为1if(P34==0) //P3.4=0么?按钮按下么?{delay(50);if(P34==0) {year++;}}} //是,延时50*255um;P3.3=0么?是,年变量加1;else {;}}}五、系统调试画proteus图,了解单片机最小系统,选用的元件有AT89C51,共阴的蓝色的8位数码管(7SEG-MPX8-CC-BLUE),三八译码器(74HC138),按钮(BUTTON),普通电容(CAP),极性电容(CAP-ELEC),晶体管(CRYSTAL),10K电阻(RES),排阻(RESPACK-8),单刀单匝开关(SWITCH),将电路连接完整。

单片机电子万年历课程设计

单片机电子万年历课程设计

单片机课程设计姓名:吕长明学号:04040804021专业班级:机电四班一、单片机原理及应用简介随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。

集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。

而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。

因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业控制系统、数据采集系统、自动测试系统、万年历电子表等。

二、系统硬件设计8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1:图1 8052引脚P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。

P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。

P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。

P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。

8052芯片管脚说明:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

郑州轻工业学院软件学院单片机与接口技术课程设计总结报告设计题目:电子万年历学生姓名:系别:专业:班级:学号:指导教师:2011年12月16日设计题目:电子万年历设计任务与要求:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能方案比较:方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C52单片机为控制中心,显示模块采用普通的共阴LED数码管,键输入采用中断实现功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。

方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD显示模块,电源电路、复位电路、晶振电路等模块。

主控模块采用AT89C52单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

两个方案工作原理大致相同,只有显示模块和时钟电路不同。

LED数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,清晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,若采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。

DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。

单片机有定时器的功能,但时间误差较大,且需要编写时钟程序,因此采用DS1302作为时钟电路。

对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

逻辑总框图:该电子万年历的总体设计框图如图(1)所示。

设计所需的元件:元件名称型号数量/个单片机 AT89C52 1时钟芯片 DS1302 1晶振 12MHz 1晶振 32.768kHz 1电容 30pF 2电容 22uF 1按键开关 4电阻 10K 9滑动变阻器 1K 1电池 1.5V 4LCD LCD1602 1电源Vcc +5V 1导线若干单元电路设计:1、主控制系统单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图(2)所示。

该单片机除了拥有MCS-51系列单片机的所有优点外,内部还具有8K的在系统可编程FLASH存储器,低功耗的空闲和掉电模式,极大的降低了电路的功耗,还包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。

整个系统结构紧凑,抗干扰能力强,性价比高。

2、时钟振荡电路时钟振荡电路图(3)所示,时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。

此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。

电路中两个电容C1、C2的作用使电路快速起振,提高电路的运行速度。

图(3)时钟振荡电路图图(4)复位电路3、复位电路复位电路由电阻和极性电容组成,如图(4)所示,通过高电平使单片机复位,在时钟电路开始工作后,当高电平的时间超过大约2us时,即可实现复位。

此复位电路为上电复位,较为简单。

若改进可以添加手动复位的功能,上电复位发生在开机加电时,由系统自动完成,手动复位通过一个按键来实现,在程序运行时,若遇到死机,死循环或程序“跑飞”等情况,通过手动复位就可以实现重新启动的操作。

手动按钮复位需要人为在复位输入端RST上加入高电平。

一般采用的办法是在RST端和正电源Vcc之间接一个按钮和一个电阻。

5、按键电路按键电路由四个轻触开关组成,如图(9)所示。

按键用来调整时间,其一端直接接到单片机的端口,另一端接地,当按下按键时,相应的端口变为低电平,通过一个与门只要这四个按键有一个按下就会在P3.2检测到一低电平就触发外部中断0进入按键调节程序中,通过与个各键相连的端口P3.4_P3.7可以判断是哪个键按下,从而作相应的操作。

图(9) 按键电路6、显示电路1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

显示电路采用LCD1602液晶显示,如图(10)所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。

图(10) LCD1602显示电路LCD1602的特性+5V电压,对比度可调;内含复位电路;提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;有80字节显示数据存储器DDRAM;内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM;基本操作时序:读状态:输入:RS=L,RW=H,E=H;输出:DB0~DB7=状态字;写指令:输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码;输出:无。

读数据:输入:RS=H,RW=H,E=H;输出:DB0~DB7=数据;写数据:输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据;输出:无。

LCD1602的各种指令不再一一说明。

流程图与软件设计:1、程序流程图主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和日期,若没有按下,则执行下面的时间、日期的显示,最后依次循环这些相同的操作,相应流程图如图(11)所示:图(12)程序流程图按键的检测是通过中断的办法来实现,利用按键进行间调整。

K1按下则开始设置时间及日期,同时在第一行最右端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕,K4是确定键,设置好按下即可保存设置了。

2、软件设计软件总设计:主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。

接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。

软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。

因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。

具体程序见附件一:程序3、软件调试在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题,对于开发板上的液晶一般RW都接的地,故不需要读液晶状态,也不需要读忙,但在仿真中还是加上了这一部分。

还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题,整体电路与仿真结果分析:电子万年历硬件电路图及仿真如图(13)所示,系统由AT89C52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。

仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,,按K2键用于加1操作,K3键用于减1操作,K4是确定按钮。

仿真正确显示了时间和日期,符合设计的要求。

图(13)电子万年历硬件电路图结论与心得:在这学期的课程序设计中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手制作的能力,在各种其它能力上也都有了提高。

更重要的是,在课程序设计里,我们学会了很多学习的方法,知道了理论和实践的巨大差别。

而这是以后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

同时在与老师和同学的交流过程中,互动学习,将知识融会贯通。

通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。

参考文献图书类:[1] 张毅坤陈善久,单片微型计算机原理及应用西安电子科技大学出版社[2] 张毅刚,,彭喜元,单片机原理与应用设计电子工业出版社[3] 赵建领薛园园,零基础学单片机C语言程序设计机械工业出版社[4] 周向红 51单片机课程设计华中科技大学出版社,[5] 郭天祥 51单片机C语言教程-入门,提高,开发,拓展全攻略, 电子工业出版社[6] 赵亮侯国锐. 单片机C语言编程与实例人民邮电出版社程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P2^6;sbit rw=P2^5;sbit lcden=P2^7;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;uchar count,s1num;char shi,fen,miao,nian,yue,ri,xinqi;uchar code table[]=" 2014-01-10--5 ";uchar code table1[]=" 10:59:00";void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}bit lcd_busy() { bit result; rs = 0;rw = 1;lcden = 1; delay(5); result = (bit)(P0&0x80); lcden = 0; return result; }void write_com(uchar com){while(lcd_busy());rw=0;rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date) { while(lcd_busy());rw=0;rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;write_com(0x38);delay(1);write_com(0x0c);delay(1);write_com(0x06);delay(1);write_com(0x01);delay(1);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;//50msTL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}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 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 keyscan(){ if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4); }if(s1num==4){write_com(0x80+5);}if(s1num==5){write_com(0x80+7);}if(s1num==6){write_com(0x80+10);}if(s1num==7){write_com(0x80+14);}if(s1num==8){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4); }if(s1num==4){nian++;if(nian==100)nian=0;write_nyr(4,nian);write_com(0x80+4);}if(s1num==5){yue++;if(yue==13)yue=1;write_nyr(7,yue);write_com(0x80+7);}if(s1num==6){ri++;if(ri==31)ri=1;write_nyr(10,ri);write_com(0x80+10);}if(s1num==7){xinqi++;if(xinqi==8)xinqi=1;write_nyr(14,xinqi);write_com(0x80+14);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}if(s1num==4){nian--;if(nian==-1)nian=99;write_nyr(4,nian);write_com(0x80+4); }if(s1num==5){yue--;if(yue==0)yue=12;write_nyr(7,yue);write_com(0x80+7); }if(s1num==6){ri--;if(ri==0)ri=31;write_nyr(10,ri);write_com(0x80+10); }if(s1num==7){xinqi--;if(xinqi==0)xinqi=7;write_nyr(14,xinqi);write_com(0x80+14);}}}}}void main(){init();while(1){keyscan();if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}// while(1);} }void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++; }。

相关文档
最新文档