找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1652|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于DY-mini80單片機(jī)學(xué)習(xí)板的數(shù)碼管時(shí)鐘電路的設(shè)計(jì)資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:372760 發(fā)表于 2018-7-18 12:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1.時(shí)鐘電路硬件設(shè)計(jì):
圖1  89S51電路圖
圖 2   8位共陰極數(shù)碼管與鎖存器的連接
圖3  獨(dú)立鍵盤與矩陣鍵盤[1]

              本實(shí)驗(yàn)用到前6個(gè)數(shù)碼管(P2.2~P2.0取000~101)和第一個(gè)按鈕開關(guān)(P3.0)。P0口輸出數(shù)碼管數(shù)據(jù),鎖存器直通[2]。

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

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




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表