單片機電子時鐘的設計

2021-01-19 multisim

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;        中斷入口程序;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H                        ;程序執行開始地址
LJMP START                       ;跳到標號START執行
ORG 0003H                        ;外中斷0中斷程序入口
RETI                                  ;外中斷0中斷返回
ORG 000BH                        ;定時器T0中斷程序入口
LJMP INTT0                       ;跳至INTTO執行
ORG 0013H                        ;外中斷1中斷程序入口
RETI                         ;外中斷1中斷返回
ORG 001BH                      ;定時器T1中斷程序入口
LJMP INTT1                       ;跳至INTT1執行
ORG 0023H                      ;串行中斷程序入口地址
RETI                                  ;串行中斷程序返回
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
   START: MOV   R0,#70H  ;清70H-7AH共11個內存單元
                   MOV   R7,#0BH
                     ;clr     P3.7                         ;
       CLEARDISP: MOV   @R0,#00H          ;
                   INC    R0               ;
                   DJNZ   R7,CLEARDISP   ;
                   MOV   20H,#00H       ;清20H(標誌用)
                   MOV   7AH,#0AH       ;放入"熄滅符"數據
                   MOV    TMOD,#11H     ;設T0、T1為16位定時器
                   MOV   TL0,#0B0H  ;50MS定時初值(T0計時用)
                   MOV   TH0,#3CH        ;50MS定時初值
                   MOV   TL1,#0B0H         ;50MS定時初值(T1閃爍定時用)
                   MOV   TH1,#3CH         ;50MS定時初值
                   SETB   EA              ;總中斷開放
                   SETB   ET0             ;允許T0中斷
                   SETB   TR0             ;開啟T0定時器
                   MOV   R4,#14H          ;1秒定時用初值(50MS×20)
           START1: LCALL  DISPLAY      ;調用顯示子程序
                   JNB     P3.7,SETMM1      ;P3.7口為0時轉時間調整程序  
                   SJMP   START1           ;P3.7口為1時跳回START1
            SETMM1:      LJMP  SETMM    ;轉到時間調整程序SETMM
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         1秒計時程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務程序
            INTT0: PUSH   ACC          ;累加器入棧保護
                   PUSH   PSW           ;狀態字入棧保護
                   CLR    ET0            ;關T0中斷允許
                   CLR    TR0            ;關閉定時器T0
                  MOV   A,#0B7H   ;中斷響應時間同步修正
                   ADD    A,TL0          ;低8位初值修正
                  MOV   TL0,A   ;重裝初值(低8位修正值)
                   MOV   A,#3CH         ;高8位初值修正
                   ADDC   A,TH0          ;
               MOV    TH0,A   ;重裝初值(高8位修正值)
                   SETB   TR0            ;開啟定時器T0
             DJNZ   R4, OUTT0    ;20次中斷未到中斷退出
           ADDSS: MOV     R4,#14H          ;20次中斷到(1秒)重賦初值
                   MOV    R0,#71H          ;指向秒計時單元(71H-72H)
                   ACALL  ADD1           ;調用加1程序(加1秒操作)
                   MOV   A,R3             ;秒數據放入A(R3為2位十進位數組合)
                   CLR     C                ;清進位標誌
                   CJNE   A,#60H,ADDMM    ;
           ADDMM: JC     OUTT0   ;小於60秒時中斷退出
                   ACALL  CLR0             ;大於或等於60秒時對秒計時單元清0
                   MOV   R0,#77H           ;指向分計時單元(76H-77H)
                   ACALL  ADD1           ;分計時單元加1分鐘
                   MOV    A,R3              ;分數據放入A
                   CLR    C                 ;清進位標誌
                   CJNE  A,#60H,ADDHH      ;
            ADDHH: JC    OUTT0  ;小於60分時中斷退出
                   ACALL  CLR0              ;大於或等於60分時分計時單元清0
                   MOV    R0,#79H           ;指向小時計時單(78H-79H)
                   ACALL  ADD1       ;小時計時單元加1小時
                   MOV   A,R3              ;時數據放入A
                   CLR    C                 ;清進位標誌
                   CJNE   A,#24H,HOUR       ;
             HOUR: JC     OUTT0 ;小於24小時中斷退出
                   ACALL  CLR0              ;大於或等於24小時小時計時單元清0
            OUTT0: MOV   72H,76H           ;中斷退出時將分、時計時單元數據移
                   MOV   73H,77H           ;入對應顯示單元
                   MOV   74H,78H           ;
                   MOV   75H,79H           ;
                   POP     PSW            ;恢復狀態字(出棧)
                   POP    ACC               ;恢復累加器
                   SETB   ET0               ;開放T0中斷
                   RETI                    ;中斷返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;      閃動調時 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中斷服務程序,用作時間調整時調整單元閃爍指示
