新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 電子鐘的設(shè)計(jì)及仿真

電子鐘的設(shè)計(jì)及仿真

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
一、實(shí)現(xiàn)電子鐘計(jì)時(shí)的基本方法:
(1) 計(jì)數(shù)初值計(jì)算:
把定時(shí)器設(shè)為工作方式1,定時(shí)時(shí)間為50ms,則計(jì)數(shù)溢出20次即得時(shí)鐘計(jì)時(shí)最小單位秒,而100次計(jì)數(shù)可用軟件方法實(shí)現(xiàn)。
假設(shè)使用T/C0,方式1,50ms定時(shí),fosc=12MHz。
則初值X滿足(216-X)×1/12MHz×12μs =50000μs
X=15536→0011110010110000→3CB0H
(2) 采用中斷方式進(jìn)行溢出次數(shù)累計(jì),計(jì)滿20次為秒計(jì)時(shí)(1秒);
(3) 從秒到分和從分到時(shí)的計(jì)時(shí)是通過(guò)累加和數(shù)值比較實(shí)現(xiàn)。




二、軟件系統(tǒng)設(shè)計(jì)
程序清單:
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INTT0

ORG 0030H
MAIN: MOV SP, #60H ;確立堆棧區(qū)
MOV PSW, #00H ;
MOV R0, #20H ;RAM區(qū)首地址
MOV R7, #5FH ;RAM區(qū)單元個(gè)數(shù)
QL: MOV @R0, #00H ;RAM清零
INC R0
DJNZ R7, QL
MOV IP, #02H ;IP初始化,優(yōu)先定時(shí)器0
MOV IE, #82H ;IE初始化,
MOV TMOD, #01H ;定時(shí)器0方式1工作
LCALL PP ;調(diào)P.子程序
NEXT: LCALL KEY ;按鍵檢測(cè)子程序
JB ACC.0, RUNF ;A鍵按下運(yùn)行
LCALL DISP ;調(diào)用顯示子程序
SJMP NEXT

RUNF: LCALL OUTT ;調(diào)傳送子程序
LCALL TIME ;開電子鐘
JK: LCALL DISP ;調(diào)用顯示子程序
LCALL KEY ;按鍵檢測(cè)子程序
JZ JK
LCALL ANKEY
LCALL DISP ;調(diào)用顯示子程序
SJMP JK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; P點(diǎn)顯示 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PP: MOV 37H, #12 ;P點(diǎn)編碼送寄存器
MOV R0, #30H ;P點(diǎn)編碼送寄存器
MOV R7, #07H
PPP: MOV @R0, #10
INC R0
DJNZ R7, PPP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 鍵掃子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY: LCALL KEYS ;調(diào)鍵值處理子程序
JZ EXIT ;沒(méi)有鍵按下轉(zhuǎn)到返回
LCALL DISP
LCALL DISP ;調(diào)顯示去抖動(dòng)
LCALL KEYS
JZ EXIT
MOV B, 20H ;保存鍵值
KEYSF: LCALL KEYS ;調(diào)鍵值處理子程序
JZ KEYY ;鍵釋放,轉(zhuǎn)到恢復(fù)鍵值
LCALL DISP ;調(diào)顯示子程序延時(shí)
AJMP KEYSF ;等到鍵釋放
KEYY: MOV A, B ;鍵值送20H單元保存
EXIT: RET ;返回
KEYS: MOV P1, #0FFH ;先向P1口寫1
MOV A, P1 ;P1口值送累加器A
CPL A ;A值取反
ANL A, #0FH ;保存P1口的低4位
MOV 20H, A ;A值送20H保存
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 鍵功能子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANKEY: CLR EA ;關(guān)中斷
CHECK: JB TR0, YXZ ;判斷是否運(yùn)行
K0: CJNE A, #01H, K1
AJMP RUN ;轉(zhuǎn)運(yùn)行
K1: CJNE A, #02H, K2
AJMP KEY1 ;轉(zhuǎn)時(shí)調(diào)整
K2: CJNE A, #04H, K3
AJMP KEY2 ;轉(zhuǎn)分調(diào)整
K3: CJNE A, #08H, OUT
AJMP KEY3 ;轉(zhuǎn)秒調(diào)整

