|
(1)控制功能:
①啟動(dòng)/停止:秒表和時(shí)鐘選擇功能的總開(kāi)關(guān)允許位。沒(méi)按或偶次按下,關(guān)閉時(shí)鐘和秒表功能選擇。單次按下,允許進(jìn)行秒表和時(shí)鐘功能選擇。
②暫停:秒表或時(shí)鐘的停止信號(hào)。任何時(shí)候按下按鈕停止秒表倒計(jì)時(shí)或停止時(shí)鐘計(jì)時(shí)和撤銷報(bào)警信號(hào)。
③復(fù)位:秒表和時(shí)鐘復(fù)位信號(hào)。任何時(shí)候按下按鈕秒表顯示或時(shí)鐘顯示恢復(fù)初始狀態(tài):00.00.00.0 。
(2)調(diào)節(jié)功能:
通過(guò)6位按鈕可以對(duì)數(shù)碼的六位顯示進(jìn)行調(diào)整。任何時(shí)候都可以分別可以通過(guò)HH、HL、MH、ML、SH、SL對(duì)時(shí)的十位、時(shí)的個(gè)位、分的十位、分的個(gè)位、秒的十位和秒的個(gè)位進(jìn)行調(diào)節(jié)并設(shè)定。
(3)顯示功能:
同8個(gè)8段數(shù)碼管進(jìn)行顯示。顯示精度為0.01秒;最后一段數(shù)碼管顯示工作狀態(tài),“H”代表著是時(shí)鐘,“E”代表著秒表倒計(jì)時(shí)。
按時(shí)、分、秒顯示,采用24h制,如示數(shù)為“10.05.22.5H”,時(shí)鐘顯示讀數(shù)為10時(shí)05分22.5秒。示數(shù)為“0.05.14.5E”,秒表倒計(jì)時(shí)顯示,讀數(shù)為5分14.5秒。
(4)秒表/時(shí)鐘選擇功能:
①提供兩種模式,秒表倒計(jì)時(shí)和是時(shí)鐘計(jì)時(shí)。
②通過(guò)TIME和SECONDS按鈕進(jìn)行選擇。
③兩種模式初始狀態(tài)都為00.00.00,倒計(jì)時(shí)可以使用調(diào)節(jié)按鈕進(jìn)行設(shè)定,時(shí)鐘功能可以通過(guò)調(diào)節(jié)按鈕進(jìn)行調(diào)整時(shí)間。
(5)報(bào)警功能:
倒計(jì)時(shí)報(bào)警功能,倒計(jì)時(shí)結(jié)束時(shí),報(bào)警信號(hào)發(fā)出,藍(lán)色的LED亮。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片1.png (414.91 KB, 下載次數(shù): 46)
下載附件
2020-6-20 11:04 上傳
單片機(jī)源程序如下:
- /*-------------------------------------------------------------------------------------------*/
- /*-----------按鍵定義-----------*/
- STRT EQU P1.6 ;啟動(dòng)
- STP EQU P1.7 ;停止
- CLRR EQU P3.0 ;復(fù)位
- SELTS EQU P3.6 ;時(shí)鐘
- SELTH EQU P3.7 ;秒表
- SECL EQU P1.0 ;秒個(gè)位
- SECH EQU P1.1 ;秒十位
- MINL EQU P1.2 ;分
- MINH EQU P1.3 ;
- HOURL EQU P1.4 ;時(shí)
- HOURH EQU P1.5 ;
- /*-------------------------------------------------------------------------------------------*/
- ORG 0000H
- SJMP MAIN
- ORG 000BH ;T0定時(shí)器入口
- AJMP T0INT0
- ORG 001BH ;T1定時(shí)器入口
- AJMP T1INT1
- ORG 30H
- /*-------------------------------------------------------------------------------------------*/
- /*-----------初始化函數(shù)-----------*/
- MAIN:
- MOV SP,#60H
- MOV R4,#10 ;100ms;時(shí)鐘
- MOV R5,#10 ;100ms;秒表
- MOV TMOD,#11H
- MOV TL0,#(65535-7986)MOD 256;#9EH ;定時(shí)中斷子程序。重裝定時(shí)常數(shù)
- MOV TH0,#(65535-7986)/256;#58H ;10ms
- MOV TL1,#(65535-7986)MOD 256;#9EH ;定時(shí)中斷子程序。重裝定時(shí)常數(shù)
- MOV TH1,#(65535-7986)/256;#58H ;10ms
- /*-------------------------------------------------------------------------------------------*/
- /*-----------調(diào)節(jié)按鍵檢測(cè)-----------*/
- KSL:
- LCALL DISP ;秒個(gè)調(diào)整按鍵
- JB SECL,KSH ;沒(méi)有按下的處理,即SECL為高電平。
- LCALL DISP
- JNB SECL,$-3 ;消除抖動(dòng)
- AJMP SINCL
- KSH: LCALL DISP ;秒10調(diào)整按鍵
- JB SECH,KML
- LCALL DISP
- JNB SECH,$-3
- AJMP SINCH
- KML: JB MINL,KMH ;分個(gè)調(diào)整按鍵
- LCALL DISP
- JNB MINL,$-3
- AJMP MINCL
- KMH: JB MINH,KHL ;分10調(diào)整按鍵
- LCALL DISP
- JNB MINH,$-3
- AJMP MINCH
- KHL:
- JB HOURL,KHH ;時(shí)個(gè)調(diào)整按鍵
- LCALL DISP
- JNB HOURL,$-3
- AJMP HINCL
- KHH: JB HOURH,K1 ;時(shí)10調(diào)整按鍵
- LCALL DISP
- JNB HOURH,$-3
- AJMP HINCH
- /*-------------------------------------------------------------------------------------------*/
- /*-----------調(diào)節(jié)按鍵處理-----------*/
- SINCL: /*秒的數(shù)據(jù)處理*/
- INC 20H ;秒個(gè)位的調(diào)整 +1
- MOV A,20H
- CJNE A,#10,SINC0L ;
- MOV 20H,#0 ;滿10的處理
- SINC0L: AJMP KSL ;返回KSL按鍵處理
- SINCH:
- INC 21H
- MOV A,21H
- CJNE A,#6,SINC0H ;60s
- MOV 21H,#0
- SINC0H: AJMP KSH
- MINCL: /*分的數(shù)據(jù)處理*/
- INC 22H ;分調(diào)整
- MOV A,22H
- CJNE A,#10,MINC0L ;60min
- MOV 22H,#0
- MINC0L: AJMP KML
- MINCH:
- INC 23H ;分調(diào)整
- MOV A,23H
- CJNE A,#6,MINC0H ;60min
- MOV 23H,#0
- MINC0H: AJMP KMH
- HINCL: /*時(shí)的數(shù)據(jù)處理*/
- MOV A,25H ;時(shí)調(diào)整
- CJNE A,#2,LH1 ;時(shí)的十位不滿2時(shí)的處理
- INC 24H ;時(shí) >20h
- MOV A,24H
- CJNE A,#4,HINC0L ;是否到達(dá)24
- MOV 24H,#0 ;時(shí)到24后,數(shù)碼管清零
- HINC0L: AJMP KHL
- LH1:
- INC 24H ;時(shí)<20h
- MOV A,24H
- CJNE A,#10,HINC0L ;24h
- MOV 24H,#0
- HINCH:
- INC 25H ;時(shí)調(diào)整
- MOV A,25H
- CJNE A,#3,HINC0H ;24h
- MOV 25H,#0
- HINC0H: AJMP KHH
- /*-------------------------------------------------------------------------------------------*/
- /*-----------控制按鍵掃描-----------*/
- K1: LCALL DISP ;開(kāi)始鍵
- JB STRT,K2 ;
- LCALL DISP
- JNB STRT,$-3
- AJMP START
- K2: JB STP,K3 ;暫停鍵
- LCALL DISP
- JNB STP,STOP ;消抖處理
- K3:
- JB CLRR,K4 ;沒(méi)有按下,轉(zhuǎn)到K4
- LCALL DISP
- JNB CLRR,CLEAR ;清零鍵
- AJMP KSL
- K4:
- JB SELTS,K5 ;沒(méi)有按下,返回?cái)?shù)碼按鍵監(jiān)測(cè)
- LCALL DISP
- JNB SELTS,SELTHC ;模式切換
- K5:
- JB SELTH,TOKSL ;沒(méi)有按下,返回?cái)?shù)碼按鍵監(jiān)測(cè)
- LCALL DISP
- JNB SELTH,SELTSC ;模式切換
- AJMP KSL
- TOKSL:
- AJMP KSL
- /*-------------------------------------------------------------------------------------------*/
- /*-----------控制按鍵處理-----------*/
- START:
- ;打開(kāi)中斷總開(kāi)關(guān)
- CPL EA
- AJMP K1
- STOP:
- CLR TR0 ;暫停
- CLR TR1
- SETB P1.6;停止報(bào)警
- AJMP K2
- CLEAR:
- CLR TR0 ;清零
- CLR TR1
- MOV A,#0
- MOV 20H,A
- MOV 21H,A
- MOV 22H,A
- MOV 23H,A
- MOV 24H,A
- MOV 25H,A
- MOV 26H,A
- MOV 27H,A
- AJMP K3
- SELTHC: ;時(shí)鐘模式選擇
- SETB TR0
- SETB ET0
- CLR ET1
- CLR TR1
- AJMP K4
- SELTSC: ;秒表模式選擇
- SETB TR1
- SETB ET1
- SETB P3.1;清除報(bào)警燈
- CLR ET0
- CLR TR0
- AJMP K5
- /*-------------------------------------------------------------------------------------------*/
- /*---------T0中斷處理---------*/
- T0INT0:
- MOV TL0,#(65535-7986)MOD 256;#9EH ;定時(shí)中斷子程序。重裝定時(shí)常數(shù)
- MOV TH0,#(65535-7986)/256;#58H ;10ms
- DJNZ R4,T0INTR ;10msX10=0.1S,未滿20次,跳出中斷子程序
- MOV R4,#10
- MOV 26H,#76H;最后一位指定顯示H
- INC 27H ;1S,秒存儲(chǔ)單元內(nèi)數(shù)+1
- MOV A,27H
- CJNE A,#10,T0INTR ;未滿10S,跳出中斷,返回顯示。;滿10s,往下執(zhí)行清零處理,十位+1
- MOV 27H,#0 ;滿60S,秒單元清零
- INC 20H ;1S,秒存儲(chǔ)單元內(nèi)數(shù)+1
- MOV A,20H
- CJNE A,#10,T0INTR ;未滿10S,跳出中斷,返回顯示。;滿10s,往下執(zhí)行清零處理,十位+1
- MOV 20H,#0 ;滿60S,秒單元清零
- ;秒十位+1
- INC 21H ;秒10位
- MOV A,21H
- CJNE A,#6,T0INTR ;6
- MOV 21H,#0
- INC 22H ;分個(gè)+1
- MOV A,22H
- CJNE A,#10,T0INTR
- MOV 22H,#0
- INC 23H ;分十+1
- MOV A,23H
- CJNE A,#6,T0INTR
- MOV 23H,#0
- MOV A,25H
- CJNE A,#2,L1 ;時(shí)的十位不滿2時(shí)的處理
- ;時(shí)的十位滿2的處理
- INC 24H
- MOV A,24H
- CJNE A,#4,T0INTR ;是否到達(dá)24
- ;時(shí)到24后,數(shù)碼管清零
- MOV A,#0
- MOV 20H,A
- MOV 21H,A
- MOV 22H,A
- MOV 23H,A
- MOV 24H,A
- MOV 25H,A
- RETI
- ;子程序
- L1: INC 24H
- MOV A,24H
- CJNE A,#10,T0INTR
- MOV 24H,#0 ;時(shí)的個(gè)位清零
- INC 25H ;時(shí)的十位+1
- MOV A,28H
- T0INTR: RETI
- /*-------------------------------------------------------------------------------------------*/
- /*-----------T1中斷處理-----------*/
- T1INT1:
- MOV TL1,#(65535-7986)MOD 256;#9EH ;定時(shí)中斷子程序。重裝定時(shí)常數(shù)
- MOV TH1,#(65535-7986)/256;#58H ;10ms
- DJNZ R5,T0INTR ;不滿10次,跳轉(zhuǎn)
- MOV R5,#10
- MOV A,27H
- CJNE A,#0,TLSL;判斷0.01s是否為0
- MOV A,20H
- CJNE A,#0,TSL ;判斷秒的個(gè)位是否為0
- MOV A,21H
- CJNE A,#0,TSH ;判斷秒的十位是否為0
- MOV A,22H
- CJNE A,#0,TML ;判斷分的個(gè)位是否為0
- MOV A,23H
- CJNE A,#0,TMH ;判斷分的十位是否為0
- MOV A,24H
- CJNE A,#0,THL ;判斷時(shí)的個(gè)位是否為0
- MOV A,25H
- CJNE A,#0,THH ;判斷時(shí)的十位是否為0
- CLR P3.1 ;計(jì)時(shí)結(jié)束的標(biāo)志
- RETI;返回中斷處
- TLSL: ;0.01s不為0,進(jìn)行-1
- DEC 27H
- MOV 26H,#79H;最后一位指定顯示E
- RETI
- TSL: ;秒個(gè)位不為0,進(jìn)行-1
- DEC 20H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- RETI
- TSH: ;秒十位不為0,進(jìn)行-1,個(gè)位為9
- DEC 21H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- MOV 20H,#9
- RETI
- TML:
- DEC 22H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- MOV 21H,#5
- MOV 20H,#9
- RETI
- TMH:
- DEC 23H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- MOV 22H,#9
- MOV 21H,#5
- MOV 20H,#9
- RETI
- THL:
- DEC 24H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- MOV 23H,#5
- MOV 22H,#9
- MOV 21H,#5
- MOV 20H,#9
- RETI
- THH:
- DEC 25H
- MOV 26H,#79H;最后一位指定顯示E
- MOV 27H,#9
- MOV 24H,#9
- MOV 23H,#5
- MOV 22H,#9
- MOV 21H,#5
- MOV 20H,#9
- RETI
- /*-------------------------------------------------------------------------------------------*/
- /*-----------顯示處理-----------*/
- DISP:
- MOV A,26H
- MOV P0,A ;顯示
- CLR P2.0
- ACALL DLY
- SETB P2.0
- MOV A,27H ;0.1S
- ACALL SEG7
- MOV P0,A
- CLR P2.1
- ACALL DLY
- SETB P2.1
- MOV A,20H ;秒個(gè)位
- ACALL SEG7
- MOV P0,A ;顯示秒個(gè)位
- SETB P0.7
- CLR P2.2
- ACALL DLY
- SETB P2.2
- MOV A,21H ;秒十位
- ACALL SEG7
- MOV P0,A
- CLR P2.3
- ACALL DLY
- SETB P2.3
- MOV A,22H ;分個(gè)位
- ACALL SEG7
- MOV P0,A
- SETB P0.7
- CLR P2.4
- ACALL DLY
- SETB P2.4
- MOV A,23H ;分十位
- ACALL SEG7
- MOV P0,A
- CLR P2.5
- ACALL DLY
- SETB P2.5
- MOV A,24H ;時(shí)個(gè)位
- ACALL SEG7
- MOV P0,A
- SETB P0.7
- CLR P2.6
- ACALL DLY
- SETB P2.6
- MOV A,25H ;時(shí)十位
- ACALL SEG7
- MOV P0,A
- CLR P2.7
- ACALL DLY
- SETB P2.7
- RET
- /*-------------------------------------------------------------------------------------------*/
- /*-----------延時(shí)部分-----------*/
- DLY10: MOV R3,#30
- D0: ACALL DLY
- DJNZ R3,D0
- RET
- DLY: MOV R7,#2
- D1: MOV R6,#40
- DJNZ R6,$
- DJNZ R7,D1
- RET
- /*-------------------------------------------------------------------------------------------*/
- /*-----------數(shù)碼管段值-----------*/
- SEG7:
- INC A
- MOVC A,@A+PC
- RET
- DB 03FH ;0 共陰
- DB 006H ;1
- DB 05BH ;2
- DB 04FH ;3
- DB 066H ;4
- DB 06DH ;5
- DB 07DH ;6
- DB 007H ;7
- DB 07FH ;8
- DB 06FH ;9
- END
復(fù)制代碼
全部資料51hei下載地址:
秒表 時(shí)鐘.zip
(121.36 KB, 下載次數(shù): 166)
2020-6-20 11:02 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|