INTT1:          PUSH    ACC                ;中斷現場保護
                PUSH    PSW                ;
              MOV     TL1,   #0B0H  ;裝定時器T1定時初值
                MOV     TH1,   #3CH         ;
                DJNZ    R2,INTT1OUT         ;0.3秒未到退出中斷(50MS中斷6次)
                MOV     R2,#06H ;重裝0.3秒定時用初值
                CPL     02H  ;0.3秒定時到對閃爍標誌取反
                JB       02H,FLASH1           ;02H位為1時顯示單元"熄滅"
                MOV     72H,76H ;02H位為0時正常顯示
                MOV     73H,77H             ;
                MOV     74H,78H             ;
                MOV     75H,79H             ;
INTT1OUT:      POP     PSW              ;恢復現場
                POP     ACC                 ;
                RETI                         ;中斷退出
FLASH1:        JB      01H,FLASH2          ;01H位為1時,轉小時熄滅控制
                MOV     72H,7AH            ;01H位為0時,"熄滅符"數據放入分
                MOV     73H,7AH            ;顯示單元(72H-73H),將不顯示分數據
                MOV     74H,78H             ;
                MOV     75H,79H             ;
                AJMP    INTT1OUT           ;轉中斷退出
FLASH2:        MOV     72H,76H             ;01H位為1時,"熄滅符"數據放入小時
                MOV     73H,77H             ;顯示單元(74H-75H),小時數據將不顯示
                MOV     74H,7AH       ;
                MOV     75H,7AH       ;
                AJMP    INTT1OUT      ;轉中斷退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;       加1子 程 序  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
             ADD1: MOV   A,@R0       ;取當前計時單元數據到A
                   DEC    R0          ;指向前一地址
                   SWAP  A   ;A中數據高四位與低四位交換
                   ORL    A,@R0       ;前一地址中數據放入A中低四位
                   ADD   A,#01H      ;A加1操作
                   DA     A           ;十進位調整
                   MOV  R3,A        ;移入R3寄存器
                   ANL    A,#0FH      ;高四位變0
                   MOV   @R0,A       ;放回前一地址單元
                   MOV   A,R3        ;取回R3中暫存數據
                   INC    R0          ;指向當前地址單元
                  SWAP   A    ;A中數據高四位與低四位交換
                   ANL    A,#0FH      ;高四位變0
                   MOV   @R0,A  ;數據放入當削地址單元中
                   RET                ;子程序返回
   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           清零程序  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;對計時單元復零用
             CLR0: CLR    A           ;清累加器
                   MOV    @R0,A       ;清當前地址單元
                   DEC     R0          ;指向前一地址
                   MOV    @R0,A       ;前一地址單元清0
                   RET                  ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         時鐘調整程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;當調時按鍵按下時進入此程序
           SETMM:  cLR     ET0            ;關定時器T0中斷
                    CLR     TR0            ;關閉定時器T0
                    LCALL   DL1S           ;調用1秒延時程序
                    JB      P3.7,CLOSEDIS  ;鍵按下時間小於1秒,關閉顯示(省電)
                   MOV     R2,#06H        ;進入調時狀態,賦閃爍定時初值
                   SETB     ET1            ;允許T1中斷
                   SETB     TR1           ;開啟定時器T1
            SET2:  JNB     P3.7,SET1      ;P3.7口為0(鍵未釋放),等待
                   SETB     00H            ;鍵釋放,分調整閃爍標誌置1
            SET4:  JB       P3.7,SET3      ;等待鍵按下
                   LCALL    DL05S          ;有鍵按下,延時0.5秒
                   JNB      P3.7,SETHH     ;按下時間大於0.5秒轉調小時狀態
                   MOV    R0,#77H        ;按下時間小於0.5秒加1分鐘操作
                   LCALL   ADD1           ;調用加1子程序
                   MOV    A,R3           ;取調整單元數據
                   CLR     C              ;清進位標誌
                   CJNE    A,#60H,HHH     ;調整單元數據與60比較
              HHH: JC      SET4           ;調整單元數據小於60轉SET4循環
                   LCALL   CLR0           ;調整單元數據大於或等於60時清0
                   CLR     C              ;清進位標誌
                   AJMP    SET4           ;跳轉到SET4循環
        CLOSEDIS:  SETB   ET0            ;省電(LED不顯示)狀態。開T0中斷
                   SETB    TR0            ;開啟T0定時器(開時鐘)
        CLOSE:     JB      P3.7,CLOSE     ;無按鍵按下,等待。
                   LCALL   DISPLAY       ;有鍵按下,調顯示子程序延時削抖
                   JB       P3.7,CLOSE     ;是幹擾返回CLOSE等待
        WAITH:     JNB     P3.7,WAITH     ;等待鍵釋放
                   LJMP    START1         ;返回主程序(LED數據顯示亮)
           SETHH:  CLR    00H            ;分閃爍標誌清除(進入調小時狀態)
          SETHH1:  JNB    P3.7,SET5       ;等待鍵釋放
                   SETB    01H            ;小時調整標誌置1
            SET6:  JB       P3.7,SET7      ;等待按鍵按下
                   LCALL    DL05S          ;有鍵按下延時0.5秒
                   JNB      P3.7,SETOUT    ;按下時間大於0.5秒退出時間調整
                   MOV    R0,#79H        ;按下時間小於0.5秒加1小時操作
                   LCALL   ADD1           ;調加1子程序
                   MOV    A,R3            ;
                   CLR     C              ;
                   CJNE     A,#24H,HOUU    ;計時單元數據與24比較
            HOUU: JC      SET6          ;小於24轉SET6循環
                   LCALL   CLR0    ;大於或等於24時清0操作
                   AJMP    SET6             ;跳轉到SET6循環
           SETOUT: JNB     P3.7,SETOUT1     ;調時退出程序。等待鍵釋放
                   LCALL   DISPLAY          ;延時削抖
                   JNB     P3.7,SETOUT      ;是抖動,返回SETOUT再等待
                   CLR     01H              ;清調小時標誌
                   CLR     00H              ;清調分標誌
                   CLR     02H              ;清閃爍標誌
                   CLR     TR1              ;關閉定時器T1
                   CLR     ET1              ;關定時器T1中斷
                   SETB     TR0              ;開啟定時器T0
                   SETB     ET0              ;開定時器T0中斷(計時開始)
                   LJMP     START1           ;跳回主程序
            SET1:  LCALL   DISPLAY          ;鍵釋放等待時調用顯示程序(調分)
                   AJMP     SET2             ;防止鍵按下時無時鐘顯示
            SET3:  LCALL   DISPLAY          ;等待調分按鍵時時鐘顯示用
                   AJMP     SET4
            SET5:  LCALL    DISPLAY          ;鍵釋放等待時調用顯示程序(調小時)
                   AJMP     SETHH1           ;防止鍵按下時無時鐘顯示
            SET7:  LCALL    DISPLAY          ;等待調小時按鍵時時鐘顯示用
                   AJMP     SET6
         SETOUT1:  LCALL   DISPLAY          ;退出時鐘調整時鍵釋放等待
                    AJMP    SETOUT           ;防止鍵按下時無時鐘顯示
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           顯示程序  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 顯示數據在70H-75H單元內,用六位LED共陽數碼管顯示,P0口輸出段碼數據,P3口作
; 掃描控制,每個LED數碼管亮1MS時間再逐位循環。
          DISPLAY: MOV      R1,#70H         ;指向顯示數據首址
                   MOV      R5,#0FEH        ;掃描控制字初值
             PLAY: MOV      A,R5             ;掃描字放入A
                   MOV      P2,A             ;從P2口輸出
                   MOV      A,@R1           ;取顯示數據到A
                   MOV      DPTR,#TAB       ;取段碼錶地址
                   MOVC     A,@A+DPTR     ;查顯示數據對應段碼
                   MOV      P1,A             ;段碼放入P0口
                   LCALL     DL1MS           ;顯示1MS
                   INC       R1               ;指向下一地址
                   MOV      A,R5              ;掃描控制字放入A
                   JNB       ACC.5,ENDOUT    ;ACC.5=0時一次顯示結束
                   RL        A                ;A中數據循環左移
                   MOV     R5,A             ;放回R5內
                   AJMP      PLAY             ;跳回PLAY循環
           ENDOUT: SETB     P2.5              ;一次顯示結束,P2口復位
                   MOV     P1,#0FFH         ;P0口復位
                   RET                       ;子程序返回
             TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;1MS延時程序,LED顯示程序用
             DL1MS: MOV    R6,#14H
             DL1:   MOV     R7,#19H
             DL2:   DJNZ    R7,DL2
                    DJNZ     R6,DL1
                    RET
