新聞中心

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

        電子鐘的設計及仿真

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




        二、軟件系統設計
        程序清單:
        ORG 0000H
        AJMP MAIN
        ORG 000BH
        LJMP INTT0

        ORG 0030H
        MAIN: MOV SP, #60H ;確立堆棧區
        MOV PSW, #00H ;
        MOV R0, #20H ;RAM區首地址
        MOV R7, #5FH ;RAM區單元個數
        QL: MOV @R0, #00H ;RAM清零
        INC R0
        DJNZ R7, QL
        MOV IP, #02H ;IP初始化,優先定時器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
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;; 傳送顯示數據 ;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        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次循環
        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次計數
        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 ;數值放入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


        關鍵詞: 電子鐘設計仿

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 合水县| 肃北| 新乡市| 璧山县| 敦化市| 太湖县| 攀枝花市| 通河县| 沁阳市| 甘洛县| 鞍山市| 句容市| 石城县| 锦屏县| 凤山县| 仁寿县| 文山县| 东城区| 洛川县| 津南区| 石屏县| 渑池县| 开原市| 咸阳市| 蓬安县| 德清县| 刚察县| 济阳县| 凤冈县| 牡丹江市| 象州县| 日喀则市| 盐城市| 余干县| 双峰县| 札达县| 称多县| 宝坻区| 家居| 新绛县| 沈阳市|