欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 基于DY-mini80單片機學習板的數碼管時鐘電路的設計資料 [打印本頁]

作者: ruify_lee    時間: 2018-7-18 12:21
標題: 基于DY-mini80單片機學習板的數碼管時鐘電路的設計資料
1.時鐘電路硬件設計:
圖1  89S51電路圖
圖 2   8位共陰極數碼管與鎖存器的連接
圖3  獨立鍵盤與矩陣鍵盤[1]

              本實驗用到前6個數碼管(P2.2~P2.0取000~101)和第一個按鈕開關(P3.0)。P0口輸出數碼管數據,鎖存器直通[2]。

2.系統主要程序設計:
              (1).主程序
              本設計中的計時采用定時器T0中斷完成,其余狀態循環調用顯示子程序,當P3.0開關按下時,轉入調時功能程序。系統主程序流程圖如圖4所示:
              (2).顯示子程序
              數碼管顯示的數據存放在內存單元70H~75H中,其中70H~71H存放的秒數據,72H~73H存放的分數據,74H~75H存放的時數據,每一地址單元內均為十進制BCD碼。由于采用軟件動態掃描實現數據顯示功能,顯示用十進制BCD碼數據的對應段碼數據存放在ROM表中。顯示時,先取出70H~75H某一地址中的數據,然后查得對應的顯示用段碼從P0口輸出。P2口將對應的數碼管選中,就能顯示該地址單元的數據值。
              (3).定時器T0中斷服務程序
              定時器T0用于時間計時。定時溢出中斷周期設為50ms,中斷累計20次(即1s)時對秒計數單元進行加1操作。時間計數單元地址分別在70H~71H(s)、76H~77H(min)、78H~79H(h),7AH單元中存放“熄滅符”數據(#0AH)。在計數單元中采用十進制BCD碼計數,滿60進位。T0中斷服務程序流程圖見圖5所示。
              (4).T1中斷服務程序
              T1中斷服務程序用于指示調整單元數字的亮閃。在時間調整狀態下,每過0.3s,將對應單元的數據換成“熄滅符”數據(#0AH)。這樣,在調整時間時,對應調整單元的顯示數據就會間隔閃亮。
              (5).調時功能程序
              調時功能程序的設計方法是:按下按鍵,若按下時間小于1s,進入省電狀態(數碼管不亮,時鐘不停),否則進入調分狀態,等待操作,此時定時器停止走動。當再次按下按鈕時,若按下時間小于0.5s,則時間加1min;若按下時間大于0.5s,則進入小時調整狀態。在小時調整狀態下,當按鍵按下的時間大于0.5s時退出調整狀態,時鐘繼續走動。
圖4  主程序流程圖
圖5  T0中斷服務程序
4.實驗總結:
                            1.實驗中使用的是12MHz晶振;
                            2.數碼管使用動態掃描顯示;
                            3.操作都要先等待按鍵釋放后才做相應;
                            4.按鍵按下時間長短判斷:在兩次監測鍵是否按下語句中間夾一條延時語句(類似于按鍵消抖動)。
                            5.按鍵釋放等待時應一直調用顯示子程序,防止鍵按下時無時鐘顯示。
                            6.適當設置標志位對程序的設計很重要。例如:本例中設置了20H做標志位,其中00H、01H、02H(即20H.0、20H.1、20H.2)分別做調分標志、調時標志、閃爍標志;只要監測標志位既能方便對應出不同響應。
                            7.本例中ADD1子程序(即BCD碼加1子程序)。其入口參數是R0,它作為指針指向待加1的兩位BCD碼的高位;出口參數為R3,存放著加1后的BCD碼值。
3.數碼管時鐘電路源程序代碼
  1.               ORG 0000H        ;程序執行開始地址
  2.               LJMP      START  ;跳到標號START執行
  3.               ORG 0003H        ;外中斷0中斷程序入口
  4.               RETI             ;外中斷0中斷返回
  5.               ORG 000BH        ;定時器T0中斷程序入口
  6.               LJMP      INTT0  ;跳至INTTO執行
  7.               ORG 0013H        ;外中斷1中斷程序入口
  8.               RETI             ;外中斷1中斷返回
  9.               ORG 001BH        ;定時器T1中斷程序入口
  10.               LJMP      INTT1              ;跳至INTT1執行
  11.               ORG 0023H        ;串行中斷程序入口地址
  12.               RETI             ;串行中斷程序返回
  13. ;*******************************************************
  14. START:               MOV   SP,#30H
  15.         MOV   PSW,#00H
  16.               MOV   R0,#70H                    ;清70H-7AH共11個內存單元
  17.               MOV   R7,#0BH                    ;
  18. CLEAR:  MOV   @R0,#00H                    ;
  19.               INC   R0                            ;
  20.               DJNZ  R7,CLEAR                 ;
  21.               MOV   20H,#00H                            ;標志位
  22.               MOV   7AH,#0AH                            ;放入"熄滅符"數據
  23.               MOV   TMOD,#11H                    ;設T0、T1為16位定時器
  24.               MOV   TL0,#0B0H                 ;50MS定時初值(T0計時用)
  25.               MOV   TH0,#3CH                 ;50MS定時初值
  26.         MOV   TL1,#0B0H                 ;50MS定時初值(T1閃爍定時用)
  27.         MOV   TH1,#3CH                  ;50MS定時初值            
  28.               SETB  EA                           ;總中斷開放
  29.               SETB  ET0                          ;允許T0中斷
  30.               SETB  TR0                          ;開啟T0定時器
  31.               MOV   R4,#14H                      ;1秒定時用初值(50MS×20)
  32. START1: LCALL DISPLAY                      ;調用顯示子程序
  33.               JNB   P3.0,SETMM1              ;P3.0口為0時轉時間調整程序
  34.               SJMP  START1                      ;
  35. SETMM1: LJMP  SETMM                   ;轉到時間調整程序SETMM
  36. ;*********************************************************
  37. INTT0:               PUSH  ACC           ;累加器入棧保護
  38.               PUSH  PSW           ;狀態字入棧保護
  39.               CLR   ET0           ;關T0中斷允許
  40.               CLR   TR0           ;關閉定時器T0
  41.               MOV   A,#0B7H       ;中斷響應時間同步修正
  42.               ADD   A,TL0         ;低8位初值修正
  43.               MOV   TL0,A         ;重裝初值(低8位修正值)
  44.               MOV   A,#3CH        ;高8位初值修正
  45.               ADDC  A,TH0         ;
  46.               MOV   TH0,A         ;重裝初值(高8位修正值)
  47.               SETB  TR0           ;開啟定時器T0,后面再開放中斷允許
  48.               DJNZ  R4, OUTT0         ;20次中斷未到中斷退出
  49. ADDSS:  MOV   R4,#14H           ;20次中斷到(1秒)重賦初值
  50.               MOV   R0,#71H           ;指向秒計時單元(71H-72H)
  51.               ACALL ADD1              ;調用加1程序(加1秒操作)
  52.               MOV   A,R3              ;秒數據放入A(R3為2位十進制數組合)
  53.               CLR   C                 ;清進位標志
  54.               CJNE  A,#60H,ADDMM      ;
  55. ADDMM:  JC    OUTT0             ;小于60秒時中斷退出
  56.               ACALL CLR0              ;大于或等于60秒時對秒計時單元清0
  57.               MOV   R0,#77H           ;指向分計時單元(76H-77H)
  58.               ACALL ADD1              ;分計時單元加1分鐘
  59.               MOV   A,R3              ;分數據放入A
  60.               CLR   C                 ;清進位標志
  61.               CJNE  A,#60H,ADDHH      ;
  62. ADDHH:               JC    OUTT0             ;小于60分時中斷退出
  63.               ACALL CLR0              ;大于或等于60分時分計時單元清0
  64.               MOV   R0,#79H           ;指向小時計時單元(78H-79H)
  65.               ACALL ADD1              ;小時計時單元加1小時
  66.               MOV   A,R3              ;時數據放入A
  67.               CLR   C                 ;清進位標志
  68.               CJNE  A,#24H,HOUR       ;
  69. HOUR:               JC    OUTT0             ;小于24小時中斷退出
  70.               ACALL CLR0              ;大于或等于24小時小時計時單元清0
  71. OUTT0:               MOV   72H,76H           ;中斷退出時將分、時計時單元數據移
  72.         MOV   73H,77H           ;入對應顯示單元
  73.         MOV   74H,78H           ;
  74.         MOV   75H,79H           ;
  75.               POP   PSW               ;恢復狀態字(出棧)
  76.               POP   ACC               ;恢復累加器
  77.               SETB  ET0               ;開放T0中斷
  78.               RETI                    ;中斷返回
  79. ;*******************************************************
  80. INTT1:                PUSH    ACC                ;中斷現場保護
  81.                       PUSH    PSW                ;
  82.                       MOV     TL1,   #0B0H       ;裝定時器T1定時初值
  83.                       MOV     TH1,   #3CH                               ;
  84.                       DJNZ    R2,INTT1OUT                               ;0.3秒未到退出中斷(50MS中斷6次)
  85.                       MOV     R2,#06H                                   ;重裝0.3秒定時用初值
  86.                       CPL     02H                                       ;0.3秒定時到對閃爍標志取反
  87.                                    JB      02H,FLASH1                                ;02H位為1時顯示單元"熄滅"
  88.                       MOV     72H,76H       ;02H位為0時正常顯示
  89.                 MOV     73H,77H       ;
  90.                 MOV     74H,78H       ;
  91.                 MOV     75H,79H       ;
  92. INTT1OUT:       POP     PSW                       ;恢復現場
  93.                 POP     ACC           ;
  94.                 RETI                  ;中斷退出
  95. FLASH1:         JB      01H,FLASH2    ;01H位為1時,轉小時熄滅控制
  96.                 MOV     72H,7AH       ;01H位為0時,"熄滅符"數據放入分
  97.                 MOV     73H,7AH       ;顯示單元(72H-73H),將不顯示分數據
  98.                 MOV     74H,78H       ;
  99.                 MOV     75H,79H       ;
  100.                 AJMP    INTT1OUT      ;轉中斷退出
  101. FLASH2:         MOV     72H,76H       ;01H位為1時,"熄滅符"數據放入小時
  102.                 MOV     73H,77H       ;顯示單元(74H-75H),小時數據將不顯示
  103.                 MOV     74H,7AH       ;
  104.                 MOV     75H,7AH       ;
  105.                 AJMP    INTT1OUT      ;轉中斷退出
  106. ;**************************************************
  107. DISPLAY:MOV              R1,#75H                            ;指向顯示數據首址
  108.               MOV              R5,#00H                            ;掃描控制字初值
  109. PLAY:               MOV              A,@R1
  110.               MOV              DPTR,#TAB
  111.               MOVC              A,@A+DPTR
  112.               MOV              P0,A                            ;先放段碼入P0
  113.               MOV              A,R5                            ;掃描字放入A
  114.               MOV              P2,A                            ;掃描字放入掃描控制端口
  115.               LCALL              DL1MS                            ;1MS子程序另編
  116.               MOV              A,R1
  117.               CLR              C
  118.               SUBB              A,#01H
  119.               MOV              R1,A
  120.               INC              R5
  121.               CJNE              R5,#06,PLAY
  122.               MOV              P0,#00H                            ;P0段碼輸出口復位
  123.               MOV              P2,#0FFH              ;一次顯示結束P2掃描控制口復位
  124.               RET
  125. TAB:               DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH,00H
  126. ;*****************************************************
  127. ADD1:               MOV                 A,@R0       ;取當前計時單元數據到A
  128.               DEC                 R0          ;指向前一地址
  129.               SWAP                A           ;A中數據高四位與低四位交換
  130.               ORL               A,@R0       ;前一地址中數據放入A中低四位
  131.               ADD              A,#01H      ;A加1操作
  132.               DA               A           ;十進制調整
  133.               MOV                 R3,A        ;移入R3寄存器
  134.               ANL               A,#0FH      ;高四位變0
  135.               MOV               @R0,A       ;放回前一地址單元
  136.               MOV              A,R3        ;取回R3中暫存數據
  137.               INC              R0          ;指向當前地址單元
  138.               SWAP              A           ;A中數據高四位與低四位交換
  139.               ANL               A,#0FH      ;高四位變0
  140.               MOV              @R0,A       ;數據放入當削地址單元中
  141.               RET                  ;子程序返回
  142. ;**************************************************
  143.               CLR0:                             CLR A           ;清累加器
  144.               MOV                             @R0,A                     ;清當前地址單元
  145.               DEC                             R0                        ;指向前一地址
  146.               MOV                             @R0,A                     ;前一地址單元清0
  147.               RET                                    ;子程序返回
  148. ;**************************************************
  149.            SETMM:  CLR                ET0            ;關定時器T0中斷
  150.                    CLR                TR0            ;關閉定時器T0
  151.                    LCALL                DL1S           ;調用1秒延時程序
  152.                    JB                              P3.0,CLOSEDIS  ;鍵按下時間小于1秒,關閉顯示(省電)
  153.                    MOV                R2,#06H        ;進入調時狀態,賦閃爍定時初值
  154.                    SETB               ET1            ;允許T1中斷
  155.                    SETB               TR1            ;開啟定時器T1
  156.             SET2:  JNB                             P3.0,SET1      ;P3.0口為0(鍵未釋放),等待
  157.                    SETB                00H            ;鍵釋放,分調整閃爍標志置1
  158.             SET4:  JB                              P3.0,SET3      ;等待鍵按下
  159.                    LCALL                 DL05S          ;有鍵按下,延時0.5秒
  160.                    JNB                  P3.0,SETHH     ;按下時間大于0.5秒轉調小時狀態
  161.                    MOV                             R0,#77H        ;按下時間小于0.5秒加1分鐘操作
  162.                    LCALL               ADD1           ;調用加1子程序
  163.                    MOV                             A,R3           ;取調整單元數據
  164.                    CLR                             C              ;清進位標志
  165.                    CJNE               A,#60H,HHH     ;調整單元數據與60比較
  166.               HHH: JC                             SET4           ;調整單元數據小于60轉SET4循環
  167.                    LCALL               CLR0           ;調整單元數據大于或等于60時清0
  168.                    CLR                             C              ;清進位標志
  169.                    AJMP                SET4           ;跳轉到SET4循環
  170.         CLOSEDIS:  SETB               ET0           ;省電(LED不顯示)狀態。開T0中斷
  171.                    SETB               TR0           ;開啟T0定時器(開時鐘)
  172.         CLOSE:     JB                 P3.0,CLOSE    ;無按鍵按下,等待。
  173.                    LCALL              DISPLAY       ;有鍵按下,調顯示子程序延時削抖
  174.                    JB                  P3.0,CLOSE     ;是干擾返回CLOSE等待
  175.         WAITH:     JNB                 P3.0,WAITH     ;等待鍵釋放
  176.                    LJMP                START1         ;返回主程序(LED數據顯示亮)
  177.            SETHH:  CLR                00H           ;分閃爍標志清除(進入調小時狀態)
  178.           SETHH1:  JNB                             P3.0,SET5      ;等待鍵釋放
  179.                    SETB         01H            ;小時調整標志置1
  180.             SET6:  JB                              P3.0,SET7      ;等待按鍵按下
  181.                    LCALL                 DL05S          ;有鍵按下延時0.5秒
  182.                    JNB                  P3.0,SETOUT    ;按下時間大于0.5秒退出時間調整
  183.                    MOV                            R0,#79H       ;按下時間小于0.5秒加1小時操作
  184.                    LCALL               ADD1            ;調加1子程序
  185.                    MOV                            A,R3            ;
  186.                    CLR                             C                ;
  187.                    CJNE               A,#24H,HOUU      ;計時單元數據與24比較
  188.             HOUU:  JC                             SET6             ;小于24轉SET6循環
  189.                    LCALL               CLR0             ;大于或等于24時清0操作
  190.                    AJMP                SET6             ;跳轉到SET6循環
  191.            SETOUT: JNB                 P3.0,SETOUT1     ;調時退出程序。等待鍵釋放
  192.                    LCALL               DISPLAY          ;延時削抖
  193.                    JNB                 P3.0,SETOUT      ;是抖動,返回SETOUT再等待
  194.                    CLR                 01H              ;清調小時標志
  195.                    CLR                 00H              ;清調分標志
  196.                    CLR                 02H              ;清閃爍標志
  197.                    CLR                 TR1              ;關閉定時器T1
  198.                    CLR                 ET1              ;關定時器T1中斷
  199.                    SETB                TR0              ;開啟定時器T0
  200.                    SETB                ET0              ;開定時器T0中斷(計時開始)
  201.                    LJMP               START1           ;跳回主程序
  202.             SET1:  LCALL    DISPLAY          ;鍵釋放等待時調用顯示程序(調分)
  203.                    AJMP     SET2             ;防止鍵按下時無時鐘顯示
  204.             SET3:  LCALL    DISPLAY          ;等待調分按鍵時時鐘顯示用
  205.                    AJMP     SET4
  206.             SET5:  LCALL    DISPLAY          ;鍵釋放等待時調用顯示程序(調小時)
  207.                    AJMP     SETHH1           ;防止鍵按下時無時鐘顯示
  208.             SET7:  LCALL    DISPLAY          ;等待調小時按鍵時時鐘顯示用
  209.                    AJMP     SET6
  210.          SETOUT1:  LCALL    DISPLAY          ;退出時鐘調整時鍵釋放等待
  211.                     AJMP    SETOUT           ;防止鍵按下時無時鐘顯示
  212. ;*******************************************
  213. DL1MS:              MOV              R6,#14H
  214. DL1:              MOV              R7,#19H
  215. DL2:              DJNZ              R7,DL2
  216.               DJNZ              R6,DL1
  217.               RET            
  218. ;
  219. DL1S:   LCALL      DL05S
  220.         LCALL      DL05S
  221.         RET
  222. DL05S:  MOV        R3,#2CH      ;5.76毫秒*44=0.253秒
  223. DL05S1: LCALL      DISPLAY
  224.         DJNZ       R3,DL05S1
  225.         RET
  226. ;*******************************************
  227.               END
復制代碼

完整的Word格式文檔51黑下載地址:
基于DY-mini80單片機學習板_數碼管時鐘電路的設計.doc (208.5 KB, 下載次數: 4)









歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1