单片机课设万年历报告

合集下载

单片机实训报告万年历

单片机实训报告万年历

一、实训目的随着科技的发展,单片机在各个领域的应用越来越广泛。

本次实训旨在通过万年历的设计与实现,让学生深入了解单片机的编程与应用,提高学生的实践能力和创新意识。

通过万年历的设计,使学生掌握单片机的基本原理、编程技巧以及相关外设的使用。

二、实训内容本次实训以AT89C51单片机为核心,结合DS1302时钟芯片、LCD1602液晶显示屏和独立键盘,设计并实现一个具有年、月、日、星期、时分秒显示以及闰年判断功能的万年历。

三、实训步骤1. 需求分析- 显示当前日期和时间,包括年、月、日、星期、时分秒。

- 判断闰年,正确显示2月的天数。

- 允许用户通过按键调整日期和时间。

- 具有电源掉电保护功能,保证数据不丢失。

2. 硬件设计- 核心模块:AT89C51单片机- 时钟模块:DS1302时钟芯片,提供精确的日期和时间。

- 显示模块:LCD1602液晶显示屏,用于显示日期、时间和星期。

- 按键模块:独立键盘,用于调整日期和时间。

- 电源模块:锂电池,提供稳定的电源。

3. 软件设计- 主程序:负责初始化硬件、读取时间、显示时间和日期、处理按键输入等。

- 时钟模块:读取DS1302芯片中的时间,并进行处理。

- 显示模块:将时间、日期和星期显示在LCD1602液晶显示屏上。

- 按键处理模块:根据按键输入调整日期和时间。

4. 程序编写- 使用C语言进行程序编写,利用Keil软件进行编译和烧录。

5. 调试与测试- 对程序进行调试,确保功能正常。

- 对万年历进行测试,验证其准确性。

四、实训结果经过设计、编程、调试和测试,成功实现了万年历的功能。

万年历能够准确显示当前日期和时间,并具有闰年判断功能。

用户可以通过按键调整日期和时间,且在电源掉电的情况下,万年历仍能保持时间。

五、实训心得1. 实践出真知:通过本次实训,深刻体会到理论知识与实践应用相结合的重要性。

只有将所学知识运用到实际项目中,才能真正掌握单片机的编程与应用。

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

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

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

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

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

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

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

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

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

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

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

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

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

目录一、摘要 (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)摘要单片机就就是微控制器,就是面向应用对象设计、突出控制功能的芯片。

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

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

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

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

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

单片机万年历实习报告

单片机万年历实习报告

一、实习背景随着科技的发展,单片机技术逐渐成为电子领域的主流技术之一。

为了提高自己的实践能力,加深对单片机原理的理解,我参加了单片机万年历的实习项目。

本次实习以AT89C51单片机为核心,结合LCD1602液晶显示屏,设计并实现了一个功能完善的万年历。

二、实习目的1. 熟悉单片机的基本原理和编程方法,掌握单片机的应用技术。

2. 学会使用LCD1602液晶显示屏,了解其工作原理和驱动方法。

3. 掌握万年历的设计与实现方法,提高自己的动手能力和实际操作技能。

4. 培养团队合作精神,提高自己的沟通能力和组织协调能力。

三、实习内容1. 硬件设计(1)选用AT89C51单片机作为核心控制器。

(2)使用LCD1602液晶显示屏显示日期、星期等信息。

(3)选用DS1302实时时钟模块获取当前时间。

(4)选用按键模块实现用户交互功能。

2. 软件设计(1)编写程序实现万年历的基本功能,包括日期显示、星期显示、时间设置等。

(2)编写程序实现实时时钟模块的初始化、数据读取和更新。

(3)编写程序实现按键模块的扫描和处理。

(4)编写程序实现LCD1602液晶显示屏的初始化、数据写入和显示控制。

3. 调试与优化(1)对硬件电路进行调试,确保电路连接正确,各模块工作正常。

(2)对软件程序进行调试,修复程序中的错误,优化程序性能。

(3)调整程序参数,使万年历显示效果更佳。

四、实习过程1. 硬件电路搭建根据设计要求,我首先搭建了万年历的硬件电路。

首先,将AT89C51单片机、LCD1602液晶显示屏、DS1302实时时钟模块和按键模块连接起来。

然后,对电路进行测试,确保各模块正常工作。

2. 软件编程在硬件电路搭建完成后,我开始编写软件程序。

首先,编写程序实现万年历的基本功能,包括日期显示、星期显示、时间设置等。

然后,编写程序实现实时时钟模块的初始化、数据读取和更新。

接着,编写程序实现按键模块的扫描和处理。

最后,编写程序实现LCD1602液晶显示屏的初始化、数据写入和显示控制。

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

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

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

