• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      AT89C2051制電子鐘時鐘源程序
      文章長度[35967] 加入時間[2006/7/1] 更新時間[2025/6/29 18:56:21] 級別[3] [評論] [收藏]


        本程序來自于互聯網,站長尚沒試驗,但是,該程序給出了詳細的說明,相信對大家很有幫助!因此,站長向原作者表示真誠謝意!
      按此在新窗口瀏覽圖片。

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;           AT89C2051時鐘程序         ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ;
      ;  定時器T0、T1溢出周期為50MS,T0為秒計數用, T1為調整時閃爍用,
      ;   P3.7為調整按鈕,P1口 為字符輸出口,采用共陽顯示管。
      ;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;           中斷入口程序              ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
                    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           ;
             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共陽數碼管顯示,P1口輸出段碼數據,P3口作
      ; 掃描控制,每個LED數碼管亮1MS時間再逐位循環。
                DISPLAY: MOV            R1,#70H       ;指向顯示數據首址
                         MOV            R5,#0FEH      ;掃描控制字初值
                   PLAY: MOV            A,R5          ;掃描字放入A
                         MOV            P3,A          ;從P3口輸出
                         MOV            A,@R1         ;取顯示數據到A
                         MOV            DPTR,#TAB     ;取段碼表地址
                         MOVC            A,@A+DPTR     ;查顯示數據對應段碼
                         MOV            P1,A          ;段碼放入P1口
                         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      P3.5            ;一次顯示結束,P3口復位
                         MOV             P1,#0FFH       ;P1口復位
                         RET                      ;子程序返回
                   TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
      ;共陽段碼表          "0""1""2" "3""4""5""6""7" "8""9""不亮"
      ;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;           延時程序                  ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;
      ;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、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版