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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

课程设计基于51单片机的数字时钟.docx

1、课程设计基于51单片机的数字时钟课程设计基于51单片机的数字时钟51 单片计算机即单片微型计算机。(Single-Chip Microcomputer ),是 集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 系统由AT89C51、LED数码管、按键、发光二极管等部分构成,能实现时间的调整、定 时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4完成。其中SB0为

2、时间校对,定时器调整功能键,按SB 0进入调整状态。SB1为功能切换键。第一轮按动SB1依次进入一路、二路、三路定时时间设置提示程序,按SB3进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1键,依次进入时间 年? 位校对、? 月? 位校对、 ? 日? 位校对、? 时? 位校对、? 分? 位校对、? 秒? 位 校对状态。不管是进入那种状态,按动SB2皆可以使被调整位进行不进位增量加1变化。各预置量设置完成后,系统将所有的设置存入RAM中,按SB1退出调整状态。上电后,系统自动进入计时状态,起始于? 00? 时? 00? 分。SB4为年月日显示转换键,可使原

3、来显示时分秒转换显示年月日。 1. 电原理图见附图1。由6个共阴极的数码管组成时、分、秒的显示。P0口的8条数据线 P0.0至P0.7分别与两个CD4511译码的ABCD口相接,P2口的P2.0至P2.2分别通过电阻 R10至R13与VT1至VT3的基极相连接。这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。从P0口输出的代码是BCD码,从P2口输出的就是位选码。这是扫描显示原理。 。 2 键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和

4、断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms. 3 按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。 本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。 1 由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。但P0 口

5、的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达 的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。具体转换过程如下: 我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码, 再放回A中,然后将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成四 位的BCD码:(0100)(0101)然后放入A中。 A中BCD码,高位四位代表?4?低四位代 表?5?同时送给

6、两个译码器中,译码后? 45? 字就在两个LED中显示出来。 2 时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后, 进入计时,满100毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟, 分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率, 得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。累加是用指令INC来实现的。进入中断服务程序以后,执行PUSH PSW和PUSH A将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的? 保护现场? . 以保护现

7、场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循? 后进先出? 的原则。 3 系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先 将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指 令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR指令,将对应的 那路P3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB 对应的P3置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#d

8、irect, rel,其转移条件是累加器A中的值与立即数不等则转移。 1、 谢自美,电子线路设计、实验、测试 武汉:华中理工大学出版社,2000 2、 何书森、何华斌实用数字电路原理与设计速成福州:福建科学技术出版社,2000.6 3、 白驹衍, 单片计算机及应用北京:电子工业出版社, 1999.2 五:程序 SEC EQU 32H ;秒 即时时间 伪指令 MIN EQU 31H ;分 LJMP SHOW HOUR EQU 30H ;时 DAY EQU 35H ;日 ORG 000BH ;计数中断T0、方式1 MON EQU 34H ;月 LJMP TIME YEAR EQU 33H ;年 O

9、RG 0013H MIN_1 EQU 41H ;分 定时器1路、开存储单LJMP CHANGE; 调整时间、定时、INT1元 (SB0键) HOUR_1 EQU 42H ;时 ;-主程序 DAY_1 EQU 43H ; ORG 0030H MON_1 EQU 44H ; MAIN: YEAR_1 EQU 45H ; ;-初始化付值 MIN_11 EQU 40H ;分 定时器1路、关存储MOV YEAR , #02 单元 MOV MON , #05 HOUR_11 EQU 46H ;时 MOV DAY , #01 DAY_11 EQU 47H ;日 MOV HOUR , #00 MON_11 E

10、QU 48H ;月 MOV MIN , #00 YEAR_11 EQU 49H ;年 MOV SEC , #00 CLR 40H ;定时单元1路清零 ;* CLR 41H CLR 42H CLR 43H ORG 0000H CLR 44H CLR 45H ljmp MAIN CLR 46H ORG 0003H ;中断转换显示年月日、INT0CLR 47H (SB4键) CLR 48H CLR 49H ;-开中断 MOV TMOD , #01H ;计数、模式1、T0 CJNE A , DAY_1,LOOP_1 MOV TL0, #0B0H ;100SM计数定时 MOV A, HOUR MOV T

