完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
设计任务:
1. 屏幕保护的检查(P.从右至左流动) 2. 按下A键显示8个P.,然后开始运行 3. 时分秒、年月日之间用“-”分割,并闪烁 4. 运行时按下A进入调整时钟状态,再按一次恢复运行 5. 在运行状态下,按下BCD分别显示三种功能,可切换观看,按A键返回运行 6. 在各调整状态下,按B调秒(日),C调分(月),D调时(年),短时间按下只加一次,长时间按下不停歇的加数,调整完毕后按A键返回运行状态。 7. 定时功能:在运行时按下B显示定时,再按B进入调整状态,设置完成按A返回。 8. 当“时”小于10时,高位不显示,即高位“清零”。 9. 秒表功能:在运行时按下C键,进入秒表功能,奇数次C开启秒表,偶数次C关闭,按A键返回。 10. 在运行时按下D键显示日期,再按D键静茹调整状态,按A键返回。 ORG OOOOH START: AJMP MAIN ORG OOOBH AJMP PITO ;==============/////主程序///=====================---========= ORG 0030H MAIN: MOV SP, #60H ;设置堆栈起始地址 MOV R0, #30H MOV R7, #08H WAIT: MOV @R0, #0AH ;缓存全置P. INC R0 DJNZ R7, WAIT ;————————屏保程序———————————— MOV P2, #0CH ;显示P MOV R4, #80H WAITO: MOV A, R4 MOV P0, A RR A MOV R4, A MOV R7, #250 ;延时 WAIT1: LCALL DELY LCALL KEY JB 20H.O, WAIT2 ;按下A键进入时钟运行 DJNZ R7, WAIT1 AJMP WAITO ;———————————————————— WAIT2: CLR 20H.0 MOV 30H, #00H ;缓存清零 MOV 31H, #00H MOV 32H, #0BH MOV 33H, #00H MOV 34H, #00H MOV 35H, #0BH MOV 36H. #00H MOV 37H. #00H ;———————————————————— MOV 50H, #06H ;初始日期 MOV 51H, #00H MOV 52H, #0BH MOV 53H, #02H MOV 54H, #0lH MOV 55H, #OBH MOV 56H, #09H MOV 57H, #00H —————————————————————— MOV 38H, #00H ;初始定时 MOV 39H, #00H MOV 3AH, #0BH MOV 3BH, #00H MOV 3CH, #00H MOV 3DH, #0BH MOV 3EH, #07H MOV 3FH, #00H ;—————————————————————————— MOV 58H, #00H ;缓存清零 MOV 59H, #00H MOV 5AH, #0BH MOV 5BH, #00H MOV 5CH, #0BH MOV 5DH, #0BH MOV 5EH, #00H MOV 5FH, #00H ;—————————————————————————— MOV TMOD, #0lH ;设置定时中断 MOV TLO, #ODCH MOV THO, #3FH MOV IE, #82H SETB TRO MOV 40H, #10H ;用6MHz,循环次数为8,用12MHz循环16次 ;=============///闪烁程序////=========================================== WAIT3 : MOV R7, #50 WAIT4 : LCALL DISP LCALL DINGSHI ;调用显示,键扫,定时子程序 LCALL KEY JB 20H. 0, TOA ;运行时闪烁,等待中断或功能键按下 JB 20H. 1, TOB JB 20H. 2, TOC JB 20H. 3, TOD LCALL DELY DJNZ R7, WAIT4 MOV 32H, #OCH ;各级单位之间闪烁 MOV 35H, #OCH MOV R7 #50 WAIT5 : LCALL DISP LCALL DINGSHI LCALL KEY JB 20H.0, TOA ;运行时闪烁,等待中断或功能键按下 JB 20H.1, TOB JB 20H.2, TOC JB 20H.3, TOD LCALL DELY DJNZ R7, WAIT5 MOV 32H, #OBH MOV 35H, #OBH SJMP WAIT3 TOA: JBC 0F0H, WAIT6 ;确保A键按下显示时间时分秒 JBC 0F1H, WAIT6 JBC 0F2H, WAIT6 ;判断清零并转移 LJMP ANKEYO WAIT6: CLR 0F4H CLR 0F3H CLR 0F5H LJMP WAIT3 TOB: CLR 0F0H ;清除其他标志位 CLR 0F1H JB 0F2H. TOBl SETB 0F2H ;作为标志位使用 MOV 20H, #00H AJMP WAIT3 TOBl: SETB 0F4H AJMP ANKEY ;跳到键功能子程序 TOC : CLR OFOH CLR OF2H JB OF1H, TOCl ;OF2,0F4-B键定时38H-3FH SETB OFIH ;OF1,0F3-C键秒表58H-5FH MOV 20H, #OOH AJMP WAIT3 ;OFO,OF5-D键日期50H-57H TOC1 : SETB OF3H LCALL MIAOBIAO CLR OF1H CLR OF3H LJMP WAIT3 TOD : CLR OFIH CLR OF2H JB OFOH, TOD1 SETB OFOH MOV 20H #OOH AJMP WAIT3 TOD1 : SETB OF5H LJMP ANKEY ;=====///中断服务程序///======== - ORG 0300H PITO: PUSH PSW ;中断保护现场 PUSH ACC SETB PSW.3 MOV TLO, #ODCH ;重置定时器数 MOV THO, #0FH MOV A, 40H DEC A MOV 40H, A JNZ RETO MOV 40H, #10H MOV A, 37H ;中断高位清零程序 XRL A #OCH JNZ PITl PIT1: MOV RO #31H ;加1程序 ACALL DAAD1 MOV A, R2 XRL A, #60H JNZ RETO ;满60清零,不满返回。 ACALL CLRO MOV RO, #34H ACALL DAADl MOV A, R2 XRL A, #60H JNZ RETO ACALL CLRO MOV RO #37H ACALL DAADl MOV A, R2 XRL A, #24H JNZ RETO ACALL CLRO LCALL DATE ;满24小时则日加1 RETO : MOV A, 37H ;中断高位清零程序 JNZ RETl MOV 37H, #OCH RETl: POP ACC POP PSW RETl DAADl: MOV A @RO ;加1子程序 DEC RO SWAP A ORL A, @RO ADD A, #OlH DA A MOV R2, A ANL A, #OFH MOV @RO, A MOV A, R2 INC RO ANL A, #OFOH SWAP A MOV @RO, A RET CLRO : CLR A ;高位清零 MOV @RO, A DEC RO MOV @RO, A RET ;=======///显示字程序///=================================== ORG 0400H DISP: PUSH ACC PUSH PSW SETB RS1 MOV RO, #50H JB OFOH, LD2 ;判断显示哪种状态 MOV RO, #58H JB OF1H, LD2 MOV RO, #38H JB OF2H, LD2 MOV RO, #30H LD2 : MOV R3, #80H MOV A , R3 LD0 : MOV 80H, A ;高128单元只能直接寻址 MOV A, @RO MOV DPTR, #TABLE MOVC A, @A+DPTR MOV OAOH, A ;高128单元只能直接寻址 ACALL DL INC RO MOV A, R3 JB ACC.O, LD1 ;是否显示到最高位 RR A MOV R3, A AJMP LDO LDl: POP PSW POP ACC RET DL: MOV R2 #7DH ;延时程序 LOOP: NDP NDP DJNZ R2, LOOP RET TABLE: DB OCOH., OF9H,OA4H,OBOH,99H,92H,82H,OF8H, 80H,90H DB OCH,0BFH,OFFH,OOH ;=============///键盘功能子程序///============ ORG 0500H ANKEYO :PUSH IE ; PUSH TLO PUSH THO MOV IE, #OOH MOV 20H, #OOH ANKEY : LCALL DISP ;判断要进入的键功能 JNB Pl.1, TOKEYB JNB Pl.2, TOKEYC JNB Pl.3, TOKEYD LCALL DISP LCALL KEY JB 20H.0, KEYA LJMP ANKEY TOKEYB: CLR P1.1 ;跳到B键 LJMP KEYB TOKEYC: CLR Pl.2 LJMP KEYC TOKEYD: CLR P1.3 LJMP KEYD KEYA : MOV 20H #OOH ;A键返回 POP THO POP TLO POP IE MOV IE, #82H LJMP WAIT3 KEYB: LCALL DISP ;是否跳到其他键 JNB P1.O, KEYB2 JNB Pl.2, KEYC JNB PI.3, GOKEYD MOV Pl, #OFFH ;恢复Pl口高电平 MOV R7, #60 PPPP1 : LCALL DISP DJNZ R7, PPPP1 MOV RO, #51H ;日期 JB OF5H, LD3 ;判断显示哪种状态 MOV RO, #39H ;定时 JB OF4H, LD3 MOV RO, #31H LD3 : LCALL DAADl ;根据不同的标志位 MOV A, R2 ;加不同的值 JB OF5H, LD4 XRL A, #60H AJMP LD5 LD4: XRL A, #31H JNZ KEYBl MOV 51H, #OOH MOV 50H, #OlH AJMP KEYBl LD5: JNZ KEYBl LCALL CLRO KEYB1 : AJMP KEYB ;A不按下则不返回 GOKEYD: LJMP KEYD KEYB2: JB OF4H, KEYB3 JB OF5H, KEYB3 LJMP ANKEY KEYB3 : LJMP WAIT3 ;A按下则返回 KEYC : LCALL DISP JNB Pl.O, KEYC2 JNB P1.1, KEYB JNB P1.3, KEYD JB PI.2, KEYC MOV Pl, #OFFH MOV R7, #60 PPPP2: LCALL DISP DJNZ R7, PPPP2 MOV RO, #54H ;日期 JB OF5H, LD6 ;判断显示哪种状态 MOV RO, #3CH ;定时 JB OF4H, LD6 MOV RO, #34H LD6: LCALL DAADl MOV A, R2 JB OF5H, LDD7 XRL A, #60H AJMP LD8 LDD7 : XRL A, #13H JNZ KEYCl MOV 54H, #OOH MOV 53H, #OlH AJMP KEYCl LD8 : JNZ KEYCl :满60/12清零,不满返回 LCALL CLRO KEYC1 : AJMP KEYC KEYC2: JB OF4H, KEYC3 JB OF5H, KEYC3 LJMP ANKEY KEYC3: LJMP WAIT3 KEYO : LCALL DISP MOV A, 37H ;按键高位清零程序 XRL A, #OCH JNZ PPPP4 MOV 37H, #00H PPPP4 : JNB P1.O, KEY02 JNB P1.1, GOKEYB JNB P1.2, KEYC JB P1.3, KEYO MOV Pl, #OFFH MOV R7, #60 PPPP3 : LCALL DISP DJNZ R7, PPPP3 MOV RO, #57H ;日期 JB OF5H, L09 ;判断显示哪种状态 MOV RO, #3FH ;定时 JB OF4H, LD9 MOV RO, #37H LD9: LCALL DAAD1 MOV A, R2 JB OF5H, LDDO JB OF4H, LDD2 XRL A, #24H AJMP LOO1 LDDO : XRL A, #99H LDD2: XRL A, #25H ;关闭定时功能的关键 LDDl: JNZ KEYDl ;满24 /99/25清零,不满返回。 LCALL CLRO KEYD1 : AJMP KEYD GOKEYB: LJMP KEYB KEYD2 : JB OF4H, KEYD3 JB OF5H, KEYD3 KEYD3 : LJMP WAIT3 ============///按键判断子程序////============== ORG 0700H KEY : MOV P1, #OFFH MOV A, P1 CPL A ANL A, #OFH JZ RETX ;等零返回 LCALL DISP ;延时12ms LCALL DISP MOV A, Pl CPL A ANL A #OFH JZ RETX ;判断是否有按键 MOV 20H, A LOOP1: LCALL DISP MOV 20H, A ;等待键松 MOV A, Pl CPL A ANL A, #OFH JNZ LOOPl RETX: RET ;==========///延时子程序///=============== DELY: MOV R6, #03 ;延时3ms程序 LOOP3:MOV R5, #250 LOOP4 : NOP NOP DJNZ R5, LOOP4 DJNZ R6, LOOP3 RET ;===========///日期程序 ///================ ORG 0800H DATE: MOV RO, #51H LCALL DAADl ;加1子程序 MOV A, R2 XRL A, #31H JNZ BACK ;满30清零,不满返回。 LCALL DAADl MOV A, R2 XRL A, #13H JNZ BACK LCALL CLRO MOV R0, #57H LCALL DAADl MOV A, R2 XRL A, #99H JNZ BACK LCALL CLRO BACK : RET ;==============////秒表功能///============ ORG 0900H MIAOBIAO:CLR 20H.2 ;调显示和延时程序 LCALL DISP LCALL DELY LCALL DELY MOV RO, #59H LCALL DAADl MOV A, R2 XRL A, #99H JNZ RETM ;满99清零,不满返回。 LCALL CLRO MOV RO, #5CH LCALL DAADl MOV A, R2 XRL A, #60H JNZ RETM LCALL CLRO MOV RO, #5FH LCALL DAADl MOV A, R2 XRL A, #60H JNZ RETM LCALL CLRO RETM: LCALL KEY JB 20H.0, TOBACK ;A键若按下则返回 JB 20H.2, PAUSE LJMP MIAOBIAO PAUSE: CLR 20H.2 MIAOBIAO JB 20H.0, TOBACK AJMP PAUSE TOBACK : MOV 20H, #OOH RET ;==============///定时功能///============ DINGSHI: LCALL DISP ;在子程序中慎用堆栈 MOV R2, #08H MOV RO, #37H MOV Rl, #3FH MOV A, 37H ; XRL A, #OCH JNZ DING MOV R2, #07H MOV R0, #36H MOV R1, #3EH DING: MOV A, @RO XRL A, @Rl JNZ RETD DEC RO DEC Rl DJNZ R2 DING CLR P3.0 ;接其他口对程序有影响 MOV R3. #100 DINGl: MOV R4. #200 ING2 : LCALL DISP LCALL DELY LCALL KEY JB 20H.0, RETD ;按下A键返回 DJNZ R4. DING2 DJNZ R3. DINGl RETD: MOV 20H #OOH SETB P3.0 RET ;========================================================== END ;============///程序结束///================================ |
|
相关推荐
8个回答
|
|
汇编啊不是很清楚哎
|
|
|
|
错误提示是什么
|
|
|
|
你可以尝试用C来编一下。
|
|
|
|
|
|
|
|
建议楼主用C语言写,汇编太老了
|
|
|
|
{:12:}
|
|
|
|
学习!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
看的好眼花啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1304 浏览 0 评论
关于proteus仿真逆变器,输入直流电48V,输出波形幅值不为48V的问题。
1355 浏览 1 评论
1664 浏览 0 评论
1562 浏览 2 评论
请问各位大神,为什么用非隔离电源max6675K 读数不是0就是775度啊
1603 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 20:48 , Processed in 0.733372 second(s), Total 62, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号