《毕业论文基于c语言单片机时钟设计说明书》由会员分享,可在线阅读,更多相关《毕业论文基于c语言单片机时钟设计说明书(62页珍藏版)》请在金锄头文库上搜索。
1、堆栈栈底 80H; ;* *; ;LED 数码管显示器设定; ;P0.7-P0.0 段控线,接 LED 的显示段 dp,g,f,e,d,c,b,a ;P2.0-P2.7 位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0) ;显示缓冲区设定从左至右依次为 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH ;* *; ;独立式键盘设定; ;8 个按键 S2 至 S9 分别依次接在 P1.0 至 P1.7 口线; ;* *; ;20H 字节单元:十六进制,S2 键键值 01H,S3 键键值 02H,S4 键键值 04H,S5 键键值 08
2、H,S6 键键值 10H,S7 键键值 20H,S8 键键值 40H,S9 键键值 80H ;* *; ;定时器/计数器资源: ;T/C0:工作模式;功能;定时时间;查询或中断 ;* *; ;中断系统资源; ;T/C0 ;* *; ;键功能程序; ;KEYA (S2 键键功能程序) ;KEYB (S3 键键功能程序) ;KEYC (S4 键键功能程序) ;KEYD (S5 键键功能程序) ;* *; ;中断服务程序; ;* *; ;常数表格; ;DISBH(系统提示符 P.字型代码序号表) ;DISBI(00-00-00 字符的代码序号) ;TAB(共阳数码管字型代码表) ;* *; ;子程序
3、; ;DL(2 毫秒延时子程序) ;DISP(数码管显示子程序) ;KEY(键扫描子程序); ;KEYCHULI(P1 口数据处理子程序) ;加 1 子程序 ;* *; ;伪指令定义 SEC EQU 30H MINEQU 31H HOUREQU 32H SECGEEQU 7FH SECSHIEQU 7EH MINGEEQU 7CH MINSHIEQU 7BH HOURGE EQU 79H HOURSHIEQU 78H ;* *; ;系统起始程序区 ORG 0000H START: LJMP MAIN ORG 000BH LJMP TC0 ;* *; ;系统监控程序区 ORG0030H MAIN
4、:MOVSP,#80H ;初始化数据 MOVPSW,#00H MOVTMOD,#01H ;定时器 0 工作方式 1 MOVTH0,#0D8H ;10MS MOVTL0,#0F0H SETBEA SETBET0 MOV R0, #20H ;RAM 区首地址 MOV R7, #5FH ;RAM 区单元个数 95 个 CHUSHI:MOV R0, #00H INC R0 ;将 RAM 全部清零,初始化 DJNZ R7, CHUSHI TSF: MOV DPTR, #DISBH ;系统初始化 “P.”字符代码表首地 址 MOV R5, #08H MOV R0, #78H DISPTSF:CLR A M
5、OVC A, A+DPTR MOV R0, A INC R0 INC DPTR DJNZ R5, DISPTSF D:LCALL DISP ;调显示子程序显示提示符“P.” LCALLKEY JB20H.0, KEYA LJMPD ;* *; ;键功能程序区 ;S2 键功能程序 KEYA: MOVSEC, #0 ;寄存器初始化,秒寄存器 MOVMIN, #0 ;分寄存器 MOVHOUR, #0 ;时寄存器 MOV DPTR, #DISBI ;“00-00-00”字符代码表首地址 MOV R5, #08H MOV R0, #78H DISPTSG:CLR A MOVC A, A+DPTR MOV
6、 R0, A INC R0 INC DPTR DJNZ R5, DISPTSG KEYAS: SETB TR0 ;开定时器 DI:LCALL DISP LCALL KEY JB 20H.0, CP LJMP DI CP:CLR TR0 ;S2 键按下,进入调整状态 DD:LCALL DISP LCALL KEY JB 20H.0,KEYAS JB 20H.1,KEYB JB 20H.2,KEYC JB 20H.3,KEYD LJMP DD ;S3 键功能程序 KEYB:LCALLHOUR_ ;调时 LC:LCALLDISP LCALLKEY JB20H.0, KEYAS JB20H.1, KE
7、YB JB20H.2, KEYC JB20H.3, KEYD LJMPLC ;S4 键功能程序 KEYC:LCALLMIN_ ;调分 DIIS:LCALL DISP LCALLKEY JB20H.0, KEYAS JB20H.1, KEYB JB20H.2, KEYC JB 20H.3, KEYD LJMPDIIS ;S5 键功能程序 KEYD:LCALLSEC_ ;调秒 DISS:LCALLDISP LCALLKEY JB20H.0, KEYAS JB20H.1, KEYB JB20H.2, KEYC JB20H.3, KEYD LJMPDISS ;中断服务程序 TC0:PUSHACC PU
8、SH B PUSHPSW SETBRS1 CLRRS0 MOVTH0,#0D8H MOVTL0,#0F0H INC33H MOVA,33H CJNE A,#100,RE MOV33H,#0 INCSEC MOVA,SEC MOVB,#10 DIVAB MOVSECSHI,A MOVSECGE, B MOVA,SEC CJNEA,#60,RE INCMIN MOVSEC,#00H MOVSECGE, #0 MOVSECSHI,#0 MOVA,MIN MOVB,#10 DIVAB MOVMINSHI, A MOVMINGE, B MOVA,MIN CJNEA,#60,RE INCHOUR MOVM
9、IN,#00H MOVMINGE, #0 MOVMINSHI,#0 MOVA,HOUR MOVB,#10 DIVAB MOVHOURSHI,A MOVHOURGE, B MOVA,HOUR CJNE A,#24,RE MOVHOUR,#0 MOVHOURGE,#0 MOVHOURSHI,#0 RE:POPPSW POPB POPACC RETI ;延时 1 毫秒子程序 DL: PUSH PSW SETB RS1 SETB RS0 MOV R7, #02H DL1:MOVR6, #0FFH DL2:DJNZR6, DL2 DJNZR7, DL1 POP PSW RET ;显示子程序 ;入口: 7
10、7H,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH, DISP: PUSHDPH PUSHDPL PUSHACC PUSHPSW CLR RS1 ;改变当前寄存器组为组 1 SETB RS0 MOV R1, #78H ;显示缓冲存储单元首地址 MOV R2, #0FEH ;从右至左显示,共阳极 DISP1:MOVA, R1 MOVDPTR, #TAB MOVC A, A+DPTR MOV P0, A ;送段控 MOV P2, R2 ;送位控 LCALL DL ;延时 2 毫秒 为什么这里要延时 MOV A, R2 JNB ACC.7, DISP2 ;为 0 转移; RL A
11、INC R1 MOV R2, A LJMP DISP1 DISP2: POP PSW ;恢复当前寄存器组的组号 POP ACC POP DPL POP DPH RET ;键扫描子程序 KEY:LCALL KEYCHULI ;调 P1 口数据处理子程序 JZ EXIT ;没有键按下,转返回 LCALL DISP ;调显示子程序去抖动 LCALL DISP LCALL KEYCHULI ;调 P1 口数据处理子程序 JZ EXIT ;没有键按下,转返回 MOV B,20H ;保存取反后的键值 KEYSF: LCALL KEYCHULI ;调 P1 口数据处理子程序 JZ KEY1 ;键释放,转恢复
12、键值 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 口数据取反 MOV20H, A ;保存取反后的键值 CLRRS1 ;恢复当前寄存器组为组 0 CLR RS0 POPPSW ;恢复现场 RET ;子程序返回 ;加 1 子程序 SEC_:INCSEC MOV A,SEC MOV B,#10 DIV AB MOV SECSHI, A MOV SECGE,B MOV A, SEC CJNE A, #60,EXI MOV SEC, #0 MOV SECGE,#0 MOV SECSHI, #0 LJMP EXI MIN_:INC MIN MOV A,MIN MOV B,#10 DIV AB MOV MINSHI, A MOV MINGE,B MOV A,MIN CJNE A,#60,EXI MOV MIN, #0 MOV MINGE,#0 MOV MINSHI, #0