?? swatch.asm
字號(hào):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;實(shí)例六:秒表 stopwatch (《51單片機(jī)應(yīng)用從零開(kāi)始》 4.3小節(jié)實(shí)例)
;
;現(xiàn)象:當(dāng)按下按鈕S7時(shí),秒表開(kāi)始從00計(jì)時(shí),最大計(jì)時(shí)為99秒
;
;作者:楊欣,劉長(zhǎng)煥,張延強(qiáng) 電路飛翔網(wǎng) eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
START: ;這是系統(tǒng)啟動(dòng)時(shí),顯示00和等待按鈕按下的程序
MOV P2,#0F0H ; 兩位七段數(shù)碼管顯示"00"
MOV P0,#03H ; 選通低兩位七段數(shù)碼管D1和D2
JB P2.4,$ ; 沒(méi)有鍵按下則重復(fù)執(zhí)行本行,一旦按下,執(zhí)行下一行
CALL FILTER ; 調(diào)延時(shí)子程序,消除開(kāi)關(guān)的抖動(dòng)
JNB P2.4,$ ; 如果沒(méi)有放開(kāi)按鈕,則等待,放開(kāi)后執(zhí)行下一行
MOV R0,#00H ; 設(shè)置計(jì)時(shí)指針初始值
MOV R3,#00H ;
PRESS_1: ;這是秒表計(jì)時(shí)顯示和1秒延時(shí)的程序
MOV A,R0 ; 將計(jì)時(shí)指針載入累加器ACC中
MOV R5,#10 ; 為延時(shí)1秒設(shè)定的寄存器初始值
ADD_1:
MOV R6,#200 ; 為延時(shí)設(shè)定寄存器
CALL DELAY ; 調(diào)延時(shí)子程序,其中DELAY中判斷按鈕是否第二次被按下
DJNZ R5,ADD_1 ; 寄存器R5完成1秒延時(shí)
MOV A,R0 ; 指針傳遞到ACC中
ADD A,#01H ; 計(jì)時(shí)值加1
DA A ; 十進(jìn)制調(diào)整
MOV R0,A ; 把更新的計(jì)時(shí)值返回計(jì)時(shí)指針
JMP PRESS_1 ; 跳回PRESS_1,繼續(xù)計(jì)時(shí)動(dòng)作
DELAY:
MOV R7,#248 ; 設(shè)置延時(shí)使用的寄存器R7,本段延時(shí)0.5ms
CJNE R3, #1, DIS1 ; 如果R3不等于1,就跳到DIS1執(zhí)行
MOV A, R0 ; ACC=R0
MOV P0, #01H ; 選通七段數(shù)碼管D1
ANL A, #0FH ; ACC的高位去掉
MOV P2, A ; 從P2口輸出低位數(shù)據(jù)
MOV R3, #0 ; R3=0
JMP NEXT ; 跳到NEXT
DIS1:
MOV A, R0 ; ACC=R0
MOV P0, #02H ; 選通七段數(shù)碼管D2
SWAP A ; ACC的高、低位交換
ANL A, #0FH ; 去掉高位
MOV P2, A ; 從P2口輸出
MOV R3, #1 ; R3=1
NEXT:
DJNZ R7,$
DJNZ R6,DELAY
RET ; 延時(shí)子程序返回主程序
FILTER: ;消除抖動(dòng),30ms延時(shí)子程序
MOV R6,#60
D1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET ; 過(guò)濾子程序返回主程序
END ; 程序結(jié)束點(diǎn)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -