ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:19.77KB ,
资源ID:6471983      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6471983.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计电子万年历.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、单片机课程设计电子万年历单片机及接口技术综合实验 电子万年日历系统一、题目:电子实时时钟/万年日历系统二、功能要求: 1 基本要求: 显示准确的北京时间(时、分、秒),可用24小时制式; 随时可以调校时间。2 发挥要求: 增加公历日期显示功能(年、月、日),年号只显示最后两位; 随时可以调校年、月、日; 允许通过转换功能键转换显示时间或日期。三、方案考虑: 1、硬件方案: 显示器采用6位LED数码管(共阳),可分别显示时间或日期;(通过KB键可切换) 显示器的驱动采用动态扫描电路形式,以达到简化电路的目的。但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。可采用74LS244或者晶体

2、管;其中74ls244是用来驱动段选码,晶体管是驱动位选码!采用“一键多用方案”,以减少按键数目。本方案只采用了两个按键 整体上要考虑:结构简单、布局美观、操作方便、成本低廉。2、设计电路图如下: 3、元件清单: 89C51 1个 IC座(40脚) 3个(其中1个用于接插89C51、2个用于接插LED段数码管)。 74LS244 1个(用于驱动6个共阳的LED段数码管)。 IC座(20脚) 1个(用于接插74LS244)。(5)显示器:LED_8段数码管(共阳型)6个三极管:(6)PNP(8550) 6个(用于驱动6个共阳型LED段数码管)。(7)微型开关: 3个(其中1个用于复位电路、其它用

3、于键盘)。(8)晶体振荡器(12MHz):1个(用于振荡电路)。(9)电阻器: 3K 1个(用于系统复位电路)。 1K 6个(用作PNP三极管基极电阻)。 100 7个(驱动器用作74LS244输出限流电阻)。(10)电容器: 10F 1个(用于系统复位电路)。 30 pF 2个(用于系统振荡电路)。(11)其它: 万能电路板(1015): 1块 焊锡条: 2米 带插头、座的电源端子: 1条 各种颜色外皮的导线: 各1米(12)工具:1电烙铁: 1把2剪钳: 1把3镊子: 1把4万用表: 1个(13)设备:编程器(MEP300或TOP851) 6个4、软件方案:只使用第一组工作寄存器,功能分布

4、如下: “时钟”基准时间由单片机内部定时中断来提供,定时时间应该乘以一个整数得到“秒”,且不宜太长或太短,最长不能超过16位定时器的最长定时时间,最短不能少于定时中断服务程序的执行时间。一般来说,基准时间越短,越有利于提高时钟运行的精确度。本实验定时5mS。乘以一个整数200得到“1秒”. 用一个计数器(R4)对定时中断的次数进行计数,从而可以实现“秒”定时,同理可以实现“分”定时和“时”定时,甚至于“日”、“月”、“年”定时。 显示器采用动态驱动时要注意到:LED的 “启辉时间”和 “余辉时间”。驱动信号的维持时间必须大于启辉时间;而驱动信号的间歇时间必须小于余辉时间。“启辉时间”和 “余辉

5、时间”与驱动电流的大小有关,驱动电流越大,启辉时间越短,而余辉时间越长。但是,驱动电流的大小受到驱动电路的驱动能力和LED极限功耗的限制。本实验采用了74ls244和晶体管8550驱动,并进行适当的延时3ms解决上述问题。 LED的余辉时间使动态驱动显示得到保证,但也要注意到它在更新显示内容时,可能造成显示字符的混乱模糊。为此,在把“更新显示内容”写入显示器之前,必须把所有的LED熄灭,即要把一个“熄灭驱动信号”先写入显示器。对于按键的处理,采用中断。产生中断后先判有无按键被按下,还要考虑到“去抖动影响”问题,可采用软件延迟法解决这个问题,延迟时间至少10mS。而单纯进行软件延时的话会令到显示

6、管产生断续的情况,故调用显示程序作为延时时间。这样就合理地处理好这两者的矛盾了。 把键盘的按键分两种情况来处理,操作简单。 调整时间时,先按下KA键,(KA键为选择调整位置的键,如选调整秒或分),而此时的KB键只是用来加一操作。在调整时间状态下,若在十秒内检测到没有任何按键按下,则返回正常显示时钟状态。 而不调整时间,即不按下KA键,KB的键只用来切换显示日期和时钟。 对于自动识别“月大、月小”和“平年、闰年”的问题,主要考虑: 月大、月小:17月:逢单月为31天;逢双月为30天,其中2月另行处理。812月:逢单月为30天;逢双月为31天。 平年、闰年:仅仅处理2月份的天数:平年的2月份天数为

7、28天,闰年的2月份天数为29天。5、程序流程图如下:(1) 电子时钟计算程序图 (2)调整流程图 程序编写如下:;/ ORG 0000H LJMP START ORG 0003H LJMP PROINT0 ;int0用来切换时钟调整位置 ORG 0013H ;用来调整时间,只加不减 LJMP PROINT1 ORG 001BH ;5ms的延迟,计数200次则为1秒 LJMP PROTIME ORG 0030H ;主程序TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0 1 2 3 4 5 6 7 8 9 ORG 0050HSTA

