新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用8031單片機控制的數字鐘

        用8031單片機控制的數字鐘

        作者: 時間:2012-02-17 來源:網絡 收藏

        電子鐘的設計方法有多種,例如,可用中小規模集成電路組成電子鐘;也可以利用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子鐘;還可以利用來實現電子鐘等等。這些方法都各有特點,其中,利用實現的電子鐘具有編程靈活,便于電子鐘功能的擴充,即可用該電子鐘發出各種信號,精確度高等特點。

        本文引用地址:http://www.104case.com/article/172074.htm

        所設計的電子鐘有以下功能:
        1. 24小時制時間顯示。
        2. 可隨時進行時間校對。
        3. 整點報時。
        4. 鬧鐘功能。

        為了節約制作硬件的開支,我們利用開發機上的硬件資源,開發了電腦鐘的軟件。該鐘由8031單片機,采用24小時制計時,利用開發機上的六個LED顯示器來顯示時、分和秒,使用P1端口中的P1.0端口線實現整點報時功能;使用P3端口的P3.0實現鬧鐘功能。其硬件原理圖如圖一所示。

        9.jpg

        圖中的開關K4用于鬧鐘,當K4=1時(開關處于ON的位置),打開鬧鐘,使之在預定時間起鬧;當K1=0時(開關處于OFF的位置),則關閉鬧鐘,使之不鬧。另外,在鬧鐘響起時,K4也可作為止鬧開關使用,若不止鬧,則鬧一分鐘。鬧鐘信號用發光二極管來模擬。

        整點報時信號也是用發光二極管來模擬的。當整點時,P1.0口所接的發光二極管點亮一分鐘。

        電腦數字鐘的秒信號是利用8031單片機定時器T0產生的。由于開發機的晶振頻率為6MHz,使得T0的最大定時時間遠遠小于1秒,因此,在設計時采用了硬件計數與軟件計數相結合的方式,即通過T0產生一定的定時時間,然后再利用軟件進行計數,從而產生1秒鐘的時間信號。在設計中,定時器T0采用了中斷方式。當定時時間到時,單片機產生中斷,在T0的中斷服務程序中實現時、分、秒的累加。并且,該中斷的優先級別高于其它中斷,因此,保證了電子鐘走時準確。在設計中,利用外部中斷0和外部中斷1分別作為校時和鬧鐘校時按鍵的觸發輸入。當需要校時時,撥動K5或K6開關,便產生外部中斷,進入相應的中斷服務程序。在外部中斷0和外部中斷1的中斷服務程序中,都只有一條表示有按鍵的標志位置1的指令,然后在主程序中用查詢標志位的方式判斷是否有鍵按下。若查得標志位為1則進入校時子程序進行校時的相應處理;若為0則照常進行時間顯示。當撥動K5開關時,進入校時狀態,用戶可以方便地校準時間。當撥動K6開關時,便進入鬧鐘校時狀態,這時,可根據需要設置起鬧時間。在鬧鐘校時期間,時鐘繼續計數,即鬧鐘校時不影響時鐘走時。

        程序中的一些存儲單元的定義如下:
          20H~22H:時、分、秒單元
          40H~42H:校時或鬧鐘校時期間的時、分、秒單元
          50H~51H:起鬧時間的時、分單元
          79H~7EH:顯示緩沖區

        用戶標志位F0:校時標志,當F0=1時,表示校時,位7FH:鬧鐘校時標志,當7FH=1時,表示鬧鐘校時

        以上的總體設計使得電腦數字鐘的精確度較高,因為在程序的執行過程中,任何指令都不影響定時器的正常計數。從而,使數字鐘的精度僅僅取決于單片機的產生機器周期電路和定時器T0硬件電路的精確度。另外,程序較為簡潔,具有可靠性和較好的可讀性。

        我們設計電腦數字鐘的目的并不在于電腦數字鐘本身,而是想將它的設計應用于實時控制之中。只要對上述程序和硬件電路稍加修改,便可以得到實時控制的實用系統,從而應用到實際工作與生產中去。

        電腦數字鐘的匯編語言源程序如下所示:
        ORG 0000H
        LJMP MAIN
        ORG 0003H
        SETB PSW.5
        RETI
        ORG 000BH
        LJMP CLOCK
        ORG 0013H
        SETB 7FH
        RETI
        ORG 0030H
        MAIN: MOV SP,#60H
        MOV TMOD,#01H
        MOV IE,#87H
        SETB PT0
        MOV TL0,#0B7H
        MOV TH0,#3CH
        MOV 20H,#00H
        MOV 21H,#00H
        MOV 22H,#00H
        MOV 23H,#00H
        MOV 50H,#06H
        MOV 51H,#28H
        MOV 52H,#00H
        CLR PSW.5
        CLR 7FH
        SETB TR0
        SETB IT0
        SETB IT1
        CLR P3.0
        SS: LCALL CUTIN0
        LCALL SSCAN
        JNB PSW.5,LK
        LCALL KEY0
        LK: JNB 7FH,SS
        LCALL KEY1
        SJMP SS
        CUTIN0: PUSH PSW
        PUSH ACC
        MOV 25H,R0
        MOV R0,#79H
        MOV A,22H
        ACALL BCD
        MOV A,21H
        ACALL BCD
        MOV A,20H
        ACALL BCD
        MOV R0,25H
        POP ACC
        POP PSW
        RET
        CUTIN1: PUSH PSW
        PUSH ACC
        MOV 25H,R0
        MOV R0,#79H
        MOV A,42H
        ACALL BCD
        MOV A,41H
        ACALL BCD
        MOV A,40H
        ACALL BCD
        MOV R0,25H
        POP ACC
        POP PSW
        RET
        BCD: MOV B,#0AH
        DIV AB
        MOV @R0,B
        INC R0
        MOV @R0,A
        INC R0
        RET
        CLOCK: JNB PSW.5,ZC
        LJMP FH
        ZC: MOV TL0,#0B7H
        MOV TH0,#3CH
        PUSH PSW
        PUSH ACC
        INC 23H
        MOV A,23H
        CJNE A,#0AH,RET0
        MOV 23H,#00H
        INC 22H
        MOV A,22H
        CJNE A,#3CH,RET0
        MOV 22H,#00H
        SETB P1.0
        CLR P3.0
        INC 21H
        MOV A,21H
        CJNE A,#3CH,RET0
        MOV 21H,#00H
        CLR P1.0
        INC 20H
        MOV A,20H
        CJNE A,#18H,RET0
        MOV 20H,#00H
        AJMP RET0
        RET0: MOV A,21H
        CJNE A,51H,B0
        MOV A,20H
        CJNE A,50H,B0
        SETB P3.0
        B0: POP ACC
        POP PSW
        FH: RETI
        SSCAN: MOV R6,#05H
        SS2: MOV 30H,#20H
        MOV 31H,#7EH
        MOV R7,#06H
        SS1: MOV R1,#21H


        上一頁 1 2 下一頁

        關鍵詞: 數字 控制 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 英德市| 莎车县| 星子县| 乐山市| 临猗县| 香港 | 乌鲁木齐县| 敖汉旗| 深圳市| 涞水县| 扶沟县| 汝城县| 革吉县| 会东县| 太白县| 山阳县| 华亭县| 凤冈县| 南涧| 定日县| 疏附县| 赫章县| 卢氏县| 翁牛特旗| 灵寿县| 青海省| 荥经县| 永兴县| 阜新| 宜州市| 友谊县| 托克逊县| 广德县| 永靖县| 汤阴县| 西和县| 阿拉善左旗| 资兴市| 阿克陶县| 公主岭市| 新泰市|