11、H0, #3CH ; CJNE A, HOUR_1,LOOP_1 clr p3.0 MOV A, MIN MOV 20H, #0AH ;10次*100SM CJNE A, MIN_1, LOOP_1 SETB PT0 ;T0为最高级 CPL P3.0 SETB TR0 ;允许计数 ;-关 SETB ET0 ;允许T0中断 LOOP_1: SETB EX0 ;允许INT0中断 MOV A, YEAR SETB EX1 ;允许INT1中断 SETB EA ;开总中断 ;-显示、定时器启动判断 CJNE A, YEAR_11, LOOP;年比较 LOOP: MOV A, MON CJNE A, MO

12、N_11, LOOP MOV R1, #30H; 存储单元 MOV A, DAY MOV R4, #01H; 位选通 CJNE A , DAY_11,LOOP MOV R3, #03H; 三组显示 MOV A, HOUR NEXT: CJNE A, HOUR_11,LOOP MOV A, MIN MOV A , R1 ; CJNE A, MIN_11, LOOP CPL P3.0 MOV B , #10 ;将存储单元转换成两高低两LJMP LOOP 组的BCD码 ;-年月日显示中断子程序 SHOW: DIV AB SWAP A ORL A, B PUSH PSW MOV P0, A;输出 MO

13、V P2, R4 INC R1 ;下一单元 push ACC MOV A, R4 ; PUSH B RL A ;位移 PUSH 01H MOV R4, A PUSH 02H LCALL DE5SM ;延时0.5SM PUSH 03H DJNZ R3, NEXT ;全扫描显示一偏 PUSH 04H ;-判断定时输出(只编写了一路) MOV R2, #0FFH ;中断扫描次数 CJNE R7, #88H,LOOP ;是8则开,否则、定TURN: MOV R1 , #33H 时已关、转 MOV R4 , #01H ;-开 MOV R3 , #03H MOV A, YEAR NEXT_1: CJNE

14、A, YEAR_1, LOOP_1;年比较,不等转关 MOV A, MON MOV A, R1 CJNE A, MON_1, LOOP_1 MOV A, DAY MOV B , #10 MOV R6 , HOUR DIV AB CJNE R6 , #25 , OUT SWAP A MOV HOUR ,#00 ORL A, B INC DAY MOV P0, A MOV R5, MON MOV P2, R4 CJNE R5, #1, MON_22;是否1月、不是转2INC R1 月 RL A MOV R5, DAY MOV R4 ,A CJNE R5, #32, OUT ; 本月是否益出 LCA

15、LL DE5SM INC MON DJNZ R3, NEXT_1 MOV DAY,#1 DJNZ R2, TURN ;反复显示一定时间后返回 LJMP OUT POP 04H OUT: POP 03H POP 06H POP 02H POP 01H POP B POP B POP ACC POP ACC POP PSW POP PSW RETI RETI ;-计数中断服务子程序 MON_22: TIME: PUSH PSW MOV R5, MON PUSH ACC CJNE R5 , #2 , MON_33;是否2月、不是转3PUSH B 月 PUSH 06H MOV A, YEAR ;判断是

16、否瑞年 MOV TH0 , #3CH;重装计数 MOV B, #4 MOV TL0 , #0BH; DIV AB DJNZ 20H, OUT ;转到中断跳出pop程序 MOV A , B MOV 20H, #0AH ; 重装:100*10=1000 JNZ OUT_1;不是则转(A不为零则转) ;-进位程序 MOV R5 ,DAY INC SEC CJNE R5,#30, OUT;如是瑞年、判断是否到MOV R6, SEC ; 29天 CJNE R6, #60, OUT;比较 INC MON MOV SEC , #00 ; MOV DAY ,#1 LJMP OUT OUT_1: INC MIN

17、 MOV R6, MIN MOV R5, DAY CJNE R6, #60, OUT MOV MIN , #00 CJNE R5, #29, OUT ;平年二月判断 INC HOUR LJMP OUT INC MON MON_77: MOV DAY , #1 MOV R5, MON LJMP OUT MON_33: MOV R5, MON CJNE R5,#7, MON_88 MOV R5, DAY CJNE R5,#32,L1 CJNE R5, #3 , MON_44 INC MON MOV R5, DAY MOV DAY , #1 CJNE R5 , #32, OUT L1: LJMP O

