新聞中心

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

電子鐘的設計及仿真

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




二、軟件系統(tǒng)設計
程序清單:
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ū)單元個數(shù)
QL: MOV @R0, #00H ;RAM清零
INC R0
DJNZ R7, QL
MOV IP, #02H ;IP初始化,優(yōu)先定時器0
MOV IE, #82H ;IE初始化,
MOV TMOD, #01H ;定時器0方式1工作
LCALL PP ;調P.子程序
NEXT: LCALL KEY ;按鍵檢測子程序
JB ACC.0, RUNF ;A鍵按下運行
LCALL DISP ;調用顯示子程序
SJMP NEXT

RUNF: LCALL OUTT ;調傳送子程序
LCALL TIME ;開電子鐘
JK: LCALL DISP ;調用顯示子程序
LCALL KEY ;按鍵檢測子程序
JZ JK
LCALL ANKEY
LCALL DISP ;調用顯示子程序
SJMP JK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; P點顯示 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PP: MOV 37H, #12 ;P點編碼送寄存器
MOV R0, #30H ;P點編碼送寄存器
MOV R7, #07H
PPP: MOV @R0, #10
INC R0
DJNZ R7, PPP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 鍵掃子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY: LCALL KEYS ;調鍵值處理子程序
JZ EXIT ;沒有鍵按下轉到返回
LCALL DISP
LCALL DISP ;調顯示去抖動
LCALL KEYS
JZ EXIT
MOV B, 20H ;保存鍵值
KEYSF: LCALL KEYS ;調鍵值處理子程序
JZ KEYY ;鍵釋放,轉到恢復鍵值
LCALL DISP ;調顯示子程序延時
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 ;關中斷
CHECK: JB TR0, YXZ ;判斷是否運行
K0: CJNE A, #01H, K1
AJMP RUN ;轉運行
K1: CJNE A, #02H, K2
AJMP KEY1 ;轉時調整
K2: CJNE A, #04H, K3
AJMP KEY2 ;轉分調整
K3: CJNE A, #08H, OUT
AJMP KEY3 ;轉秒調整

YXZ: JB ACC.0, STOP
AJMP OUT

KEY1: MOV R0, #45H ;時調整
LCALL ADD1
CLR C
CJNE A, #24H, OUTT
ACALL CLR0
AJMP OUTT
KEY2: MOV R0, #43H ;分調整
LCALL ADD1
CLR C
CJNE A, #60H, OUTT
ACALL CLR0
AJMP OUTT
KEY3: MOV R0, #41H ;秒調整
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 ;時顯示單元44-45H
MOV 37H, 45H
RET
STOP: CLR TR0 ;關電子鐘并跳出
RET
RUN: LCALL TIME ;運行電子鐘
OUT: SETB EA ;無鍵按下或完成功能跳出
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 運行電子鐘 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME: SETB EA
MOV TL0, #0B0H
MOV TH0, #3CH ;3CB0H
MOV R4, #20 ;50ms,20次循環(huán)
SETB TR0 ;啟動定時器0
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; 定時中斷 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0: PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV TL0, #0B0H ;重新設定定時初值
MOV TH0, #3CH
SETB TR0 ;啟動定時器0
DJNZ R4, OUTT0 ;1秒到
ADDSS: MOV R4, #14H ;20次計數(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小時到
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 ;時顯示單元44-45H
MOV 37H, 45H
POP PSW
POP ACC
SETB ET0
RETI


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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;顯示子程序 30H ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: MOV R1, #30H ;顯示緩沖存儲單元首地址
MOV R2, #80H ;從右至左顯示
DISP1: MOV P2, R2 ;送位控
MOV A, @R1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV P0, A ;送段控
ACALL DL ;延時
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 ;顯示延時子程序
DL1: MOV R7, #19H ;
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
END


關鍵詞: 電子鐘設計仿

評論


技術專區(qū)

關閉