电子万年历是一种结合了数字电路、单片机技术和实时时钟(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.硬件测试:首先,我们对硬件电路进行了测试,确保每个模块都能正常工作。

万年历设计报告

万年历设计报告

万年历设计1、设计目的:1、学会对单片机外围电路的使用。

2、熟悉使用proteus电路仿真软件。

3、熟悉使用KILE C语言编程软件。

4、了解数字万年历的工作原理及其组成。

2、设计任务:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能3、方案比较:用单片机设计电子时钟通常有两种方法:一是通过单片机内部的定时器或者计数器。

这种方法硬件线路简单,采用软件编程实现时钟计数,一般称为软时钟。

系统的功能一般与软件设计有关,通常用在对时间精度要求不高的场合;二是采用时钟芯片,它的功能强大,功能部件集成在芯片内部,自动产生时钟等相关功能。

硬件成本相对较高,软件编程简单。

通常使用在对时钟精度要求较高的场合。

本次设计采用第一种方法4、设计方案4.1 设计原理:本方案有的时间脉冲由单片机内部的定时器/计数器产生,所以硬件电路相对简单,由单片机产生时钟信号,通过程序分别产生年月日时分秒,同时可以区分闰年闰月,加送数码管显示,同时加上按键电路,可以对年月日时分秒进行调整,还有清零。

4.2硬件设计:图1如图1该电路由51单片机为核心,使用数码管显示,按键电路进行调整,考虑到单片机P0口的驱动能力不足的情况,使用上拉电阻提升驱动能力。

4.3软件设计:仿真开始,先初始化系统时间加送数码管显示,然后判断按键是否按下,如果按下,就表明要对时间进行调整,接下来则显示调整完的时间,如果没有按下,则显示初始时间。

5、设计结果图2如图2所示,数码管阵列第一列显示年月日,第二列显示时分秒,按键电路从上到下分别为复位,秒分时日月年的调整按键。

每当秒到60则分进位,同理,分满时进位,时满日进位,日满月进位,月满年进位,还可以区分闰年闰月。

6、总结和个人体验通过该课程设计很好的掌握了KILE,proteus两个和专业相关的软件,极大的拓宽了自己的知识宽度,期间产生的问题都与老师一起讨论得到了很好的解决,这对自己的问题阐述能力以及解决问题的能力都有很大的提升。

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

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

题目:电子万年历设计报告课程名称单片机课程设计学院物理与光电工程学院专业班级 09级电子科学与技术5班学号姓名王周英联系方式任课教师陈国鼎2011年12月12日电子万年历设计报告1)设计题目题目:电子万年历设计2)设计任务和要求1、显示年月日时分秒及星期信息。

2、具有可调整日期和时间功能3、增加闰年计算功能4、实现语音报时3)原理电路和程序设计:(1)方案比较;一:控制MCU方案一:STM8,STM公司推出的新款MCU,性能高,外设资源丰富,带有12位AD、12位DA、脉宽调制PWM、最高机器周期16MHz等。

且其功耗非常小,价格便宜,性价比非常高。

缺点是只能用官方开发的S-Link下载器进行下载,其价格比较高,一般学习者手上都没有。

方案二:AT89S52,AT公司的51单片机。

优点是支持ISP在线下载;缺点是价格比较高。

方案三:STC89C52,宏晶公司的51系列单片机,价格便宜,在国内使用者非常多。

支持串口下载,使用非常方便,且具有很大的价格优势。

缺点是仅支持串口下载,不支持在线下载,使用中会有些不方便。

由于本设计对控制芯片的要求不高,因此选用方案三。

二:时钟模块方案一:用单片机的定时器产生1S的时基信号,然后用程序来实现时钟的时、分、秒计时,同时用程序来产生年、月、日。

该方案优点是减少使用外设芯片;缺点是用单片机模拟时钟,使编程量增大,且用定时器产生时基信号,精度不高。

方案二:使用时钟芯片DS12C887。

优点是8位数据线并行控制,控制简单;自带有锂电池,外部掉电时,其内部时间信息还能够保持 10年之久。

缺点是并行控制,占用太多的IO口,且价格很高,不适合一般的电子制作。

方案三:使用时钟芯片DS1302。

优点是同步串行通信,仅使用3个IO口,占用最少的单片机资源;其内部功能强大。

更重要的是其价格便宜,具有非常高的性价比。

缺点是串行通信,控制比较复杂。

综上,本设计选择方案三。

三:语音报时模块方案一:使用语音芯片BLA902。

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

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

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 仿真结果及分析上图为运行时的显示, 左边两个数码管显示器显示的是年、月、日, 中间的显示的是时、分、秒, 右边显示的是农历日期以及星期。

单片机实训总结报告万年历

单片机实训总结报告万年历

一、引言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。

为了提高我们的实践能力和专业技能,我们选择了单片机实训作为课程的一部分。

在实训过程中,我们以万年历为例,通过学习单片机原理、编程和应用,实现了万年历的设计与制作。

本文将详细总结万年历实训的整个过程。

