毕业论文-基于51单片机数字秒表设计内容摘要:

9J2 10KVCCP10P11P12P13P14P15P16P17S2SWS3SWS4SWS6SWS7SWS8SWSKS9S5SW12J3USB电源18B20电路复位电路单排插独立键盘电路流水灯电路数码管电路单片机控制系统晶振电路下载口蜂鸣电路12JX1CON212JX2CON2B20B20B21B21短路帽短路帽VCC 17 附录 B 程序清单 ;项目名称 :秒表; ;设计者:高金科; ;设计日期: 2020 年 12 月; ; LED 数码管显示器设定; ; 段控线,接 LED 的显示段 dp,g,f,e,d,c,b,a ; ; 位控线从左至右 (LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0); ;显示缓冲区设定从左至右依次为 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH ; ;独立式键盘设定与功能; ; 8 个按键 S1 至 S8 分别依次接在 至 口线; ; K0 的功能为复位 ; K1 的功能为启动 /停止(标识符为 当它为 1 时启动,为 0 时停止) ; K2 的功能为暂停 /继续(标识符为 当它为 1 时暂停,为 0 时继续) ; K3 的功能为清零 ;常数表格 ; ; DISBH(系统提示符 ); ; TAB(共阳数码管字型代码表 ) ; ;子程序; ; TIME_1MS(定时 1ms 子程序); ; KEY(键扫描子程序 ); ; KEYCHULI(P1 口数据处理子程序 ); ; DISP(数码管显示子程序); ; DL(2 毫秒延时子程序 ); ; ADD01(入口地址为 R0) ;存储器内容的安排; ;堆栈栈底 7FHH; ; ; 20H 作为按键标志( —— 分别对应的是按键 K1—— K8); ;专用寄存组 1,用在显示子程序中 ;系统 起始程序区 ORG 0000H START: LJMP MAIN ORG 000BH LJMP PDJW ;系统监控程序区 ORG 0030H MAIN: MOV PSW, 00H MOV SP, 7FH ;确立堆栈区 18 MOV R0, 20H ; RAM 区首地址 MOV R7, 96 ; RAM 区单元个数 MOV TMOD, 01H SETB EA SETB ET0 ML: MOV @R0, 00H INC R0 DJNZ R7, ML TSF: MOV DPTR, DISBH ;系统初始化后提示符“ P.”字符代码表首地址 MOV R5, 08H MOV R0, 78H DISPTSF:CLR A MOVC A, @A+DPTR MOV @R0, A INC R0 INC DPTR DJNZ R5, DISPTSF KEY0: LCALL DISP LCALL KEY JB , K1 JB , K2 JB , K3 LJMP KEY0 KEY00: LCALL KEY LCALL DISP JB , K3 LJMP KEY00 K1: JB , KEY0 ;如果此时为暂停状态,本次按键 K1 无效 CPL JB , K01 ;高电平则计时 CLR TR0 ;低电平则停止 LCALL DISP LJMP KEY00 K01: MOV 7AH, 12H ;从零开始计时 MOV 7DH, 12H MOV 7FH, 10H MOV 78H, 00H MOV 79H, 00H 19 MOV 7BH, 00H MOV 7CH, 00H MOV 7EH, 00H MOV 7FH, 00H LCALL DISP MOV TH0, 0D8H MOV TL0, 0F0H SETB TR0 ;启动定时器 LJMP KEY0 K2: JB , K21 ;判断秒表是否启动,如不是启动状态则此次按键无效 LJMP KEY0 K21: CPL JB , K22 SETB TR0 ;继续计时 LJMP KEY0 K22: CLR TR0 ;暂停秒表 LCALL DISP LJMP KEY0 K3: JB , KEY0 ;只有当停止是,清零键才有效 MOV R0, 79H ;秒表清零 LCALL CLR00 MOV R0, 7CH LCALL CLR00 MOV R0, 7FH LCALL CLR00 LJMP KEY0 PDJW: PUSH PSW PUSH ACC MOV TMOD, 01H ;定时器以工作方式 1 工作 SETB RS1 ;设定组号为 2 组 CLR RS0 MOV TH0, 0D8H MOV TL0, 0F0H MOV R0, 79H LCALL ADD01 CJNE R2, 99, RETT ;判断 1 秒到没 MOV R0, 7CH 20 LCALL ADD01 CJNE R2, 60, RETT ;判断 60 毫秒到没 LCALL CLR00 MOV R0, 7FH LCALL ADD01 CJNE R2, 60H, RETT ;判断 60 分到没 LCALL CLR00 RETT: POP ACC POP PSW RETI ;常数表格区 ;系统初始化后提示符“ P.”字符代码表; DISBH: DB 10H,10H,10H,10H,10H,10H,10H,11H ;提示符“ P.”字符序号 ;显示字符段选码表 (共阳极代码 ) TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ; 08 DB 90H, 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0BFH ; 9,A,B,C,D,E,F,灭 ,p., 子程序区; ADD01: MOV A, @R0 DEC R0 SWAP A ORL A, @R0 ADD A, 01H DA A MOV R2, A ANL A, 0FH MOV @R0, A MOV A, R2 ANL A, 0F0H SWAP A INC R0 MOV @R0, A RET CLR00: MOV @R0, 00H DEC R0 MOV @R0, 00H RET ;键扫描子程序 KEY: LCALL KEYCHULI ;调 P1 口数据处理子程序 21 JZ EXIT ;没有键按下,转返回 LCALL DISP ;调显示子程序去抖动 LCALL DISP LCALL KEYCHULI ;调 P1 口数据处理子程序 JZ EXIT ;没有键按下,转返回 MOV B, 20H ;保存取反后的键值 KEYSF: LCALL KEYCHULI ;调 P1 口数据处理子程序 JZ KEY1 ;键释放,转恢复键值 LCALL DISP LCALL DISP ;调显示子程序延时 LJMP KEYSF ;等待释放 KEY1: MOV 20H, B ;键值送 20H 保存 EXIT: RET ;子程序返回 ; P1 口数据处理子程序 KEYCHULI:PUSH PSW ;保护现场 CLR RS1 ;改变当前寄存器组为组 1 SETB RS0 MOV P1, 0FFH ;先向 P1 口写 1 MOV A, P1 ;读 P1 口数据 CPL A ; P1 口数据取反 MOV 20H, A ;保存取反后的键值 CLR RS1 ;恢复当前寄存器组为组 0 CLR RS0 POP PSW ;恢复现场 RET ;子程序返回 ;显示子程序 ;入口 : 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH, DISP: PUSH DPH PUSH DPL PUSH ACC PUSH PSW CLR RS1 ;改变当前寄存器组为组 1 SETB RS0 MOV R1, 78H ;显示缓冲存储单元首地址 MOV R2, 0FEH ;从右至左显示 MOV R5, 08H ;循环次数,即驱动数码管的位数 DISP1: MOV A, @R1 MOV DPTR, TAB MOVC A, @A+DPTR MOV P0, A ;送段控 MOV P2, R2 ;送位控 LCALL DL ;延时 1 毫秒 22。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。