18、UT INC MON MON_88: MOV DAY , #1 LJMP OUT MON_44: MOV R5, MON MOV R5, MON CJNE R5,#8, MON_99 MOV R5, DAY CJNE R5 ,#32,L2 CJNE R5,#4, MON_55 INC MON MOV R5, DAY MOV DAY , #1 CJNE R5 ,#31,OUT L2: LJMP OUT INC MON MON_99: MOV DAY , #1 LJMP OUT MON_55: MOV R5, MON MOV R5,MON CJNE R5,#9, MON_00 MOV R5,DAY

19、 CJNE R5 ,#31,L3 CJNE R5,#5, MON_66 INC MON MOV R5,DAY MOV DAY , #1 CJNE R5,#32,OUT L3: LJMP OUT INC MON MON_00: MOV DAY,#1 LJMP OUT MON_66: MOV R5, MON MOV R5, MON CJNE R5,#10, MON_AA MOV R5, DAY CJNE R5 ,#32,L4 CJNE R5,#6, MON_77 INC MON MOV R5, DAY MOV DAY , #1 CJNE R5 ,#31,OUT L4: LJMP OUT INC M

20、ON MON_AA: MOV DAY , #1 MOV R5, MON MOV B ,#10 DIV AB SWAP A CJNE R5,#11, MON_BB ORL A,B MOV R5,DAY MOV P0, A CJNE R5,#31,L5 MOV P2, #02H INC MON LCALL READ MOV DAY , #1 LCALL DE250SM L5: LJMP OUT CJNE A, 01H, MON_111 MON_BB: CJNE A, #0FBH, KEY2_8 ;按SB2转月调整 LJMP DAY_111 KEY2_8: MOV R5, DAY CJNE A,#0

21、FDH,MON_111 CJNE R5 ,#32,L6 INC YEAR MOV MON, #1 INC MON_1 ;1路月单元加1 MOV DAY , #1 MOV R5,MON_1 L6:LJMP OUT CJNE R5,#13,MON_111;益出 ;-按SB2定时器年单元加1子程序 MOV MON_1, #01H SB3_2: LJMP SHOW_2 ;二路没编返回 AJMP MON_111 ; 转到月显 SB3_3: LJMP SHOW_3 ;三路没编返回 ;_-日单元加1子程序 SB3_1: DAY_111: MOV A , YEAR_1 ; 调时年单元 MOV A , DAY_

22、1 ; 调时日单元显示提示 MOV B ,#10 MOV B ,#10 DIV AB DIV AB SWAP A SWAP A ORL A,B ORL A,B MOV P0, A MOV P0, A MOV P2, #01H MOV P2, #04H LCALL READ LCALL READ LCALL DE250SM LCALL DE250SM CJNE A, 01H, SB3_1 CJNE A, 01H,DAY_111 CJNE A, #0FBH, KEY2_7 ;按SB2转年调整 CJNE A, #0FBH, KEY2_9 ;按SB2转日调整 LJMP MON_111 ;按SB1往下调

23、月单元 LJMP HOUR_111 KEY2_7:CJNE A, #0FDH, SB3_1 KEY2_9: CJNE A,#0FDH,DAY_111 INC YEAR_1 ; 1路年单元加1 INC DAY_1 ;1组日单元加1 MOV R5,YEAR_1 MOV R5, DAY_1 CJNE R5,#09,SB3_1 ;益出 CJNE R5,#32,DAY_111;益出 MOV YEAR_1, #00H MOV DAY_1, #01H AJMP SB3_1 ; AJMP DAY_111 ; 转到日显 ;-月单元加1子程序 ;-按SB2时单元加1子程序 MON_111: HOUR_111: M

24、OV A , MON_1 ; 调时月单元显示 MOV A , HOUR_1 ; 调时时单元显示提示 MOV B ,#10 SWAP A DIV AB ORL A,B SWAP A MOV P0, A ORL A,B MOV P2, #01H MOV P0, A LCALL READ MOV P2, #01H LCALL DE250SM LCALL READ CJNE A, 01H, OFF_CH LCALL DE250SM CJNE A, #0FBH, KEY2_F7 ;按SB2转年调CJNE A, 01H,HOUR_111 整 CJNE A, #0FBH, KEY2_10 ; 按SB2转时调