二、实训目标1. 掌握单片机的基本原理和编程方法;2. 熟悉万年历的设计与制作流程;3. 提高动手实践能力和团队合作精神;4. 培养创新思维和解决问题的能力。

三、实训内容1. 单片机原理及编程实训初期,我们学习了单片机的基本原理,包括CPU、存储器、输入输出接口等。

通过学习,我们了解了51单片机的结构、工作原理和指令系统。

在此基础上,我们学习了C语言编程,掌握了Keil软件的使用方法。

2. 万年历设计与制作万年历的设计与制作分为以下几个步骤:(1)需求分析:确定万年历的功能,包括显示年、月、日、星期、时分秒、农历、公历、节假日等。

(2)硬件设计:选择合适的单片机、显示屏、按键等硬件设备。

本实训选用AT89C51单片机、LCD1602显示屏和按键。

(3)软件设计:编写万年历的程序,实现功能需求。

程序主要包括以下几个模块:1)时钟模块:实现时分秒的计时功能;2)日期模块:实现年、月、日的显示和计算;3)星期模块:根据日期计算星期;4)农历模块:根据公历日期计算农历日期;5)节假日模块:显示节假日信息;6)按键模块:实现用户交互功能。

(4)调试与优化:对万年历程序进行调试,确保功能正常运行。

同时,对程序进行优化,提高运行效率。

3. 实训成果展示经过一段时间的努力,我们成功完成了万年历的设计与制作。

以下为万年历的部分功能展示:(1)显示当前日期、时间、星期和温度;(2)显示农历日期和节假日信息;(3)通过按键调整时间、日期和温度;(4)具有闹钟功能,可设置闹钟时间。

四、实训总结1. 提高了单片机编程能力:通过万年历的设计与制作,我们掌握了C语言编程方法,熟悉了Keil软件的使用。

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

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

单片机万年历课程设计报告一、课程设计目标本课程设计旨在帮助学生掌握单片机应用基础知识,学习并完成万年历电路的设计和代码编写。

通过这个实践,学生将会深入理解单片机在实际生活中的应用,同时提升自己的程序设计和解决问题的能力。

二、课程设计内容1. 万年历电路的原理和设计本次课程设计要求学生完成一个万年历电路的设计,包括硬件电路和程序设计。

在电路设计中,学生需要考虑到显示器、时钟模块、日期模块和温湿度传感器等部分的连接和调试。

在程序设计方面,学生需要实现万年历的功能,包括显示当前日期和时间、自动确定闰年、节假日提示等。

2. 单片机基本原理和应用实践在万年历电路设计之前,本课程将会对单片机基本原理进行介绍,包括单片机内部结构、芯片选型和I/O口控制等。

另外,还将介绍单片机在各种应用场景中的应用实践,如遥控、电脑控制、机器人和智能家居等。

3. 问题解决和困难克服在学生完成万年历电路设计的过程中,难免会遇到各种问题和困难。

本课程将对学生进行相关的实用技巧和方法讲解,帮助他们解决问题和克服难关。

三、课程设计流程1. 单片机基础知识介绍(2学时)讲解单片机内部结构及其原理,并介绍单片机应用实践2. 万年历电路设计(12学时)对万年历的硬件和软件进行介绍,包括连接显示器和外设、编写程序等3. 问题解决(2学时)介绍学生应对问题的技巧和方法,并帮助他们克服电路设计中的问题和难点四、课程设计评价标准1. 设计成果设计成果的好坏是课程设计的重要衡量标准之一,包括电路的设计完整性、软件功能实现等方面。

2. 实践能力课程设计是一种实践性强的学习形式,学生需要通过实践来掌握知识,因此他们的实践能力成为衡量标准之一。

3. 团队合作在课程设计的过程中,学生要协同工作,完成一个大型的项目,因此团队合作能力是衡量标准之一。

4. 学习的态度学习态度是衡量标准之一,包括学生在课程设计中的主动性、积极性和责任感等方面。

五、总结通过这个万年历课程设计,学生不仅学会了单片机应用的基础知识,还掌握了实际项目开发的方法和技巧。

基于单片机的电子万年历设计报告

基于单片机的电子万年历设计报告

基于单片机的万年历设计报告一、研究意义随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。

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

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

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

本设计以AT89S52单片机为核心,构成单片机控制电路,AT89C52是一种带8K字节闪速可编程可擦除只读存储器(PEROM)的低电压、高性能CMOS 8位为控制器。

该器件采用ATMEL 非易失存储器制造技术制造,与工业标准的80C51和80C52指令集和输出管脚相兼容。

结合DS1302时钟芯片和24C02 FLASH存储器,完成时间的自动调整和掉电保护,全部信息用液晶显示。

时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。

日历能显示阳历和阴历年、月、日以及星期、时、分、秒。

在显示阴历月份时,能标明是否闰月。

二、总体方案设计本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02 FLASH存储器,显示阳历的年、月、日、星期、时、分、秒和阴历的年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示出来。