;20MS延時程序,採用調用顯示子程序以改善LED的顯示閃爍現象
           DS20MS: ACALL                 DISPLAY
                   ACALL                  DISPLAY
                   ACALL                  DISPLAY
                   RET
;延時程序,用作按鍵時間的長短判斷
           DL1S:   LCALL           DL05S
                   LCALL           DL05S
                   RET
          DL05S:   MOV            R3,#20H       ;8毫秒*32=0.196秒
          DL05S1:  LCALL          DISPLAY
                   DJNZ            R3,DL05S1
                   RET
                   END                          ;程序結束

相關焦點

  • 電子時鐘設計
    :(1) 使用8051單片機片內定時器設計一個簡易時鐘。(2) 使用8位LED對測量結果進行顯示1)確定系統設計方案;2)進行系統的硬體設計;3)完成必要的參數計算與元器件選擇;4)完成應用程式設計;5)進行軟硬體調試;(3) 能通過鍵盤對對時鐘設計內容與設計要求進行實時調整。
  • 單片機時鐘設計
    X1226具有時鐘和日曆的功能,時鐘依賴時、分、秒寄存器來跟蹤,日曆依賴日期、星期、月和年寄存器來跟蹤,日曆可正確顯示至2099年,並具有自動閏年修正功能。擁有強大的雙報警功能,能夠被設置到任何時鐘/日曆值上,精確度可到1秒。可用軟體設置1Hz、4096Hz或32768Hz中任意一個頻率輸出。
  • 單片機3種時鐘電路方案對比
    作為單片機研發設計的項目,它的最小電路工作系統包含電源電路、復位電路、時鐘頻率電路;其中電源電路與復位電路,相信工程師都非常容易理解與設計。然而時鐘頻率電路,由於不同的開發項目功能需求不一樣,設計的方案選擇也不盡相同,很難得到有效的統一設計。
  • 單片機裡的時鐘源有什麼不同
    打開APP 單片機裡的時鐘源有什麼不同 英銳恩 發表於 2020-06-29 14:33:32   振蕩器由晶振、電容、電阻組成
  • AT89C51單片機數字電子鐘的設計
    一、 設計目的與要求設計目的:通過設計,培養運用已學知識解決實際問題的能力、查閱資料的能力、自學能力和獨立分析問題、解決問題的能力和能通過獨立思考。設計要求:設計一個時、分可調的數字電子鐘、斷電後將數據保存,開啟後時間將從斷電後時間繼續行走。二、 設計內容與方案制定具有校時功能,按鍵控制電路其中時鍵、分鍵六個鍵分別控制時、分時間的調整。
  • 跟電師傅學單片機(5):時鐘電路與復位電路
    百家號:電師傅,專門請電師傅講解單片機應用技術,傾力奉獻,機會難得,力求做到圖文並茂、通俗易懂。歡迎電工電子愛好者關注和閱讀,留言討論,共同學習與提高,分享和普及電知識。課前一語:人生如逆旅,我亦是行人。駕馭命運的舵是奮鬥,不抱有一絲幻想,不放棄一點機會,不停止一日努力。
  • STC89C52單片機對數字溫度計顯示系統的設計
    硬體電路主要包括STC89C52單片機最小系統,測溫電路、實時時鐘電路、數碼管顯示電路以及通訊模塊電路等。系統程序主要包括主程序,讀出溫度子程序,計算溫度子程序、數碼管顯示程序以及按鍵控制程序等。 一、溫度顯示系統總設計原理 系統設計總框架如圖1.
  • 單片機應用系統的可靠性設計
    單片機應用系統的設計包括功能性設計、可靠性設計和產品化設計。其中,功能性是基礎,可靠性是保障,產品化是前途。因此,從事單片機應用系統開發工作的設計人員必須掌握可靠性設計。 一、可靠性與可靠性設計 1.現代電子系統的可靠性 現代電子系統具有如下特點:嵌入式的計算機系統.智能化的體系結構;以計算機為核心的柔性硬體基礎,由軟體實現系統的功能;硬體系統有微電子技術的有力支持。
  • 單片機的時鐘與振蕩源
    幾種常見的時鐘電路1、外置晶振+內置振蕩器,這種電路的頻率誤差一般在百萬分之幾,適合於需要做實時時鐘或精準定時的系統。3、RC振蕩電路,這種電路的頻率會受溫度、電壓、器件參數誤差等諸多因素的影響,一般誤差在10%左右;但電路簡單、價格低;另外它能在低溫度環境下起振,常被集成在單片機內部,因些有時為了節約I/O口時,常選用內部RC時鐘源。4、外部直接給時鐘輸入,這種方式比較少用到(可能用在多CPU的頻率同步場合吧)。
  • pic單片機學習教材(一):接口設計
    PIC單片機(Peripheral Interface Controller)是一種用來開發去控制外圍設備的集成電路(IC)。現在PIC單片機應用領域已經相當廣泛,為了方便廣大工程師能夠很好的學習 PIC單片機,電子發燒友網整理了PIC單片機的相關知識應用,現在先帶您學習下PIC單片機在接口設計中的應用吧。
  • 單片機電子鐘設計
    這裡給大家介紹一個51單片機電子鐘彙編程序設計方法:org 00ha_bit equ 30h ;秒寄存器b_bit equ 31h ;10秒寄存器c_bit equ 32h ;分寄存器d_bit equ 33h ;10分寄存器e_bit equ 34h ;小時寄存器f_bit equ 35h ;10小時集存器
  • 《電子發燒友網51單片機設計方案TOP10》
    隨著Flash rom技術的發展,它也得到了不斷的發展,廣泛應用於工業測控系統中ATMEL公司的AT89系列,是8031單片機中最有代表性的型號。51單片機是基礎入門的一個單片機,也是應用最廣泛的一種,在目前乃至今後很長的一段時問內。51系列的兼容機型都將佔有大量的市場。   控制系統傳統的設計思想和設計方法,因51單片機的應用從根本上得到了改變。
  • 基於51單片機的TFT液晶顯示設計
    用51單片機驅動液晶模塊通常都使用1602和12864等極為簡單的液晶模塊, 這裡介紹用51單片機驅動QVGA解析度的TFT液晶模塊, 以實現彩色和更為複雜的內容顯示的方法。同時, 本文還將使用DS1302晶片和DS18B20晶片來實現在液晶屏上顯示實時時鐘和溫度。
  • 51單片機指令周期,機器周期,時鐘周期詳解
    51單片機有指令周期,機器周期,時鐘周期的說法,看似相近,但是又都不太一樣,很容易混淆。還是詳細分析一下。本文引用地址:http://www.eepw.com.cn/article/201609/310558.htm  時鐘周期:單片機外接的晶振的振蕩周期就是時鐘周期,時鐘周期=振蕩周期。比方說,80C51單片機外接了一個11.0592M的晶體振蕩器,那我們就說這個單片機系統的時鐘周期是1/11.0592M,這裡要注意11.0592M是頻率,周期是頻率的倒數。
  • 基於單片機的正弦信號發生器的設計
    基於單片機的正弦信號發生器的設計 秩名 發表於 2012-07-31 11:42:14   摘 要:本系統採用AT89S51單片機為核心,輔以必要的模擬,數字電路,構成了一個基於
  • 單片機實現步進電機控制系統設計的方法
    2 系統硬體電路設計 2.1 單片機模塊 單片機模塊主要由32  kHz晶振給單片機、鍵盤/顯示接口器件8279和脈衝分配器PMM8713提供時鐘;當採用USART模塊時需開啟8MHz晶振設置通信模塊。圖2為單片機模塊結構框圖。
  • 6位LED顯示單片機控制電子鐘/計數器
    這是我們設計的單片機電子鐘/計時器學習板,它採用6位LED數碼管顯示時、分、秒,以24小時計時方式。可以通過按鍵實現時分調整、秒表/時鐘功能轉換、省電(關閉顯示)等功能。51單片機做的電子鐘在很多地方都有介紹, 對於單片機學習者來說這個程序基本上是一道門檻,掌握了電子鐘程序, 基本上可以說51單片機就掌握了80%。常見的電子鐘程序由顯示部分、計算部分、時鐘調整部分構成,本產品硬體上完全支持倒計時器,客戶只要自己修改程序就能實現倒計時功能。
  • 電子工程師自學速成——單片機技術和電路繪圖設計
    【您還可以試著發送:「ARM、PCB、STM32、汽車電子、機器人、電源、電機、嵌入式、信號系統、模電、華為、哈佛、Python、電子學、視頻教程、660、開關電源、機電、電路、c語言、linux、FPGA、仿真、培訓資料、CAN、
  • AT89S51單片機的復位操作及復位電路設計
    打開APP AT89S51單片機的復位操作及復位電路設計 發表於 2019-04-26 16:24:25 復位是單片機的初始化操作,只需給AT89S51的復位引腳RST加上大於2個機器周期(即24個時鐘振蕩周期)的高電平就可使AT89S51復位。
  • 基於單片機STC2032的電子鐘設計方案
    基於單片機STC2032的電子鐘設計方案