YXZ: JB ACC.0, STOP
AJMP OUT

KEY1: MOV R0, #45H ;時(shí)調(diào)整
LCALL ADD1
CLR C
CJNE A, #24H, OUTT
ACALL CLR0
AJMP OUTT
KEY2: MOV R0, #43H ;分調(diào)整
LCALL ADD1
CLR C
CJNE A, #60H, OUTT
ACALL CLR0
AJMP OUTT
KEY3: MOV R0, #41H ;秒調(diào)整
ACALL ADD1
CLR C
CJNE A, #60H, OUTT
ACALL CLR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 傳送顯示數(shù)據(jù) ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUTT: MOV 30H, 40H ;秒顯示單元41H-42H
MOV 31H, 41H
MOV 32H, #11 ; "-"
MOV 33H, 42H ;分顯示單元43H-44H
MOV 34H, 43H
MOV 35H, #11 ; "-"
MOV 36H, 44H ;時(shí)顯示單元44-45H
MOV 37H, 45H
RET
STOP: CLR TR0 ;關(guān)電子鐘并跳出
RET
RUN: LCALL TIME ;運(yùn)行電子鐘
OUT: SETB EA ;無(wú)鍵按下或完成功能跳出
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 運(yùn)行電子鐘 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME: SETB EA
MOV TL0, #0B0H
MOV TH0, #3CH ;3CB0H
MOV R4, #20 ;50ms,20次循環(huán)
SETB TR0 ;啟動(dòng)定時(shí)器0
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 定時(shí)中斷 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0: PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV TL0, #0B0H ;重新設(shè)定定時(shí)初值
MOV TH0, #3CH
SETB TR0 ;啟動(dòng)定時(shí)器0
DJNZ R4, OUTT0 ;1秒到
ADDSS: MOV R4, #14H ;20次計(jì)數(shù)
MOV R0, #41H ;秒十位
ACALL ADD1 ;加1程序
CLR C
CJNE A, #60H, ADDMM ;1分到
ADDMM: JC OUTT0
ACALL CLR0
MOV R0, #43H
ACALL ADD1 ;加1程序
CLR C
CJNE A, #60H, ADDHH ;1小時(shí)到
ADDHH: JC OUTT0
ACALL CLR0
MOV R0, #45H
ACALL ADD1 ;加1程序
CLR C
CJNE A, #24H, HOUR ;1天到
HOUR: JC OUTT0
ACALL CLR0
OUTT0: MOV 30H, 40H ;秒顯示單元41H-42H
MOV 31H, 41H
MOV 32H, #11 ; "-"
MOV 33H, 42H ;分顯示單元43H-44H
MOV 34H, 43H
MOV 35H, #11 ; "-"
MOV 36H, 44H ;時(shí)顯示單元44-45H
MOV 37H, 45H
POP PSW
POP ACC
SETB ET0
RETI


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 時(shí)間清零子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR0: CLR A
MOV @R0, A
DEC R0
MOV @R0, A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 加一子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1: MOV A, @R0 ;取十位
DEC R0
SWAP A
ORL A, @R0 ;組合十位與個(gè)位
ADD A, #01H ;加1
DA A ;十進(jìn)制調(diào)整
MOV R3, A ;暫存
ANL A, #0FH ;屏蔽十位
MOV @R0, A ;放入個(gè)位單元
MOV A, R3 ;取值
INC R0
SWAP A
ANL A, #0FH ;屏蔽個(gè)位
MOV @R0, A ;放入十位單元
MOV A, R3 ;數(shù)值放入A中等待判斷
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;顯示子程序 30H ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: MOV R1, #30H ;顯示緩沖存儲(chǔ)單元首地址
MOV R2, #80H ;從右至左顯示
DISP1: MOV P2, R2 ;送位控
MOV A, @R1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV P0, A ;送段控
ACALL DL ;延時(shí)
MOV A, R2
JB ACC.0, DISP2
RR A
INC R1
MOV R2, A
AJMP DISP1
DISP2: RET
TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0CH
DL: MOV R6, #14H ;顯示延時(shí)子程序
DL1: MOV R7, #19H ;
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
END


關(guān)鍵詞: 電子鐘設(shè)計(jì)仿

評(píng)論


技術(shù)專區(qū)

關(guān)閉