输入接口由三个按键来实现,用这三个按键可以对日期和时间进行调整,并可以对闹铃的开关和闹铃的时间进行设置。

闹铃功能通过蜂鸣器来实现。

软件控制程序实现所有的功能。

整机电路使用+5V稳压电源,可稳定工作。

系统框图如图2-1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。

三、系统硬件设计按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、存储模块、键盘接口模块、显示模块和闹铃模块共6个模块组成,电路系统构成框图如图3-1所示。

主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302,存储模块采用美国ATMEL公司生产的低功耗CMOS串行EEPROM存储芯片AT24C02。

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

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

基于单片机的万年历设计毕业设计标题:基于单片机的万年历设计摘要:本文设计了一种基于单片机的万年历,实现了日期、时间、温湿度等功能的显示和设置。

通过运用单片机技术,结合LCD显示屏、温湿度传感器和按键等硬件模块,实现了精确的时间和日期显示,并通过按键进行设置和调整。

该设计具有结构简单、功能齐全、易于操作的特点,可广泛应用于家庭和办公环境中。

关键词:单片机;万年历;日期和时间显示;温湿度传感器;按键第1章引言1.1 研究背景万年历是一种常见的时间管理工具,能够显示日期、时间和其他相关信息,对人们的日常生活起到重要的辅助作用。

随着科技的不断发展,单片机技术已经得到广泛应用,并在各个领域取得了显著的成果。

基于单片机的万年历设计将为人们提供一种更加方便、准确和实用的时间管理工具。

1.2 研究目的本文旨在设计一种基于单片机的万年历,实现日期、时间、温湿度等功能的显示和设置。

通过探究单片机技术在万年历设计中的应用,提高时间管理的效率和准确性,满足人们对时间管理需求的不断增长。

第2章设计原理2.1 单片机选择在本设计中,选择适用于万年历设计的单片机芯片,考虑到处理能力、接口数量和成本等因素,最终选择了XX单片机芯片。

2.2 硬件设计通过连接LCD显示屏、温湿度传感器和按键等硬件模块,实现了万年历的功能。

其中,LCD显示屏用于显示日期和时间等信息,温湿度传感器用于获取环境温湿度数据,按键用于进行设置和调整。

2.3 软件设计通过编写单片机程序,实现日期、时间、温湿度等功能的显示和设置。

程序中包括时钟控制、日期计算、温湿度采集等功能模块,通过按键的触发,实现对日期和时间的设置和调整。

第3章系统实现3.1 系统硬件搭建按照设计原理中的硬件设计要求,搭建了基于单片机的万年历系统。

将LCD显示屏、温湿度传感器和按键等硬件模块连接到单片机芯片上,确保各个硬件模块正常工作。

3.2 系统软件编写根据设计原理中的软件设计要求,编写了单片机程序。

单片机万年历毕业设计

单片机万年历毕业设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考内容
一、引言
单片机是现代电子设备中的重要组成部分,广泛应用于各种嵌入式系统设计。 51单片机作为一种经典的微控制器,因其结构简单、易于编程、可靠性高等优点, 被广泛用于各种领域,如智能家居、工业控制、物联网等。万年历作为一种日常 生活中常见的计时工具,具有显示日期、时间、星期、月份等功能,对于人们的 日常生活和工作有着重要的作用。本次演示将介绍一种基于51单片机的万年历设 计。
二、系统设计
1、硬件设计
基于51单片机的万年历设计需要硬件和软件的配合实现。硬件部分主要包括 51单片机、显示模块、按键输入模块和时钟芯片等。其中,51单片机作为主控制 器,负责处理各种数据和控制信号;显示模块用于显示日期、时间等信息;按键 输入模块用于用户输入操作;时钟芯片则为系统提供实时时间。
基于51单片机的电子万年历系 统的设计
目录
01 一、概述
03 三、软件设计
02 二、硬件设计 04 四、系统调试与优化
目录
05 五、应用场景及前景
07 参考内容
06 六、结论
随着科技的不断发展,单片机已经成为现代于51单片机的电子万年历系统设计具有广泛的实际应用价值。 本次演示将详细介绍这种系统的设计过程和实现方法。
感谢观看
首先需要进行硬件搭建,包括选择合适的单片机、显示模块、按键输入模块 和时钟芯片等,并将其连接起来。需要注意的是,在搭建硬件时需要考虑各个模 块之间的接口和连接方式,以确保系统能够正常工作。
2、软件编程
在硬件搭建完成后,需要进行软件编程。首先需要进行系统初始化,包括对 单片机进行初始化和对显示进行清屏处理。然后需要进行按键处理和时钟数据处 理,以实现用户输入和实时时间的读取。最后需要进行显示处理,将处理后的数 据显示到显示模块上。

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

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

