家用電器定時(shí)控制器設(shè)計(jì).docx
家用電器定時(shí)控制器設(shè)計(jì)
目 錄
摘 要 2
1 引 言 2
1.1 設(shè)計(jì)要求 2
1.2 設(shè)計(jì)思路 2
1.3 硬件電路設(shè)計(jì)框圖 3
2 定時(shí)器的硬件設(shè)計(jì) 4
2.1 LED顯示電路的設(shè)計(jì) 4
2.2 發(fā)光二極管電路的設(shè)計(jì) 6
2.2 鍵盤電路的設(shè)計(jì) 6
3 定時(shí)器的軟件設(shè)計(jì) 7
3.1 初始化程序 7
3.2 全局使能程序 7
3.3 開機(jī)顯示“HELLO”并亮燈程序 7
3.4 清零程序 8
3.5 查詢式鍵盤程序 8
3.6 定時(shí)時(shí)間設(shè)置程序 9
3.7 定時(shí)中斷程序 10
3.8結(jié)束顯示“HELP”并亮燈程序 12
實(shí)習(xí)心得 13
參考文獻(xiàn) 13
附 錄 14
摘 要
本文詳細(xì)介紹了基于AT89C51單片機(jī)的家用定時(shí)器的設(shè)計(jì)。本文設(shè)計(jì)的定時(shí)器實(shí)現(xiàn)了通過撥動開關(guān)開始和暫停定時(shí),通過查詢式鍵盤清零、設(shè)置定時(shí)時(shí)間和調(diào)整當(dāng)前時(shí)間,通過8位共陰極LED數(shù)碼管顯示當(dāng)前時(shí)間。開機(jī)時(shí)LED數(shù)碼管顯示“HELLO”,并使某只發(fā)光二極管閃亮。開始定時(shí)后,LED數(shù)碼管顯示倒計(jì)時(shí)。當(dāng)定時(shí)時(shí)間到時(shí),八只發(fā)光二極管間隔閃亮,LED數(shù)碼管顯示“HELP”。
關(guān)鍵字:AT89C51,定時(shí)器,鍵盤設(shè)置,LED數(shù)碼管顯示
1 引 言
日常生活中,經(jīng)常碰到一些需要定時(shí)的事情,例如,空調(diào)可以定時(shí)開啟與關(guān)閉,洗衣機(jī)洗滌衣物需要定時(shí)在幾分鐘到幾十分鐘的時(shí)間。完成定時(shí)的定時(shí)器多種多樣,以往在家用電器中采用的機(jī)械定時(shí)器就是根據(jù)一般上弦鐘表原理設(shè)計(jì)的,這種定時(shí)器雖然結(jié)構(gòu)簡單,成本低,維修也比較方便,但是它的觸頭頻繁接觸和斷開,大大縮減了使用壽命,也不利于進(jìn)一步全自動化。在電子技術(shù)突飛猛進(jìn)的今天,電子定時(shí)器逐步取而代之。
在生活和生產(chǎn)的各個領(lǐng)域中,凡是有自動控制要求的地方都會有單片機(jī)的身影出現(xiàn)。從簡單到復(fù)雜,從空中、地面到地下,凡是能想像到的地方幾乎都有使用單片的需求。單片機(jī)的應(yīng)用有利于產(chǎn)品的小型化、多功能化和智能化,有助于提高勞動效率,減輕勞動強(qiáng)度,提高產(chǎn)品質(zhì)量,改善勞動環(huán)境,減少能源和材料消耗,保證安全等。
鑒此,本文設(shè)計(jì)了一款基于AT89C51單片機(jī)的家用定時(shí)器。
1.1 設(shè)計(jì)要求
設(shè)計(jì)一個家用電器的定時(shí)控制程序,要求顯示定時(shí)時(shí)間,并可用鍵盤對定時(shí)時(shí)間進(jìn)行設(shè)定。
程序功能:
(1)開機(jī)時(shí)數(shù)碼管顯示“HELLO”,使某只發(fā)光二極管亮;
(2)用鍵可使定時(shí)控制器清零,允許對定時(shí)時(shí)間設(shè)定;
(3)用鍵可對分設(shè)定,用鍵可對秒設(shè)定;
(4)按“運(yùn)行鍵”開始定時(shí),并且運(yùn)行過程中動態(tài)顯示時(shí)間狀態(tài),時(shí)間到時(shí)八只發(fā)光二極管間隔亮。
附加程序功能:
(1)在按“設(shè)定”鍵之前按任何鍵都無效;
(2)在進(jìn)入倒計(jì)時(shí)狀態(tài)后, 仍可以對定時(shí)時(shí)間再次調(diào)節(jié),即重新設(shè)定;
(3)運(yùn)行結(jié)束即時(shí)間到使八只發(fā)光二極管間隔亮,數(shù)碼管顯示“HELP”。
1.2 設(shè)計(jì)思路
根據(jù)設(shè)計(jì)要求,初步確定設(shè)計(jì)方案如下:
(1)系統(tǒng)顯示采用8位共陰極LED數(shù)碼管。
LED數(shù)碼管的串行數(shù)據(jù)線DIN由P0.2產(chǎn)生,移位信號CLK由P0.3產(chǎn)生。8個串/并移位寄存器芯片74LS164首尾相連。每片的并行輸出作為LED數(shù)碼管的段碼。
(2)定時(shí)時(shí)間的設(shè)置與調(diào)整通過接入查詢式鍵盤實(shí)現(xiàn)。
設(shè)計(jì)10個按鍵,分別定義為:
RT:Reset,清零鍵。其功能是當(dāng)該鍵按下時(shí),顯示清零。
EN:Enable,設(shè)定鍵。其功能是當(dāng)該鍵按下時(shí),其余按鍵才生效。
BN:Begin,開始鍵。其功能是當(dāng)該鍵按下時(shí),定時(shí)開始。
ST:Stop,暫停鍵。其功能是當(dāng)該鍵按下時(shí),定時(shí)停止。
HH:High Hour:時(shí)十位計(jì)數(shù)置數(shù)按鍵。
HL:Low Hour:時(shí)個位計(jì)數(shù)置數(shù)按鍵。
MH:High Minute:分十位計(jì)數(shù)置數(shù)按鍵。
ML:Low Minute:分個位計(jì)數(shù)置數(shù)按鍵。
SH:High Second:秒十位計(jì)數(shù)置數(shù)按鍵。
SL:Low Second:秒個位計(jì)數(shù)置數(shù)按鍵。
(3)按鍵的接入方式:
RT鍵:通過P1口P1.0引腳接入,查詢工作方式。
EN鍵:通過P0口P0.0引腳接入,查詢工作方式。
BN鍵:通過P1口P1.1引腳接入,查詢工作方式。
HH鍵:通過P1口P1.2引腳接入,查詢工作方式。
HL鍵:通過P1口P1.3引腳接入,查詢工作方式。
MH鍵:通過P1口P1.4引腳接入,查詢工作方式。
ML鍵:通過P1口P1.5引腳接入,查詢工作方式。
SH鍵:通過P1口P1.6引腳接入,查詢工作方式。
SL鍵:通過P1口P1.7引腳接入,查詢工作方式。
(4)指示燈閃亮采用8個發(fā)光二極管,接入P2口。
1.3 硬件電路設(shè)計(jì)框圖
根據(jù)設(shè)計(jì)要求與設(shè)計(jì)思路,硬件電路設(shè)計(jì)框圖如圖1.1所示。硬件電路結(jié)構(gòu)由5個部分:按鍵輸入電路、發(fā)光二極管電路、LED顯示器及驅(qū)動電路、時(shí)鐘與復(fù)位電路和電源電路組成。
按鍵電路
發(fā)光二極管
電路
時(shí)鐘電路
復(fù)位電路
AT89C51
單
片
機(jī)
驅(qū)動電路
8位LED
顯示器
圖1.1 硬件電路設(shè)計(jì)框圖
2 定時(shí)器的硬件設(shè)計(jì)
2.1 LED顯示電路的設(shè)計(jì)
顯示器由8個共陰極LED數(shù)碼管組成。輸入只有兩個信號,它們是串行數(shù)據(jù)線DIN和移位信號CLK。8個串/并移位寄存器芯片74LS164首尾相連。每片的并行輸出作為LED數(shù)碼管的段碼。
74LS164的引腳圖如圖2.1所示:
圖2.1 74LS164的引腳圖
74LS164為8位串入并出移位寄存器,1、2為 串行輸入端,QA~QH為并行輸出端,CLK為移位時(shí)鐘脈沖,上升沿移入一位;CLR為清零端,低電平時(shí)并行輸出為零。
圖2.2 LED顯示電路原理圖
2.2 發(fā)光二極管電路的設(shè)計(jì)
圖2.3 發(fā)光二極管電路原理圖
2.2 鍵盤電路的設(shè)計(jì)
本文采用了8個按鈕的獨(dú)立式鍵盤,接到單片機(jī)的并行口P1,如果有鍵按下,則相應(yīng)輸出為低,否則輸出為高。單片機(jī)通過識別,判斷按下什么鍵。有鍵按下后,加入一段延時(shí),防止由于鍵盤抖動而引起的誤操作。
圖2.4 鍵盤電路原理圖
3 定時(shí)器的軟件設(shè)計(jì)
3.1 初始化程序
TICK EQU 5000 ;5000*2*100us = 1s
T100us EQU 156 ;100us時(shí)間常數(shù)(12M)
C100us EQU 05H ;100us記數(shù)單元
DBUF0 EQU 30H
TEMP EQU 40H
RT BIT P1.0 ;清零端
EN BIT P0.0 ;全局使能端
LED BIT P0.1 ;LED燈亮燈端
DIN BIT P0.2 ;數(shù)碼管靜態(tài)顯示端
CLK BIT P0.3 ;數(shù)碼管靜態(tài)顯示端
ST BIT P0.5 ;暫停端
ORG 0000H
LJMP LOOP1
ORG 000BH
LJMP T0INT
ORG 0100H
3.2 全局使能程序
LOOP1:
SETB EN
MOV C,EN
CPL C
JC START ;判斷全局使能按鍵是否按下
LJMP LOOP1
3.3 開機(jī)顯示“HELLO”并亮燈程序
START:
MOV 30H,#10H;\
MOV 31H,#15H;H
MOV 32H,#16H;E
MOV 33H,#17H;L
MOV 34H,#17H;L
MOV 35H,#00H;O
MOV 36H,#10H;\
MOV 37H,#10H;\
CLR LED ;定時(shí)開始時(shí)點(diǎn)亮LED燈
3.4 清零程序
LOOP2:
SETB RT
MOV C,RT
CPL C
JC CLEAR ;判斷清零按鍵是否按下
LJMP LOOP2 ;若沒有按下則繼續(xù)判斷
CLEAR:
MOV 30H,#00H;0
MOV 31H,#00H;0
MOV 32H,#14H;-
MOV 33H,#00H;0
MOV 34H,#00H;0
MOV 35H,#14H;-
MOV 36H,#00H;0
MOV 37H,#00H;0
3.5 查詢式鍵盤程序
KEYBOARD:
MOV P1,#0FFH ;置P1口為輸入態(tài)
MOV A,P1 ;讀入鍵值
LCALL DELAY
MOV B,P1
CJNE A,B,KEYBOARD
JNB ACC.0,CLEAR ;清零按鍵P1.0
JNB ACC.1,BEGIN ;開始定時(shí)按鍵P1.1
JNB ACC.2,HH ;時(shí)十位計(jì)數(shù)置數(shù)按鍵P1.2
JNB ACC.3,HL ;時(shí)個位計(jì)數(shù)置數(shù)按鍵P1.3
JNB ACC.4,MH ;分十位計(jì)數(shù)置數(shù)按鍵P1.4
JNB ACC.5,ML ;分個位計(jì)數(shù)置數(shù)按鍵P1.5
JNB ACC.6,SH ;秒十位計(jì)數(shù)置數(shù)按鍵P1.6
JNB ACC.7,SL ;秒個位計(jì)數(shù)置數(shù)按鍵P1.7
LJMP KEYBOARD ;若沒有按鍵按下則繼續(xù)判斷
3.6 定時(shí)時(shí)間設(shè)置程序
//設(shè)置時(shí)十位
HH:
MOV A,30H
INC A
MOV 30H,A
CJNE A,#06H,JUMP
MOV 30H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置時(shí)個位
HL:
MOV A,31H
INC A
MOV 31H,A
CJNE A,#0AH,JUMP
MOV 31H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置分十位
MH:
MOV A,33H
INC A
MOV 33H,A
CJNE A,#06H,JUMP
MOV 33H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置分個位
ML:
MOV A,34H
INC A
MOV 34H,A
CJNE A,#0AH,JUMP
MOV 34H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置秒十位
SH:
MOV A,36H
INC A
MOV 36H,A
CJNE A,#06H,JUMP
MOV 36H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置秒個位
SL:
MOV A,37H
INC A
MOV 37H,A
CJNE A,#0AH,JUMP
MOV 37H,#00H
CALL DELAY
LJMP DISP2
3.7 定時(shí)中斷程序
//開啟中斷
BEGIN:
MOV TMOD, #02H ;方式2, 定時(shí)器
MOV TH0, #T100us
MOV TL0, #T100us
MOV IE, #10000010B ;EA=1, IT0 = 1
SETB TR0 ;開始定時(shí)
MOV C100us, #HIGH(TICK)
MOV C100us+1, #LOW(TICK)
//等待進(jìn)入中斷
WAIT:
SJMP WAIT
//中斷程序
T0INT:
PUSH PSW
MOV A, C100us+1
JNZ GOON
DEC C100us
GOON:
DEC C100us+1
MOV A, C100us
ORL A, C100us+1
JNZ JUMP4 ;100us 記數(shù)器不為0, 返回
MOV C100us, #HIGH(TICK) ;#HIGH(Tick)
MOV C100us+1, #LOW(TICK) ;#LOW(Tick)
;100us 記數(shù)器為0, 重置記數(shù)器
//開始定時(shí)
TIMING:
SETB RT
MOV C,RT
CPL C
JC JUMP2 ;判斷清零按鍵是否按下
SETB ST
MOV C,ST
CPL C
JC JUMP3;判斷暫停按鍵是否按下
MOV A,37H
DEC A
MOV 37H,A
CJNE A,#0FFH,DISP3
MOV 37H,#09H
MOV A,36H
DEC A
MOV 36H,A
CJNE A,#0FFH,DISP3
MOV 36H,#05H
MOV A,34H
DEC A
MOV 34H,A
CJNE A,#0FFH,DISP3
MOV 34H,#09H
MOV A,33H
DEC A
MOV 33H,A
CJNE A,#0FFH,DISP3
MOV 33H,#05H
MOV A,31H
DEC A
MOV 31H,A
CJNE A,#0FFH,DISP3
MOV 31H,#09H
MOV A,30H
DEC A
MOV 30H,A
CJNE A,#0FFH,DISP3
MOV 30H,#05H
LJMP HELP
……
EXIT:
POP PSW
RETI
3.8結(jié)束顯示“HELP”并亮燈程序
HELP:
MOV 30H,#10H;\
MOV 31H,#10H;\
MOV 32H,#15H;H
MOV 33H,#16H;E
MOV 34H,#17H;L
MOV 35H,#18H;P
MOV 36H,#10H;\
MOV 37H,#10H;\
//定時(shí)結(jié)束后間隔閃燈
FLASH:
SETB LED
MOV A, #0FEH;11111110
MOV R5, #8
OUTPUT:
MOV P2, A
RL A
LCALL DELAY
DJNZ R5, OUTPUT
SJMP FLASH
實(shí)習(xí)心得
一周的實(shí)習(xí)讓我看到了自身的不足,也收獲了寶貴的經(jīng)驗(yàn)教訓(xùn)。從設(shè)計(jì)一個小型系統(tǒng)時(shí)要考慮的方方面面到真正動手搭接面包板時(shí)需要注意的各個細(xì)節(jié),電子設(shè)計(jì)的每一個環(huán)節(jié)都是整體中密不可分的一部分,必須經(jīng)過全局考慮和仔細(xì)思索,這里面還有很多知識值得虛心學(xué)習(xí)。除了知識方面啟發(fā),這次實(shí)習(xí)也讓我看到了自己的不足。我們的團(tuán)隊(duì)分工合作不夠明朗,導(dǎo)致我們浪費(fèi)了許多時(shí)間。這主要是因?yàn)殛?duì)員之間的交流不夠,造成彼此分工不明確,工作效率低下。這些都是我在后續(xù)學(xué)習(xí)中需要注重改進(jìn)提高的。最后,本次實(shí)習(xí)給我的啟發(fā)是:要想真正掌握電氣專業(yè)的知識技能,僅僅依靠現(xiàn)行的課堂學(xué)習(xí)是遠(yuǎn)遠(yuǎn)不夠的,不能僅僅滿足于掌握理論知識,還應(yīng)該在課后學(xué)習(xí)一些專業(yè)軟件,用它們來做仿真測試,加深自己對于知識的理解;同時(shí)還要多動手,多調(diào)試一些電路,熟悉各種元器件的特性,積累設(shè)計(jì)和分析電路時(shí)的經(jīng)驗(yàn)。
總而言之,非常感謝這次實(shí)習(xí)給我的反思與啟發(fā),讓我有機(jī)會提高自己的專業(yè)技能。略帶戲謔地說,實(shí)習(xí)就是這樣一個過程:誰不曾感覺過苦惱,誰不曾放棄過自己原先的設(shè)想,我們總是在檢線無果狠狠失望過一回,然后突然醒悟般地發(fā)現(xiàn)問題所在。我們終究還是做到了,做到了超越昨天的自我。
參考文獻(xiàn)
[1] 黃建新.單片機(jī)原理、接口技術(shù)及應(yīng)用[M]. 北京:化學(xué)工業(yè)出版社, 2013
附 錄
整體程序
//**************************************************//
// 家用電器定時(shí)控制器 //
//**************************************************//
// P0.0接使能開關(guān)K0 P0.1接LED燈 P0.2接數(shù)碼管DIN //
// P0.3接數(shù)碼管CLK P0.4接電機(jī) p0.5接暫停開關(guān)K1 //
// //
// P1口接查詢式鍵盤: //
// P1.0-清零按鍵 //
// P1.1-開始定時(shí)按鍵 //
// P1.2-時(shí)十位計(jì)數(shù)置數(shù)按鍵 //
// P1.3-時(shí)個位計(jì)數(shù)置數(shù)按鍵 //
// P1.4-分十位計(jì)數(shù)置數(shù)按鍵 //
// P1.5-分個位計(jì)數(shù)置數(shù)按鍵 //
// P1.6-秒十位計(jì)數(shù)置數(shù)按鍵 //
// P1.7-秒個位計(jì)數(shù)置數(shù)按鍵 //
// //
// P2口接跑馬燈 //
//**************************************************//
TICK EQU 5000 ;5000*2*100us = 1s
T100us EQU 156 ;100us時(shí)間常數(shù)(12M)
C100us EQU 05H ;100us記數(shù)單元
DBUF0 EQU 30H
TEMP EQU 40H
RT BIT P1.0 ;清零端
EN BIT P0.0 ;全局使能端
LED BIT P0.1 ;LED燈亮燈端
DIN BIT P0.2 ;數(shù)碼管靜態(tài)顯示端
CLK BIT P0.3 ;數(shù)碼管靜態(tài)顯示端
ST BIT P0.5 ;暫停端
ORG 0000H
LJMP LOOP1
ORG 000BH
LJMP T0INT
ORG 0100H
//全局使能
LOOP1:
SETB EN
MOV C,EN
CPL C
JC START ;判斷全局使能按鍵是否按下
LJMP LOOP1
START:
MOV 30H,#10H;\
MOV 31H,#15H;H
MOV 32H,#16H;E
MOV 33H,#17H;L
MOV 34H,#17H;L
MOV 35H,#00H;O
MOV 36H,#10H;\
MOV 37H,#10H;\
CLR LED ;定時(shí)開始時(shí)點(diǎn)亮LED燈
//顯示定時(shí)開始前的 HELLO 界面
DISP:
MOV R0, #DBUF0
MOV R1, #TEMP
MOV R2, #8
DP10:
MOV DPTR,#SEGTAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP10
MOV R0, #TEMP
MOV R1, #8
DP12:
MOV R2, #8
MOV A, @R0
DP13:
RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP13
INC R0
DJNZ R1, DP12
//清零
LOOP2:
SETB RT
MOV C,RT
CPL C
JC CLEAR ;判斷清零按鍵是否按下
LJMP LOOP2 ;若沒有按下則繼續(xù)判斷
CLEAR:
MOV 30H,#00H;0
MOV 31H,#00H;0
MOV 32H,#14H;-
MOV 33H,#00H;0
MOV 34H,#00H;0
MOV 35H,#14H;-
MOV 36H,#00H;0
MOV 37H,#00H;0
//顯示清零界面
DISP2:
MOV R0, #DBUF0
MOV R1, #TEMP
MOV R2, #8
DP20:
MOV DPTR,#SEGTAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP20
MOV R0, #TEMP
MOV R1, #8
DP22:
MOV R2, #8
MOV A, @R0
DP23:
RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP23
INC R0
DJNZ R1, DP22
//判斷哪個按鍵被按下
KEYBOARD:
MOV P1,#0FFH ;置P1口為輸入態(tài)
MOV A,P1 ;讀入鍵值
LCALL DELAY
MOV B,P1
CJNE A,B,KEYBOARD
JNB ACC.0,CLEAR ;清零按鍵P1.0
JNB ACC.1,BEGIN ;開始定時(shí)按鍵P1.1
//JNB ACC.2,HH ;時(shí)十位計(jì)數(shù)置數(shù)按鍵P1.2
//JNB ACC.3,HL ;時(shí)個位計(jì)數(shù)置數(shù)按鍵P1.3
JNB ACC.4,MH ;分十位計(jì)數(shù)置數(shù)按鍵P1.4
JNB ACC.5,ML ;分個位計(jì)數(shù)置數(shù)按鍵P1.5
JNB ACC.6,SH ;秒十位計(jì)數(shù)置數(shù)按鍵P1.6
JNB ACC.7,SL ;秒個位計(jì)數(shù)置數(shù)按鍵P1.7
LJMP KEYBOARD ;若沒有按鍵按下則繼續(xù)判斷
//置數(shù)
//設(shè)置時(shí)十位
//HH:
//MOV A,30H
//INC A
//MOV 30H,A
//CJNE A,#06H,JUMP
//MOV 30H,#00H
//CALL DELAY
//LJMP DISP2
//設(shè)置時(shí)個位
//HL:
//MOV A,31H
//INC A
//MOV 31H,A
//CJNE A,#0AH,JUMP
//MOV 31H,#00H
//CALL DELAY
//LJMP DISP2
//設(shè)置分十位
MH:
MOV A,33H
INC A
MOV 33H,A
CJNE A,#06H,JUMP
MOV 33H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置分個位
ML:
MOV A,34H
INC A
MOV 34H,A
CJNE A,#0AH,JUMP
MOV 34H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置秒十位
SH:
MOV A,36H
INC A
MOV 36H,A
CJNE A,#06H,JUMP
MOV 36H,#00H
CALL DELAY
LJMP DISP2
//設(shè)置秒個位
SL:
MOV A,37H
INC A
MOV 37H,A
CJNE A,#0AH,JUMP
MOV 37H,#00H
CALL DELAY
LJMP DISP2
JUMP:
LCALL DELAY
LJMP DISP2 ;顯示當(dāng)前置數(shù)值
JUMP2:
LJMP CLEAR ;定時(shí)過程中清零
JUMP3:
LJMP KEYBOARD ;定時(shí)過程中暫停
JUMP4:
LJMP EXIT
//開啟中斷
BEGIN:
MOV TMOD, #02H ;方式2, 定時(shí)器
MOV TH0, #T100us
MOV TL0, #T100us
MOV IE, #10000010B ;EA=1, IT0 = 1
SETB TR0 ;開始定時(shí)
MOV C100us, #HIGH(TICK)
MOV C100us+1, #LOW(TICK)
//等待進(jìn)入中斷
WAIT:
SJMP WAIT
//中斷程序
T0INT:
PUSH PSW
MOV A, C100us+1
JNZ GOON
DEC C100us
GOON:
DEC C100us+1
MOV A, C100us
ORL A, C100us+1
JNZ JUMP4 ;100us 記數(shù)器不為0, 返回
MOV C100us, #HIGH(TICK) ;#HIGH(Tick)
MOV C100us+1, #LOW(TICK) ;#LOW(Tick)
;100us 記數(shù)器為0, 重置記數(shù)器
//開始定時(shí)
TIMING:
SETB RT
MOV C,RT
CPL C
JC JUMP2 ;判斷清零按鍵是否按下
SETB ST
MOV C,ST
CPL C
JC JUMP3 ;判斷暫停按鍵是否按下
MOV A,37H
DEC A
MOV 37H,A
CJNE A,#0FFH,DISP3
MOV 37H,#09H
MOV A,36H
DEC A
MOV 36H,A
CJNE A,#0FFH,DISP3
MOV 36H,#05H
MOV A,34H
DEC A
MOV 34H,A
CJNE A,#0FFH,DISP3
MOV 34H,#09H
MOV A,33H
DEC A
MOV 33H,A
CJNE A,#0FFH,DISP3
MOV 33H,#05H
MOV A,31H
DEC A
MOV 31H,A
CJNE A,#0FFH,DISP3
MOV 31H,#09H
MOV A,30H
DEC A
MOV 30H,A
CJNE A,#0FFH,DISP3
MOV 30H,#05H
LJMP HELP
//延時(shí)程序
DELAY:
MOV R6, #0
MOV R7, #0
DELAYLOOP:
DJNZ R7, DELAYLOOP
DJNZ R6, DELAYLOOP
RET
//顯示定時(shí)
DISP3:
MOV R0, #DBUF0
MOV R1, #TEMP
MOV R2, #8
DP30:
MOV DPTR,#SEGTAB
MOV A, @R0
MOVC A, @A+DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP30
MOV R0, #TEMP
MOV R1, #8
DP32:
MOV R2, #8
MOV A, @R0
DP33:
RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP33
INC R0
DJNZ R1, DP32
EXIT:
POP PSW
RETI
//顯示定時(shí)結(jié)束后的 HELP 界面
HELP:
MOV 30H,#10H;\
MOV 31H,#10H;\
MOV 32H,#15H;H
MOV 33H,#16H;E
MOV 34H,#17H;L
MOV 35H,#18H;P
MOV 36H,#10H;\
MOV 37H,#10H;\
DISP4:
MOV R0,#DBUF0
MOV R1,#TEMP
MOV R2,#8
DP40:
MOV DPTR,#SEGTAB
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,DP40
MOV R0,#TEMP
MOV R1,#8
DP42:
MOV R2,#8
MOV A,@R0
DP43:
RLC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R2,DP43
INC R0
DJNZ R1,DP42
//定時(shí)結(jié)束后間隔閃燈
FLASH:
SETB LED
MOV A, #0FEH;11111110
MOV R5, #8
OUTPUT:
MOV P2, A
RL A
LCALL DELAY
DJNZ R5, OUTPUT
SJMP FLASH
SEGTAB:
DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5
DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B
DB 00H,00H,00H,00H ;\,\,\,\
DB 00H,00H,00H,00H,40H ;\,\,\,\,-
DB 76H,79H,38H,73H,40H ;H,E,L,P,-
END