25、LJMP MON_OFF ;按SB1往下调月单元 整 KEY2_F7:CJNE A, #0FDH, OFF_CH LJMP MIN_111 INC YEAR_11 ; 1路年单元加1 KEY2_10:CJNE A,#0FDH,HOUR_111 MOV R5,YEAR_11 INC HOUR_1 CJNE R5,#09,OFF_CH ;益出 MOV R5,HOUR_1 MOV YEAR_11, #00H CJNE R5,#24,HOUR_111;益出 AJMP OFF_CH ; MOV HOUR_1, #00H ;-月单元加1子程序 AJMP HOUR_111 ; 转到时显 MON_OFF: ;

26、-分单元加1子程序 MOV A , MON_11 ; 调时月单元显示 MIN_111: MOV B ,#10 MOV A , MIN_1 ; 调时分单元、并显示提示 DIV AB MOV B ,#10 SWAP A DIV AB ORL A,B SWAP A MOV P0, A ORL A,B MOV P2, #02H MOV P0, A LCALL READ MOV P2, #02H LCALL DE250SM LCALL READ CJNE A, 01H, MON_OFF LCALL DE250SM CJNE A, #0FBH, KEY2_F8 ;按SB2转月调CJNE A, 01H,MI

27、N_111 整 CJNE A, #0FBH, KEY2_11 ;按SB2转分调LJMP DAY_OFF 整 KEY2_F8: AJMP OFF_CH ;按SB3往下调定时:关单元 KEY2_11: CJNE A, #0FDH, MIN_111 CJNE A,#0FDH,MON_OFF INC MIN_1 ;1路分单元加1 MOV R5, MIN_1 INC MON_11 ;1路月单元加1 CJNE R5,#60,MIN_111;益处 MOV R5,MON_11 MOV MIN_1, #00H CJNE R5,#13,MON_OFF;益出 AJMP MIN_111 ; 转到分显 MOV MON_

28、11, #01H 年单元调整 AJMP MON_OFF ; 转到月显 OFF_CH: MOV A , YEAR_11 ; 调时年单元 ;_-日单元加1子程序 MOV B ,#10 DAY_OFF: DIV AB MOV A , DAY_11 ; 调时日单元显示提示 MOV B ,#10 DIV AB DIV AB SWAP A SWAP A ORL A,B ORL A,B MOV P0, A MOV P0, A MOV P2, #02H MOV P2, #04H LCALL READ LCALL READ LCALL DE250SM LCALL DE250SM CJNE A, 01H,MIN_

29、OFF CJNE A, 01H,DAY_OFF CJNE A, #0FBH, KEY2_F11 ;按SB2转分调CJNE A, #0FBH, KEY2_F9 ;按SB2转日调整 整 LJMP ON_1 ;按SB3往下调定时:开与关 LJMP HOUR_OFF KEY2_F11: CJNE A, #0FDH, MIN_OFF KEY2_F9: CJNE A,#0FDH,DAY_OFF INC MIN_11 ;1路分单元加1 INC DAY_11 ;1组日单元加1 MOV R5, MIN_11 MOV R5, DAY_11 CJNE R5,#60,MIN_OFF;益处 CJNE R5,#32,DA

30、Y_OFF;益出 MOV MIN_11, #00H MOV DAY_11, #01H LJMP MIN_OFF ; 转到分显 AJMP DAY_OFF ; 转到日显 ;-开、关定时 ;-按SB2时单元加1子程序 ON_1:CJNE A, #0FBH, MIN_OFF HOUR_OFF: K1: MOV A, #88H MOV R7, A MOV A , HOUR_11 ; 调时时单元显示提示 MOV P0, A MOV B ,#10 MOV P2, #0FFH;三组都显示开 DIV AB LCALL READ SWAP A LCALL DE250SM ORL A,B CJNE A, 01H,

31、ON_1;去抖后比较 MOV P0, A CJNE A, #0FBH,KEY2_12 ;按SB2转关 MOV P2, #01H LJMP OUT_A ;按SB3调出、处于开状态 LCALL READ KEY2_12: CJNE A, #0FDH, K1 LCALL DE250SM k2: MOV A, #00H; 显示0关 CJNE A, 01H,HOUR_OFF MOV R7, A CJNE A, #0FBH, KEY2_F10 ; 按SB2转时MOV P0, A 调整 MOV P2, #0FFH; LJMP MIN_OFF KEY2_F10:CJNE A,#0FDH,HOUR_OFF INC HOUR_11 LCALL READ MOV R5,HOUR_11 CJNE R5,#24,HOUR_OFF;益出 LCALL DE250S

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

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