单片机课程设计题目:电子万年历班级:姓名:学号:指导教师:设计时间:目录一、引言 (1)二、设计题目 (2)三、硬件设计 (2)3.1 8051芯片简介3.2 DS1302介绍3.3 硬件电路图四、程序设计 (6)4.1 程序流程图4.2 万年历程序五、Proteus软件仿真 (14)六、总结体会 (15)七、参考文献 (16)一、引言集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。

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

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

二、设计题目设计一台电子万年历,主控芯片采用8051单片机,日历时钟芯片采用DALLAS公司推出的高性能、低功耗、带RAM的实时时钟DS1302,显示器采用点阵字符型液晶显示模块,分2行显示,第一行显示日、月、年,第2行显示时、分、秒。

三、硬件设计3.1 8051芯片简介8051 是标准的40引脚双列直插式集成电路芯片,引脚管脚图如下:图1 8051引脚图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号端子)。

VCC:供电电压。

GND:接地。

P3口也可作为AT89C51的一些特殊功能口,如表1所示:表1 特殊功能口RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

单片机万年历实训报告

单片机万年历实训报告

单片机万年历实训报告1. 引言本报告旨在介绍单片机万年历的设计和实训过程。

单片机万年历是一种基于单片机技术的电子产品,可以显示日期、时间以及其他相关信息。

本实训目的在于通过设计和制作一个简单的单片机万年历,加深对于单片机的理解和应用。

2. 设计概述2.1 硬件设计在硬件设计方面,我们选择了常见的AVR单片机作为控制器,配合相应的显示器、按键和时钟电路。

主要元件选用的是ATmega16单片机,因为其性能稳定、易于编程且资源丰富。

2.2 软件设计软件设计方面,我们使用C语言编程,通过编写相应的代码实现日期、时间以及其他功能的显示和更新。

同时,为了方便用户操作,我们设计了一些菜单和按键控制功能。

3. 系统结构3.1 硬件结构单片机万年历的硬件结构主要包括以下部分:1.单片机:ATmega16单片机作为核心控制器。

2.显示屏:通过连接数码管或LCD显示器来显示日期、时间等信息。

3.按键:用于用户与系统进行交互,包括设置时间、日期等操作。

4.时钟电路:提供单片机系统所需的时钟信号。

3.2 软件结构单片机万年历的软件结构主要包括以下功能模块:1.时钟模块:实现时钟的初始化、计时和显示功能。

2.日历模块:实现日期的初始化、计算和显示功能。

3.操作模块:处理用户的按键输入,包括设置时间、日期以及其他功能。

4.显示模块:根据当前的日期、时间等信息,将其显示在相应的屏幕上。

4. 功能设计4.1 日期和时间显示在单片机万年历中,最基本的功能之一是显示当前的日期和时间。

通过时钟模块获取当前的时间,再通过日历模块计算日期,并将其显示在屏幕上。

4.2 设置功能为了方便用户对日期和时间进行设置,我们设计了相应的设置功能。

用户可以通过按键进行小时、分钟、月份、日期等的设置,然后通过确认键进行保存。

设置功能能够满足大部分用户对日期和时间的要求。

4.3 闹钟功能为了使单片机万年历具有更多实用性,我们添加了闹钟功能。

用户可以设置闹钟的时间,当时间到达时,系统会发出提示音,并在屏幕上显示相应信息。

单片机万年历实训报告

单片机万年历实训报告

单片机万年历实训报告一、实训背景随着科技的不断发展,单片机已经成为了现代电子技术中不可或缺的组成部分。

在单片机的应用领域中,万年历也是一个比较重要的应用。

因此,在单片机课程中进行万年历实训,可以帮助学生更好地掌握单片机的编程和应用。

二、实训目标本次实训的主要目标是:1.掌握单片机的基本原理和编程方法;2.了解万年历的基本概念和计算方法;3.设计并实现一个完整的单片机万年历系统。

三、实训内容1.单片机基础知识学习在进行万年历实训之前,需要先学习单片机基础知识。

包括:单片机原理、寄存器操作、IO口操作等。

2.万年历功能分析了解万年历的基本概念和计算方法,包括:闰年判断、月份天数计算等。

3.系统设计与编程根据功能分析,设计并编写程序代码,实现一个完整的单片机万年历系统。

主要包括:时钟模块、显示模块、按键模块等。

4.系统测试与调试完成程序编写后,需要进行系统测试与调试,确保系统稳定可靠。

四、实训成果经过一段时间的学习和实践,我们成功地完成了单片机万年历的设计与实现。

具体成果如下:1.硬件部分硬件部分主要包括:单片机、时钟模块、显示模块、按键模块等。

其中,时钟模块采用DS1302芯片,显示模块采用数码管显示,按键模块采用矩阵按键。

2.软件部分软件部分主要包括:程序代码。

程序代码采用C语言编写,实现了完整的万年历功能。

3.系统测试经过系统测试,我们发现该单片机万年历系统具有较好的稳定性和可靠性。

可以正常地进行日期时间的显示和计算。

