本設(shè)計(jì)為一秒表,可顯示小時(shí)、分鐘、秒的功能。程序開始運(yùn)行時(shí),數(shù)碼管不顯示任何內(nèi)容。按下啟停鍵時(shí) ,開始從0時(shí)0分0秒以每秒為單位開始計(jì)時(shí),可以從00時(shí)00分00秒計(jì)時(shí)到23時(shí)59分59秒,到達(dá)時(shí)間后開始重新從00時(shí)00分00秒開始計(jì)時(shí)。每按一下啟停鍵,將在啟動(dòng)暫停之間切換。清零按鍵,無論是在運(yùn)行還是暫停情況下,按下清零鍵,將時(shí)分秒都清零。
- DAT EQU 30H ;顯示緩存首地址
- SCANLED EQU 38H ;動(dòng)態(tài)掃描位
- SEC EQU 39H ;秒
- MIN EQU 3AH ;分
- HOUR EQU 3BH ;時(shí)
- CLK EQU 3CH ;中斷次數(shù)
- DUAN EQU P2.0 ;段碼鎖存
- WEI EQU P2.1 ;位碼鎖存
- KEYS EQU P3.2 ;啟停鍵
- KEYC EQU P3.3 ;清零鍵
- ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP T0ISR ;50ms定時(shí)
- ORG 001BH
- LJMP T1ISR ;掃描顯示
- ORG 0030H
- MAIN:
- MOV SP,#5FH ;棧頂
- MOV TMOD,#11H ;定時(shí)器模式為1
- MOV TH0,#03CH ;50毫秒定時(shí)
- MOV TL0,#0B0H
- MOV TH1,#0ECH ;5毫秒定時(shí)
- MOV TL1,#078H
- SETB ET0
- SETB ET1
- SETB TR1
- SETB EA
- MOV SCANLED,#0 ;初始化變量
- MOV 30H,#10H
- MOV 31H,#10H
- MOV 32H,#10H
- MOV 33H,#10H
- MOV 34H,#10H
- MOV 35H,#10H
- MOV 36H,#10H
- MOV 37H,#10H
- MOV SEC,#0
- MOV MIN,#0
- MOV HOUR,#0
- LOOP:
- JB P3.2,LOOP1 ;啟停
- LCALL DELAY ;延時(shí)去抖
- JB P3.2,LOOP1 ;再次檢測
- JNB P3.2,[ DISCUZ_CODE_1 ]nbsp; ;等待鍵抬起
- CPL TR0 ;啟停計(jì)時(shí)
- SJMP LOOP
- LOOP1:
- JB P3.3,LOOP ;清零
- LCALL DELAY
- JB P3.3,LOOP
- JNB P3.3,$
- MOV SEC,#0 ;清零時(shí)間變量
- MOV MIN,#0
- MOV HOUR,#0
- LCALL DISCHG
- SJMP LOOP
- ;------------------
- ;十六進(jìn)制轉(zhuǎn)換為BCD
- HBCD:
- MOV B,#10
- DIV AB
- SWAP A
- ORL A,B
- RET
- ;--------------------
- ;延時(shí)約10毫秒
- DELAY:
- MOV R3,#50
- DELAY1:
- MOV R4,#100
- DJNZ R4,$
- DJNZ R3,DELAY1
- RET
- ;--------------------
- ;定時(shí)器0中斷服務(wù)程序,計(jì)時(shí)功能
- T0ISR:
- PUSH ACC
- CLR TR0
- MOV TH0,#3CH ;重賦初值
- MOV TL0,#0B0H
- SETB TR0
- INC CLK ;中斷次數(shù)加1
- MOV A,CLK
- CJNE A,#20,T0ISRE ;20次中斷到?
- MOV CLK,#0 ;中斷次數(shù)變量清零
- INC SEC ;秒加1
- MOV A,SEC
- CJNE A,#60,T0ISRE ;60秒到?
- MOV SEC,#0 ;秒變量清零
- INC MIN ;分加1
- MOV A,MIN
- CJNE A,#60,T0ISRE ;60分到?
- MOV MIN,#0 ;分變量清零
- INC HOUR ;小時(shí)加1
- MOV A,HOUR
- CJNE A,#24,T0ISRE ;24小時(shí)到?
- MOV SEC,#0 ;時(shí)分秒均清零
- MOV MIN,#0
- MOV HOUR,#0
- T0ISRE:
- LCALL DISCHG ;將時(shí)分秒轉(zhuǎn)換為BCD碼供顯示
- POP ACC
- RETI
- ;--------------------
- DISCHG:
- MOV A,HOUR ;小時(shí)轉(zhuǎn)換為BCD碼,存入30H31H
- LCALL HBCD
- PUSH ACC
- ANL A,#0FH
- MOV 31H,A
- POP ACC
- ANL A,#0F0H
- SWAP A
- MOV 30H,A
- MOV A,MIN ;分轉(zhuǎn)換位BCD碼,存入33H34H
- LCALL HBCD
- PUSH ACC
- ANL A,#0FH
- MOV 34H,A
- POP ACC
- ANL A,#0F0H
- SWAP A
- MOV 33H,A
- MOV A,SEC ;秒轉(zhuǎn)換為BCD碼存入36H37H
- LCALL HBCD
- PUSH ACC
- ANL A,#0FH
- MOV 37H,A
- POP ACC
- ANL A,#0F0H
- SWAP A
- MOV 36H,A
- MOV 32H,#11H
- MOV 35H,#11H
- RET
- ;--------------------
- ;定時(shí)器1中斷服務(wù)程序,用于動(dòng)態(tài)掃描數(shù)碼管顯示
- T1ISR:
- PUSH ACC
- CLR TR1
- MOV TH1,#0ECH ;重裝初值
- MOV TL1,#78H
- SETB TR1
- MOV DPTR,#LEDTAB ;段碼表首地址
- T100:
- MOV R0,#DAT ;取顯示緩存數(shù)據(jù)
- MOV A,SCANLED ;取顯示當(dāng)前位置
- ADD A,R0 ;求具體顯示地址
- MOV R0,A
- MOV P0,#00H ;消隱
- SETB WEI ;置高位鎖存
- MOV A,SCANLED ;取當(dāng)前顯示位置
- JNZ T101
- MOV P0,#01H ;等于0為第一位
- SJMP T1DIS
- T101:
- DEC A
- JNZ T102
- MOV P0,#02H ;等于1為第二位
- SJMP T1DIS
- T102:
- DEC A
- JNZ T103
- MOV P0,#04H ;等于2為第三位
- SJMP T1DIS
- T103:
- DEC A
- JNZ T104
- MOV P0,#08H ;等于3為第四位
- SJMP T1DIS
- T104:
- DEC A
- JNZ T105
- MOV P0,#10H ;等于4為第五位
- SJMP T1DIS
- T105:
- DEC A
- JNZ T106
- MOV P0,#20H ;等于5為第六位
- SJMP T1DIS
- T106:
- DEC A
- JNZ T107
- MOV P0,#40H ;等于6為第七位
- SJMP T1DIS
- T107:
- MOV P0,#80H ;等于7為第八位
- T1DIS:
- CLR WEI ;位鎖存拉低
- MOV A,@R0
- MOVC A,@A+DPTR ;取段碼
- SETB DUAN ;段鎖存拉高
- MOV P0,A ;送段碼
- CLR DUAN ;段鎖存拉低
- INC SCANLED ;顯示位地址加1
- MOV A,SCANLED
- CJNE A,#8,T1END ;共8位
- MOV SCANLED,#0
- T1END:
- POP ACC
- RETI
- ;--------------------
- LEDTAB:
- DB 0C0H ;"0" 00H
- DB 0F9H ;"1" 01H
- DB 0A4H ;"2" 02H
- DB 0B0H ;"3" 03H
- DB 99H ;"4" 04H
- DB 92H ;"5" 05H
- DB 82H ;"6" 06H
- DB 0F8H ;"7" 07H
- DB 80H ;"8" 08H
- DB 90H ;"9" 09H
- DB 88H ;"A" 0AH
- DB 83H ;"B" 0BH
- DB 0C6H ;"C" 0CH
- DB 0A1H ;"D" 0DH
- DB 86H ;"E" 0EH
- DB 8EH ;"F" 0FH
- DB 0FFH ;" " 10H
- DB 0BFH ;'-' 11H
- ;--------------------
- END
復(fù)制代碼
全部資料51hei下載地址:
數(shù)碼管顯示秒表(有清零按鍵).zip
(67.96 KB, 下載次數(shù): 87)
2018-12-15 22:03 上傳
點(diǎn)擊文件名下載附件
附件,含有仿真文件和源碼
|