8、RT: MOV TCON,#05H ;中断初始化 MOV IE ,#8DH MOV TMOD,#10H MOV TH1,#0eCH ;定时器初始化 MOV TL1,#78H MOV 31H,#0AH ;10秒 MOV 32H,#1EH ;30分 MOV 33H,#09H ;9点 MOV 34H,#0AH ;10号 MOV 35H,#06H ;6月 MOV 36H,#05H ;2005年 MOV 37H,#14H ;R7 存放切换标志 0 NORMAL , 1 HOUR ,2 MINUTE ,3 SECOND ,4 YEAR,5 MONTH,6 DAY MOV R1,#00H ;确定在调时不按键

9、的最长时间,10秒后返回normal状态 MOV R7,#00H ;切换标志 MOV 40H,#00H ;十六进制转换BCD的高位 MOV 41H,#00H ;十六进制转换BCD的低位 MOV R6,#00H ;调时的位闪烁的时间间隔 MOV R4,#00H ;用来计数5ms的中断次数,200次则一秒 mov r3,#00h SETB TR1 ;开始计时AGAIN: ACALL PROSHOW ;显示 AJMP AGAINPROSHOW: CJNE R3,#00H,SHOWDATE ;如果r3等于1就显示日期,等于0就显示时钟 CJNE R7,#04H,DATE1 ;显示程序 AJMP SHO

10、WDATE ;showdate显示年月日DATE1: CJNE R7,#05H,DATE2 AJMP SHOWDATEDATE2: CJNE R7,#06H,SHOWCLOCK AJMP SHOWDATE showCLOCK: MOV R0,33H ;showclock显示时分秒,先显示时 ACALL PROHTOD CJNE R7,#01H,CLK1 INC R6 CJNE R6,#03H,CLK2 ;若处于调时状态,则该位闪烁 MOV R6 ,#00HCLK1: clr P2.4 mov a,41H MOV P0, a ;显示时的低位 ACALL DELAY3MSCLK2: SETB P2

11、.4 CLR P2.5 mov a,40H MOV P0,a ;显示时的高位 ACALL DELAY3MS SETB P2.5 MOV R0,32H ;显示分 ACALL PROHTOD CJNE R7,#02H,CLK3 INC R6 CJNE R6,#03H,CLK4 ;若处于调时状态,则该位闪烁 MOV R6,#00HCLK3: CLR P2.2 mov a,41H MOV P0, a ;显示分的低位 ACALL DELAY3MSCLK4: SETB P2.2 CLR P2.3 mov a,40h MOV P0,a ;显示分的高位 ACALL DELAY3MS SETB P2.3 MOV

12、 R0,31H ;显示秒 ACALL PROHTOD CJNE R7,#03H,CLK5 INC R6 CJNE R6,#03H,CLK6 ;若处于调时状态,则该位闪烁 MOV R6,#00HCLK5: CLR P2.0 mov a,41H MOV P0, a ;显示秒的低位 ACALL DELAY3MSCLK6: SETB P2.0 CLR P2.1 mov a,40h MOV P0,a ;显示秒的高位 ACALL DELAY3MS SETB P2.1 RETSHOWDATE: MOV R0,36H ;显示年 ACALL PROHTOD CJNE R7,#04H,DAY1 INC R6 CJ

13、NE R6,#03H,DAY2 ;若处于调时状态,则该位闪烁 MOV R6,#00HDAY1: CLR P2.4 MOV P0,41H ;显示年的低位 ACALL DELAY3MSDAY2: SETB P2.4 CLR P2.5 MOV P0,40H ;显示年的高位 ACALL DELAY3MS SETB P2.5 MOV R0,35H ;显示月 ACALL PROHTOD CJNE R7,#05H,MONTH1 INC R6 CJNE R6,#03H,MONTH2 ;若处于调时状态,则该位闪烁 MOV R6,#00HMONTH1: CLR P2.2 MOV P0,41H ;显示月的低位 AC

14、ALL DELAY3MSMONTH2: SETB P2.2 CLR P2.3 MOV P0,40H ;显示月的高位 ACALL DELAY3MS SETB P2.3 MOV R0,34H ;显示日 ACALL PROHTOD CJNE R7,#06H,YEAR1 INC R6 CJNE R6,#03H,YEAR2 ;若处于调时状态,则该位闪烁 MOV R6,#00HYEAR1: CLR P2.0 MOV P0,41H ACALL DELAY3MSYEAR2: SETB P2.0 CLR P2.1 MOV P0,40H ACALL DELAY3MS SETB P2.1 RET PROHTOD:P

15、USH ACC ;十六进制数转换成bcd码,且可以直接输出p0口 MOV A,R0 MOV B,#0AH DIV AB MOV DPTR,#0030H MOVC A,A+DPTR MOV 40H,A MOV A,B MOVC A,A+DPTR MOV 41H,A POP ACC RETDELAY3MS: ;DELAY3MS MOV 45H,#08HDELAY1: MOV 46H,#0FFHDELAY2: DJNZ 46H,DELAY2 DJNZ 45H,DELAY1 RETPROINT0: CLR EX0 ;切换键中断程序 MOV R3,#00H ACALL PROSHOW MOV C,P3.