五、实训体会通过本次实训,我深刻地认识到了单片机在现代电子技术中的重要作用。

同时也提高了我对单片机编程能力和应用能力。

在实际工作中,我将更加注重对单片机技术的学习和应用。

六、总结本次实训是一次非常有意义的学习经历。

通过对单片机万年历的设计与实现,我们不仅掌握了单片机编程的基本方法,也了解了万年历的基本概念和计算方法。

希望今后能够继续保持学习的热情,不断提高自己的技术水平。

单片机课设万年历报告

单片机课设万年历报告

单片机课设万年历报告一、系统简介:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

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

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

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

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

在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。

在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。

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

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

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

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

程序采用高级语言C进行编写,以便更简单地实现调整时间。

所有程序编写完成后,在确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。

最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。

二、系统功能说明1、设计要求:1、具有年、月、日、星期、时、分、秒等功能;2、具备年、月、日、星期、时、分、秒调整校准功能;2、单片机芯片的选择方案和论证:采用89C51芯片作为硬件核心,数码管显示,为使用户更清楚更明白,万年历的日期和时间是分开显示,同时分别对应两个74LS138芯片用于控制数码管显示,还有74LS373译码器芯片,74LS21芯片是用于控制键盘的功能。

如图所示:74LS138的八个输出引脚,任何时刻要么全为高电平1也就是芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。

基于单片机万年历设计与制作中期报告

基于单片机万年历设计与制作中期报告
(5)下一步的主要工作:尽力解决统调过程中出现的问题,分析产生各种现象的原因,记下调试过程中各个指标,整理资料,准备着手写论文教师的建议与要求:
指导教师签字:
XX年XX月XX日
注:本表格同毕业设计(论文)一同装订成册,由所在单位归档保存。
(2)方案选择完毕后,针对该方案看懂电路的原理,分析整个系统的流程并用框图表示出来,构造出大体框架,然后再分析每个模块电路的具体作用以及可能出现的问题。
(3)根据方案选择出元器件后,查找各器件的管脚图及其用法,根据公式计算所用到器件的型号及大小,列元件清单,购买器件。
(4)开始焊接电路,构思整个系统的信号流程和布局工作,对各个模块进行编程,不断修改程序以达到预期要实现的功能。
毕业设计中期报告
系别
自动化
班级
XXX
学生
姓名
XXX
指导
教师
XXX
课题名称:基于单片机万年历设计与制作
自毕业设计开题以来,我主要完成了以下工作:
(1)通过收集整理资料,认真阅读资料,对电子万年历设计有个整体的了解。然后设计方案,对所设计的方案进行分析论证,记下各方案的优缺点,选择比较可取的方案而且电路所用到的器件必须是性价比较高、在市场上比较容易买到的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课设万年历报告一、系统简介:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

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

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

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

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

在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。

在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。

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

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

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

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

程序采用高级语言C进行编写,以便更简单地实现调整时间。

所有程序编写完成后,在确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。

最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。

二、系统功能说明1、设计要求:1、具有年、月、日、星期、时、分、秒等功能;2、具备年、月、日、星期、时、分、秒调整校准功能;2、单片机芯片的选择方案和论证:采用89C51芯片作为硬件核心,数码管显示,为使用户更清楚更明白,万年历的日期和时间是分开显示,同时分别对应两个74LS138芯片用于控制数码管显示,还有74LS373译码器芯片,74LS21芯片是用于控制键盘的功能。

如图所示:74LS138的八个输出引脚,任何时刻要么全为高电平1也就是芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。

如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。

74LS373原理图当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端G为高电平时,输出Q1~Q8 状态与输入端D1~D8状态相同;当G发生负的跳变时,输入端D1~D8 数据锁入Q1~Q8。

51单片机的ALE信号可以直接与74LS373的G连接。

在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用,其连接方法如上图所示。

其中输入端1D~8D接至单片机的P0口,输出端提供的是低8位地址,G 端接至单片机的地址锁存允许信号ALE。

输出允许端OE接地,表示输出三态门一直打开。

显示模块选择方案:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

使用多个数码管显示LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点,所以采用了LED数码管作为显示。

数码管电路3、键盘的选择采用独立式按键电路。

每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。

而且在本次实验课设用的键盘很少,所以采用独立式按键比较实用。

4、实现定时:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、时、分、秒计数。

采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。

5、电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S51作为主控制系统; LED 数码管动态扫描作为显示。

两个74LS138和一个74LS21芯片。

图-5 LED动态扫描显示实验心得:经过了两个星期的学习和实验,我终于完成了单片机万年历课程设计。

从开始接到课设要求到万年历的实现,再到报告的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的最大的项目。

在这段时间里,我学到了很多知识也有很多感受,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获。

这次报告的书写也会使我终身受益,我感受到做报告是要用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。

通过本次单片机课设,获得了丰富的理论知识,极大地提高了实践能力,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。

