51单片机数码管时钟电路的设计.doc_第1页
51单片机数码管时钟电路的设计.doc_第2页
51单片机数码管时钟电路的设计.doc_第3页
51单片机数码管时钟电路的设计.doc_第4页
51单片机数码管时钟电路的设计.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

广东石油化工学院51单片机原理与实践课程设计报告学 院 计算机与电子信息学院专 业 班 级 学 号 姓 名 指导教师 课程成绩 完成日期 2010年12月27日数码管时钟电路的设计1、 设计目的:通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。2、 设计要求:LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。3、 设计实验内容:1. 硬件的设计 其采用AT89C51单片机应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据 ,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。2. 系统总体分析系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。l 显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间,用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。l 时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。l 模式切换模块(MODE):切换电子钟的设置模式,包括时设置、分设置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。l 模式设置模块(CONFIG):通过判断设置模式(MODE),执行相应的设置。如时、分、秒的增1以及闹铃开关的变换。另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms,用以消除机械抖动。主循环流程图大致如下:开始键被按下登记相应功能数码管显示是否 图(一)主循环流程图定时器1中断服务程序流程图如下:定时器1中断logfunc = ?执行MODE执行CONFIG结束MODECONFIG 图(二)定时器1中断服务程序流程图3. 系统主要程序的设计 1) 主程序本设计中的主程序主要负责对键盘扫描及显示数据,还包括判断是否闹钟正在活动。若键盘中的P1.6(模式键)或P1.7(设置键)被按下,登记将被执行的功能,主循环不负责功能模块的执行。若闹钟正在活动,调用蜂鸣函数。其中bPalse标识了一秒的前半秒和后半秒,是为了控制显示数据的半秒闪烁。主函数还包含初始化操作,以下省略。loop: MOV B, #01111111B ;位选通信号 MOV R0, #prebuf - 01H ;数据缓冲区nextnum: ACALL keyscan ;扫描键盘 INC R0 MOV A, R0 PUSH ACC MOV A, B RL A MOV B, A JB bPalse, show ORL A, dmask JNB bAlaIng, show MOV led, #0FFH ACALL beeponce 若闹铃活动,调用蜂鸣函数 DEC SP SJMP loopshow: PUSH ACC ACALL displayone 在特定数码管显示数据。 DEC SP DEC SP ACALL delay CJNE R0, #prebufend, nextnum SJMP loopkeyscan: JNB keym, keymode ;若切换键被按下,登记“切换”功能 JNB keyc, keyconf ;若设置键被按下,登记“设置”功能 RET;=;log function mode;=keymode: MOV funclog, #01H ;key act ACALL funcperform ;激活“功能执行模块”(见下文), RET;=;log function config;=keyconf: MOV funclog, #02H ACALL funcperform ;激活“功能执行模块”(见下文) RET2) 显示子程序在特定数码管显示数据,通过堆栈传递参数。第一个参数是待显示的字符,第二个参数是位选通信号。函数通过查字形码表将字形显示至数码管。displayone: PUSH ACC PUSH PSW MOV A, R0 PUSH ACC PUSH B MOV PSW, #00H MOV A, SP SUBB A, #07H MOV R0, A MOV A, R0 INC R0 MOV B, R0 PUSH DPL PUSH DPH MOV DPTR, #metrix MOVC A, A + DPTR JNB bPalse, noft ANL A, ftnoft: MOV lmask, B MOV led, A POP DPH POP DPL POP B POP ACC MOV R0, A POP PSW POP ACC RET3) 定时器TO中断服务程序 电子钟的计秒程序,负责计算时间。act: ;main timer actor CJNE R2, #0BH, con CLR bPalse ;palse per secondcon: DJNZ R2, leave MOV R2, #14H PUSH ACC PUSH PSW MOV PSW, #00H MOV A, s ;s INC A DA A MOV s, A CJNE A, #60H, incn MOV s, #00H MOV A, m ;m INC A DA A MOV m, A CJNE A, #60H, incn MOV m, #00H MOV A, h ;h INC A DA A MOV h, A CJNE A, #24H, incn MOV h, #00Hincn: SETB bPalse JNB bAlaOn, alarmoff ACALL checkala ;check alarm when alarm is ONalarmoff: MOV A, npage ANL A, #02H JNZ skip ACALL prepareskip: POP PSW POP ACCleave: MOV TH0,#03CH MOV TL0,#0B0H RETI4) 模式切换程序切换设置模式,包括时间时设置、时间分设置、时间秒设置、闹铃开关设置、闹铃时设置、闹铃分设置。mode: ;mode ;SETB P3.2 PUSH ACC PUSH PSW PUSH DPL PUSH DPH JNB bAlaIng, modeskip SETB bKick ;stop alarm CLR bAlaIng SJMP modeleavemodeskip: MOV npage, #00H MOV DPTR, #maskdat MOV A, cmode INC A CJNE A, #07H, enmode MOV A, #00Henmode: MOV cmode, A ANL A, #04H JZ notalapage MOV npage, #02H ACALL preala ;时钟调整页准备notalapage: MOV A, cmode MOVC A, A + DPTR MOV dmask, A ;设置时闪烁modeleave: POP DPH POP DPL POP PSW POP ACC RET5) 模式设置程序对时间量执行加1,特别的闹铃开关执行开关设置。conf: ;conf ;SETB P3.3 PUSH ACC PUSH PSW MOV PSW, #00H MOV A, cmode PUSH DPL PUSH DPH JNB bAlaIng, confskip ;SETB bKick ;stop alarm ;CLR bAlaIng SJMP confleaveconfskip: MOV DPTR, #confset RL A JMP A + DPTRset1: ;时设置 MOV A, h INC A DA A MOV h, A CJNE A, #24H, notset MOV h, #00H SJMP notsetset2: ;分设置 MOV A, m INC A DA A MOV m, A CJNE A, #60H, notset MOV m, #00H SJMP notsetset3: ;秒设置 MOV A, s INC A DA A MOV s, A CJNE A, #60H, notset MOV s, #00H SJMP notsetsetae: CPL bAlaOn ;闹钟开关 SJMP notsetasetah: MOV A, ah ;闹钟时设置 INC A DA A MOV ah, A CJNE A, #24H, notseta MOV ah, #00H SJMP notsetasetam: MOV A, am ;闹钟分设置 INC A DA A MOV am, A CJNE A, #60H, notseta MOV am, #00Hnotseta: ACALL preala CLR bKick SJMP confleavenotset: ACALL prepareconfleave: POP DPH POP DPL POP PSW POP ACC RETconfset: SJMP confleave SJMP set1 SJMP set2 SJMP set3 SJMP setae SJMP setah SJMP setam6) 功能执行程序执行程序负责执行被登记的功能,功能由主循环扫描键盘并登记。主循环中,当扫描到有键盘按下时,登记下将被执行的功能,然后启动定时器1,定时器1的中断服务程序即是功能执行程序,中断程序分析并执行被登记的功能。encperform: CLR TR1 ;act once PUSH ACC PUSH PSW MOV A, funclog CJNE A, #01H, encconf JNB keym, encperformleave ;action just at button up; ACALL mode ;do mode function SJMP encperformleaveencconf: CJNE A, #02H, encperformleave JNB keyc, encperformleave ;action just at button up; ACALL conf ;do config functionencperformleave: POP PSW POP ACC RETI4、 完整源代码11s EQU 30Hm EQU 31Hh EQU 32Hdmask EQU 33Hcmode EQU 34Hft EQU 36Hprebuf EQU 37H ;8 byte bufferprebufend EQU 3EHam EQU 3FH ;alarm miniteah EQU 40H ;alarm hournpage EQU 41H ;function pagefunclog EQU 42H ;func to actstack EQU 4FH;pinled EQU P0lmask EQU P2beep EQU P3.3keym EQU P1.6 ;key modekeyc EQU P1.7 ;key config;bit addrbPalse EQU 00HbAlaIng EQU 01HbAlaOn EQU 02HbKick EQU 03H;metrix elementm_none EQU 0AHm_o EQU 0BHm_f EQU 0CHm_n EQU 0DH org 0000H LJMP start org 0003H LJMP modelogger;INT0 to mode org 000BH LJMP act;timer org 0013H LJMP conflogger;INT1 to config org 001BH LJMP encperform;performer org 0100Hstart: MOV SP, #stack MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV R2, #14H ;R2 used by T0 MOV s, #00H MOV m, #00H MOV h, #00H MOV dmask, #00H MOV cmode, #00H MOV npage, #00H MOV ah, #23H MOV am, #59H SETB EA SETB ET0 ;T0 SETB PT0 SETB TR0 SETB ET1 ;T1 SETB EX0;INT0 SETB IT0 SETB EX1;INT1 SETB IT1 SETB P3.2 SETB P3.3 SETB keym SETB keycCLRbAlaIngCLRbAlaOnCLRbKick loop: MOV B, #01111111B MOV R0, #prebuf - 01Hnextnum: ACALL keyscan INC R0 MOV A, R0 PUSH ACC MOV A, B RL A MOV B, A JB bPalse, show ORL A, dmask JNB bAlaIng, show MOV led, #0FFH ;clr led when alarm ACALL beeponce DEC SP SJMP loopshow: PUSH ACC ACALL displayone DEC SP DEC SP ACALL delay CJNE R0, #prebufend, nextnum SJMP loop ; end startbeeponce: CPL beep MOV R5, #02Hbeeploop2: MOV R6, #0FFHbeeploop1: NOP DJNZ R6, beeploop1 DJNZ R5, beeploop2 RET ;end beeponce;=;display one character;param char Character to display;param mask Position character to display;=displayone: PUSH ACC PUSH PSW MOV A, R0 PUSH ACC PUSH B MOV PSW, #00H MOV A, SP SUBB A, #07H MOV R0, A MOV A, R0 INC R0 MOV B, R0 PUSH DPL PUSH DPH MOV DPTR, #metrix MOVC A, A + DPTR JNB bPalse, noft ANL A, ftnoft: MOV lmask, B MOV led, A POP DPH POP DPL POP B POP ACC MOV R0, A POP PSW POP ACC RET ;end displayonedelay: PUSH ACC MOV A, R5 PUSH ACC MOV A, R6 PUSH ACC MOV R5, #03Hdloopo: MOV R6, #0FFHdloop: NOP DJNZ R6, dloop DJNZ R5, dloopo POP ACC MOV R6, A POP ACC MOV R5, A POP ACC RET ;end delay ORG 0200H;=;prepare time datas;to the display buffer;=prepare: MOV ft, #11011111B;enable ft PUSH ACC PUSH PSW PUSH B MOV A, R1 PUSH ACC MOV R1, #prebuf MOV R1, #m_none INC R1 MOV R1, #m_none INC R1 MOV A, h ;h MOV B, A SWAP A ANL A, #0FH MOV R1, A ANL B, #0FH INC R1 MOV R1, B MOV A, m ;m MOV B, A SWAP A ANL A, #0FH INC R1 MOV R1, A ANL B, #0FH INC R1 MOV R1, B MOV A, s ;s MOV B, A SWAP A ANL A, #0FH INC R1 MOV R1, A ANL B, #0FH INC R1 MOV R1, B POP ACC MOV R1, A POP B POP PSW POP ACC RET ;end prepare;=;prepare alarm datas;to the display buffer;=preala: MOV ft, #0FFH ;no ft PUSH ACC PUSH PSW MOV R1, #prebuf MOV R1, #m_o INC R1 JNB bAlaOn, alaoff MOV R1, #m_n INC R1 MOV R1, #m_none SJMP alaconalaoff: MOV R1, #m_f INC R1 MOV R1, #m_falacon: INC R1 MOV R1, #m_none MOV A, ah SWAP A ANL A, #0FH INC R1 MOV R1, A MOV A, ah ANL A, #0FH INC R1 MOV R1, A MOV A, am SWAP A ANL A, #0FH INC R1 MOV R1, A MOV A, am ANL A, #0FH INC R1 MOV R1, A POP PSW POP ACC RET ;end preala ORG 0300H;=;perform action;=encperform: CLR TR1 ;act once PUSH ACC PUSH PSW MOV A, funclog CJNE A, #01H, encconf JNB keym, encperformleave ;action just at button up; ACALL mode ;do mode function SJMP encperformleaveencconf: CJNE A, #02H, encperformleave JNB keyc, encperformleave ;action just at button up; ACALL conf ;do config functionencperformleave: POP PSW POP ACC RETI;=;prepare to do function;=funcperform: MOV TH1, #0D8H MOV TL1, #0F0H SETB TR1 RET;=;log function mode;=modelogger: MOV funclog, #01H ACALL funcperform RETI;=;log function config;=conflogger: MOV funclog, #02H ACALL funcperform RETI ORG 0400H;=;mode;to change function;or stop alarm when ;alarming;=mode: ;mode ;SETB P3.2 PUSH ACC PUSH PSW PUSH DPL PUSH DPH JNB bAlaIng, modeskip SETB bKick ;stop alarm CLR bAlaIng SJMP modeleavemodeskip: MOV npage, #00H MOV DPTR, #maskdat MOV A, cmode INC A CJNE A, #07H, enmode MOV A, #00Henmode: MOV cmode, A ANL A, #04H JZ notalapage MOV npage, #02H ACALL prealanotalapage: MOV A, cmode MOVC A, A + DPTR MOV dmask, Amodeleave: POP DPH POP DPL POP PSW POP ACC RET ;end mode;=;conf;to change setting;that the mode decided ;=conf: ;conf ;SETB P3.3 PUSH ACC PUSH PSW MOV PSW, #00H MOV A, cmode PUSH DPL PUSH DPH JNB bAlaIng, confskip ;SETB bKick ;stop alarm ;CLR bAlaIng SJMP confleaveconfskip: MOV DPTR, #confset RL A JMP A + DPTRset1: MOV A, h INC A ;h DA A MOV h, A CJNE A, #24H, notset MOV h, #00H SJMP notsetset2: MOV A, m INC A ;m DA A MOV m, A CJNE A, #60H, notset MOV m, #00H SJMP notsetset3: MOV A, s INC A ;s DA A MOV s, A CJNE A, #60H, notset MOV s, #00H SJMP notsetsetae: CPL bAlaOn ;ala enable SJMP notsetasetah: MOV A, ah ;ala h INC A DA A MOV ah, A CJNE A, #24H, notseta MOV ah, #00H SJMP notsetasetam: MOV A, am ;ala m INC A DA A MOV am, A CJNE A, #60H, notseta MOV am, #00Hnotseta: ACALL preala CLR bKick SJMP confleavenotset: ACALL prepareconfleave: POP DPH POP DPL POP PSW POP ACC RETconfset: SJMP confleave SJMP set1 SJMP set2 SJMP set3 SJMP setae SJMP setah SJMP setam ; end conf ORG 0500Hkeyscan: JNB keym, keymode JNB keyc, keyconf RET;=;log function mode;=keymode: MOV funclog, #01H ;key act ACALL funcper

温馨提示

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

评论

0/150

提交评论