16、2 JC IEXIT0 MOV R1,#00H INC R7 CJNE R7,#07H,IEXIT0 MOV R7,#00HINT01: MOV C,P3.2 JC INT02 ACALL PROSHOW AJMP INT01INT02: ACALL PROSHOW IEXIT0: SETB EX0 RETIPROINT1:CLR EX1 ACALL PROSHOW MOV C,P3.3 JC IEXIT1 LCALL ISYEAR ;判断平年闰年 LCALL ISMONTH ;判断月份,确定最大日数 MOV R1,#00H CJNE R7,#00H,NEXT1 ;若不是调时状态,按此键就是切

17、换显示日期、时钟 INC R3 CJNE R3,#02H,IEXIT1 MOV R3,#00H AJMP IEXIT1NEXT1: mov r3,#00h CJNE R7,#03H,NEXT2 ;修改秒位 INC 31H MOV A,31H CJNE A,#3CH,INT11 ;遇60变0 MOV 31H,#00H AJMP IEXIT1NEXT2: CJNE R7,#02H,NEXT3 ;修改分位 INC 32H MOV A,31H CJNE A,#3CH,INT11 ;遇60变0 MOV 31H,#00H AJMP IEXIT1NEXT3: CJNE R7,#01H,NEXT4 ;修改时位

18、 INC 33H MOV A,33H CJNE A,#18H,INT11 ;遇24变0 MOV 33H,#00H AJMP IEXIT1NEXT4: CJNE R7,#06H,NEXT5 ;修改日 INC 34H MOV A,34H CJNE A,49H,INT11 ;到月底就返回月初 MOV 34H,#01H AJMP IEXIT1 NEXT5: CJNE R7,#05H,NEXT6 ;修改月 INC 35H MOV A,35H CJNE A,#0DH,INT11 ;十二月过后就跳回1月 MOV 35H,#01H AJMP IEXIT1NEXT6: CJNE R7,#04H,INT11 ;修

19、改年 INC 36H MOV A,36H CJNE A,#64H,INT11 MOV 36H,#00HINT11: MOV C,P3.3 JC INT12 ACALL PROSHOW AJMP INT11INT12: ACALL PROSHOWIEXIT1: setb EX1 RETIPROTIME: MOV TMOD,#10H MOV TH1,#3CH ;定时器初始化 MOV TL1,#60H setb tr1 INC R4 CJNE R4,#0c8H,EXIT MOV R4,#00H ;计满1秒则清零 CJNE R7,#00H,DIAOSHI AJMP NORMALDIAOSHI:INC

20、R1 ;调时不按键的最长时间为10秒,在此期间又键按下重新计时 CJNE R1,#0AH,EXIT MOV R7,#00H ;到10秒则返回正常显示状态 MOV R1,#00H AJMP EXITNORMAL: ACALL ISYEAR ;判断平闰年,返回标志48h,0为平年,1为闰年 ACALL ISMONTH ;判断哪个月,返回该月的最大日数,存放在49h INC 31H MOV A,31H ;秒加一 CJNE A,#3CH,EXIT MOV 31H,#00H INC 32H ;分加一 MOV A,32H CJNE A,#3CH,EXIT MOV 32H,#00H INC 33H ;时加一

21、 MOV A,33H CJNE A,#18H,EXIT MOV 33H,#00H INC 34H ;日加一 MOV A,34H CJNE A,49H,EXIT MOV 34H,#01H INC 35H ;月加一 MOV A,35H CJNE A,#0DH,EXIT MOV 35H,#01H INC 36H ;年加一 MOV A,36H CJNE A,#64H,EXIT MOV 36H,#00H EXIT: RETIISYEAR: MOV A,36H ;判断平闰年 MOV B,#04H DIV AB MOV A,B CJNE A,#00H,EXITYEAR1 MOV 48H,#01H ;闰年 S

22、JMP EXITYEAREXITYEAR1: MOV 48H,#00H ;平年EXITYEAR: RETIISMONTH: MOV A,35H ;开始检查月份 CJNE A,#02H,NEXTMON1 ;判断二月 MOV R2,48H CJNE R2,#00H,RUNNIAN MOV 49H,#1DH ;平年为28天,赋29给49h AJMP EXITMONTHRUNNIAN:MOV 49H,#1EH ;闰年为29天,赋30天给49h AJMP EXITMONTH NEXTMON1: CJNE A,#04H,NEXTMON2 AJMP XIAOYUE NEXTMON2:CJNE A,#06H,NEXTMON3 AJMP XIAOYUE NEXTMON3:CJNE A,#09H,NEXTMON4 AJMP XIAOYUENEXTMON4:CJNE A,#0BH,DAYUEXIAOYUE: MOV 49H,#1FH ;四,六,九,十一月是小月,30天,但应该赋31天给比较值49h, AJMP EXITMONTHDAYUE: MOV 49H,#20H ;其他月份为大月,31天,赋32天给49hEXITMONTH: RETI END

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1