参考文献[1]李建忠.单片机原理及应用.西安电子科技大学出版 2006.02[2]张俊谟.单片机中级教程.北京航空航天大学出版 2006.03[3]余发山.单片机原理及及应用技术.中国矿业大学出版社 2003.12[4]杨凌霄.微型计算机原理及应用.中国矿业大学出版社 2004.08[5]何立民.单片机应用技术选编.北京航空航天大学出版社 2000.08[6]万光毅.单片机实验与实践教程.北京航空航天大学出版社 2005.01[7]周航慈.单片机程序设计基础.北京航空航天大学出版社 1991.11[8]黄遵熹.单片机原理接口与应用.西北工业大学出版社 1997.05[9]杨振江,杜铁军,李群.流行单片机实用子程序及应用实例[M].西安:西安电子科技大学出版社,2002[10]杨子文编单片机原理及应用西安电子科技大学出版社 2006[11]王法能编单片机原理及应用科学出版社 2004附源代码:#include<reg51.h>sbit p1_0=P1^0;sbit p1_1=P1^1;sbit p1_2=P1^2;sbit p1_3=P1^3;sbit p1_4=P1^4;sbit p3_2=P3^2;unsigned char code zimal[13]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F, 0x40,0x80,0x00,};/*共阴极字形代码,显示0-9字形码,最后三个代码分别表示‘-’,‘.’‘熄灭’*/ unsigned int year,month,day,hour,minute,second;//定义变量年,月,日,时,分,秒; void delay(); //延时函数;void xianshi(unsigned int h,min,s); //显示时间函数;void ymdxianshi(unsigned int year,month,day); //显示年月日;void fengming(); //蜂鸣器函数;int leap(unsigned int year); //判断闰年函数;unsigned int h,m,s=5; //记录定时时间;unsigned int mode=1,td=0,yw=0; //状态;void main(){year=2010;month=5;day=20;hour=23;minute=59; second=0;/*初始化年,月,日,时,分,秒*/TMOD=0x10; //定时器1;模式1;TL1=0xb0;TH1=0x3c;//定时时间为50msTR1=1;//打开定时器1ET1=1;//定时器1溢出中断允许位EX0=1;//外部中断0允许IT0=1;//外部中断0触发方式为边沿触发EA=1;while(1) //主循环;{if(hour==h&&minute==m&&second==s) fengming(); //定时时间到,蜂鸣器响;if(mode%2==0) ymdxianshi(year,month,day); //显示年月日else{if(td%3==2) xianshi(h,m,s); // 定时状态;else xianshi(hour,minute,second); //正常显示时间状态;}}}void delay() //延时函数;unsigned int i;for(i=0;i<400;i++);}void ymdxianshi(unsigned int year,month,day) //年月日的显示与调整{int i,j;i++;if(td%2==1&&yw%8==0&&i%2==0) //点亮年的第一个{P2=0x7f;P0=zimal[12];for(j=0;j<2000;j++);}else{P2=0x7f;P0=zimal[year/1000];delay();}if(td%2==1&&yw%8==1&&i%2==0) //点亮年的第二个{P2=0xbf;P0=zimal[12];for(j=0;j<1800;j++);}else{P2=0xbf;P0=zimal[year%1000/100];delay();}if(td%2==1&&yw%8==2&&i%2==0)//点亮年的第三个{P2=0xdf;P0=zimal[12];for(j=0;j<1800;j++);}else{P2=0xdf;P0=zimal[year%100/10];delay();}if(td%2==1&&yw%8==3&&i%2==0) //点亮年的第四个P2=0xef;P0=zimal[12];for(j=0;j<1800;j++);}else //显示年{P2=0xef;P0=zimal[year%10];delay();}if(td%2==1&&yw%8==4&&i%2==0)//显示月点亮{P2=0xf7;P0=zimal[12];P2=0xfb;P0=zimal[12];for(j=0;j<1800;j++);}else{P2=0xf7;P0=zimal[month/10];delay();P2=0xfb;P0=zimal[month%10];delay();}P2=0xef;//显示点P0=zimal[11];for(j=0;j<100;j++);P2=0xfb;P0=zimal[11];for(j=0;j<100;j++);if(td%2==1&&yw%8==5&&i%2==0)//显示日的第一个{P2=0xfd;P0=zimal[12]; for(j=0;j<1800;j++);}else{P2=0xfd;P0=zimal[day/10];delay();if(td%2==1&&yw%8==6&&i%2==0)//显示日的第二个{P2=0xfe;P0=zimal[12];for(j=0;j<1800;j++);}else{P2=0xfe;P0=zimal[day%10];delay();}}void xianshi(unsigned int h,min,s) //显示时间函数; { unsigned int i,j;i++;if(td%3!=0&&yw%6==0&&i%2==0){ P2=0x7f; //显示时的第一个;P0=zimal[12]; for(j=0;j<2000;j++);}else{P2=0x7f;P0=zimal[h/10];delay();}if(td%3!=0&&yw%6==1&&i%2==0)//显示时的第二个{P2=0xbf;P0=zimal[12];for(j=0;j<2000;j++);}else{P2=0xbf;P0=zimal[h%10];delay();}//显示-P2=0xdf;P0=zimal[10];delay();if(td%3!=0&&yw%6==2&&i%2==0) //显示分的第一个;P2=0xef;P0=zimal[12]; for(j=0;j<2000;j++);}else{P2=0xef; //显示分的第二个;P0=zimal[min/10];delay();}if(td%3!=0&&yw%6==3&&i%2==0){P2=0xf7;P0=zimal[12];for(j=0;j<2000;j++);}else{P2=0xf7;P0=zimal[min%10];delay();}P2=0xfb; //显示-P0=zimal[10];delay();if(td%3!=0&&yw%6==4&&i%2==0) //显示秒的第一个;{P2=0xfd;P0=zimal[12]; for(j=0;j<2000;j++);}else{P2=0xfd; ;P0=zimal[s/10];delay();}if(td%3!=0&&yw%6==5&&i%2==0) //显示秒的第二个{P2=0xfe;P0=zimal[12];for(j=0;j<2000;j++);}else{P2=0xfe;P0=zimal[s%10];delay();}}void ex0()interrupt 0 //外部中断零;{unsigned int i;if(p1_3==0)delay();if(p1_3==0) {mode++;td=0;}if(p1_1==0)delay();if(p1_1==0)yw++; //移位;if(p1_0==0)delay();if(p1_0==0)td++; //修改调整时间状态;if(mode%2==0) //调整日期;{ if(td%2==1){ for(i=0;i<10;i++);if(p1_2==0)delay();if(p1_2==0) //移位;{ if(yw%8==0)year+=1000; //调整对应位的数值;if(yw%8==1){year+=100;if(year%100/10==0)year-=1000;}if(yw%8==2){year+=10;if(year/10%10==0)year-=100;}if(yw%8==3) {year++;if(year%10==0)year-=10;}if(yw%8==4)month++;if(yw%8==6){day++;if(day%10==0)day-=10;}if(yw%8==5) day+=10;}// if(year>=2500)year=0; //年份小于2500;if(month>12)month=1; //月份小于12;switch(month) //日期限制{case 4:case 6:case 9:case 11:if(day>30)day=1;break;//4,6,9,11月30天;case 2 :{if (leap(year)) //闰年2月29天;while(day>29)day=1;elsewhile(day>28)day=1;//非闰年28天;}break;default:if(day>31)day=1; //1,3,5,7,8,10,12月31天;}}}//else if(td%3==1) //调整时间;else if(td%3==1){ET1=0; //时钟中断for (i=0;i<10;i++);if(p1_2==0)delay();if(p1_2==0){if(yw%6==1){hour++;if(hour%10==0) hour-=10;}if(yw%6==0)hour+=10;if(yw%6==3){minute++;if(minute%10==0)minute-=10;}if(yw%6==2)minute+=10;if(yw%6==5){second++; if(second%10==0)second-=10;}if(yw%6==4)second+=10;}if(hour>23)hour=0;if(minute>59)minute=0;if(second>59)second=0;}else //定时状态;{ET1=1;if(td%3==2){for(i=0;i<10;i++);if(p1_2==0) //定时;{if(yw%6==1){h++;if(h%10==0) h-=10; }if(yw%6==0)h+=10;if(yw%6==3){m++;if(m%10==0)m-=10;}if(yw%6==2)m+=10;if(yw%6==5){s++; if(s%10==0)s-=10;}if(yw%6==4)s+=10;}if(h>23)h=0;if(m>59)m=0;if(s>59)s=0;}}}void time1()interrupt 3 //定时器1中断;{unsigned char i;TF0=0;TL0=0xb0;TH0=0x3c;i++;if(i==20) //1秒钟到;{second++;i=0;}if(second==60)//1分钟;{second=0;minute++;}if(minute==60)//1小时;{minute=0;hour++;}if(hour==24) //1天;{hour=0;day++;}switch(month) //1月;{case 4:case 6:case 9:case 11:if(day>30){month++;day=1;}break;//4,6,9,11月30天;case 2:{if(leap(year))if(day>29){month++;day=1;} //闰年29天;elseif(day>28){month++;day=1;}//非半闰年28天;}break;default:if(day>31){month++;day=1;}//1,3,5,7,8,10,12月30天;if(month>12) //1年;{year++;month=1;}}}void fengming() //蜂鸣器;{int m,n;for(m=0;m<=100;m++){p1_4=!p1_4;for(n=0;n<380;n++);}}int leap(unsigned int year) //判断闰年函数; {int leap;if(year%4==0&&year%100!=0||(year%400==0)) leap=1;else leap=0;return(leap);}。

相关文档
最新文档