
单片机电子秒表程序.doc
6页单片机电子秒表程序MB EQU 40H ;跑表数值PB EQU 50H ;秒表数值单元;-------------------------;定义中断和主程序存储单元;-------------------------ORG 0000HAJMP MAINORG 000BH ;T0中断地址AJMP TIME0ORG 001BH ;T1中断地址AJMP TIME1ORG 0030H;-------------------------;主程序;-------------------------MAIN: MOV TMOD,#11H ;置定时器T0为工作方式1 QJ: LCALL JP ;采键 JZ QJ JB ACC.0,STA1 ;K1键按下,则跳到STA1执行跑表功能 JB ACC.3,STA2 ;K4键按下,则跳到STA2执行分钟显示功能 SJMP QJ;-------------------------;跑表程序;-------------------------STA1: MOV R0,#MB ;计时器清零 MOV A, #00HCLR1: MOV @R0, A INC R0 CJNE R0,#49H,CLR1 SETB EA ;CPU开中断GO: SETB ET0 ;定时器T0开中断 SETB TR0 ;启动定时器T0DISP1: MOV R0,#MB ;R0指向40H单元 CALL JP ;采集键盘的状态 JB ACC.1,STOP ;K2键按下,则暂停跑表功能 JB ACC.0,STA1 ;K1键按下,则跳到STA1执行跑表功能 JB ACC.3,GO ;K3键按下,则继续执行跑表功能 JB ACC.2,DISP2 ;K4键按下,则跳到STA2执行分钟显示功能 CALL SEL5 CALL AA CALL SEL4 INC R0 ;R0指向41H单元 CALL AA CALL SEL3 INC R0 ;R0指向42H单元 CALL BB CALL SEL2 INC R0 ;R0指向43H单元 CALL AA SJMP DISP1STOP: CLR ET0 ;关闭定时器TO的中断 SJMP DISP1;-------------------------;秒表程序;-------------------------STA2: MOV R1,#PB ;计时器清零 MOV A, #00HCLR2: MOV @R1, A INC R1 CJNE R1,#59H,CLR2 SETB EA ;CPU开中断 SETB TR1 ;启动定时器T1 SETB ET1 ;定时器T1开中断DISP2: MOV R1,#PB+2 ;R1指向52H单元 CALL JP ;采集键盘的状态 JB ACC.0,STA1 ;K1键按下,则跳到STA1执行跑表功能 AJMP XIANSHI ;否则显示秒表A0: CALL JP JZ A0 JB ACC.0,A00 JB ACC.1,A01 AJMP LED0 A00: INC 52H AJMP LED0 A01: DEC 52H LED0:LCALL SEL5 MOV @R1,52H LCALL AA1 AJMP A0XIANSHI: CALL SEL5 CALL AA1 CALL SEL4 INC R1 ;R1指向53H单元 CALL AA1 CALL SEL3 INC R1 ;R1指向54H单元 CALL BB1 CALL SEL2 INC R1 ;R1指向55H单元 CALL AA1 AJMP DISP2AA: MOV P0,#00H ;关显示 CALL DELAY1 ;延时5MS MOV A,@R0 ;把RO指向的地址单元的内容送给A MOV DPTR,#TAB1 ;DPTR指向表TAB1的首地址 MOVC A,@A+DPTR ;取出表中对应的字型送给A寄存器 MOV P0,A ;将字型送P0口显示 CALL DELAY ;延时1MS RET;-------------------------;显示子程序;-------------------------AA1: MOV P0,#00H ;关显示 CALL DELAY1 ;延时5MS MOV A,@R1 ;把R1指向的地址单元的内容送给A寄存器 MOV DPTR,#TAB1 ;DPTR指向表TAB1的首地址 MOVC A,@A+DPTR ;取出表中对应的字型送给A寄存器 MOV P0,A ;将字型送P0口显示 CALL DELAY ;延时1MS RETBB: MOV P0,#00H ;关显示 CALL DELAY1 ;延时5MS MOV A,@R0 ;把RO指向的地址单元的内容送给A MOV DPTR,#TAB2 ;DPTR指向表TAB2的首地址 MOVC A,@A+DPTR ;取出表中对应的字型送给A寄存器 MOV P0,A ;将字型送P0口显示 CALL DELAY ;延时1MS RETBB1: MOV P0,#00H ;关显示 CALL DELAY1 ;延时5MS MOV A,@R1 ;把R1指向的地址单元的内容送给A寄存器 MOV DPTR,#TAB2 ;DPTR指向表TAB2的首地址 MOVC A,@A+DPTR ;取出表中对应的字型送给A寄存器 MOV P0,A ;将字型送P0口显示 CALL DELAY ;延时1MS RET;-------------------------;键采集程序;-------------------------JP: MOV P0,#00H ;关显示 CALL SEL8 ;打开三态门 MOV P1,#0FFH ;置P1口为输入口 MOV A,P1 ;采集键盘的状态 CALL SEL7 ;关闭三态门 CPL A ANL A,#0FH RET;-------------------------;定时中断0控制跑表程序;------------------------- TIME0:PUSH ACC ;保护A寄存器 MOV TH0,#3CH ;重置定时器TO的初值10MS MOV TL0,#0AFH INC MB ;10MS计数器加1,存放到40H单元中 MOV A,MB CJNE A,#6,TEND ;10MS计数器的值不等于10, ; 即不到100MS,则跳到TEND中断返回 MOV MB,#00H ;10MS计数器清零 INC MB+1 ;100MS计数器加1,存放到41H单元中 MOV A,MB+1 CJNE A,#6,TEND ;100MS计数器的值不等于10, ; 即不到1S,则跳到TEND中断。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





