<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      用單片機AT89C51設計的數字鐘,AT89C51 Digital Clock

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2018-02-22

      用單片機AT89C51設計的數字鐘,AT89C51 Digital Clock

      關鍵字:AT89C51,電子鐘電路圖,51單片機

      1.實驗任務
      (1).開機時,顯示12:00:00的時間開始計時;
      (2).P0.0/AD0控制“秒”的調整,每按一次加1秒;
      (3).P0.1/AD1控制“分”的調整,每按一次加1分;
      (4).P0.2/AD2控制“時”的調整,每按一次加1個小時;
      2.電路原理圖



      用單片機AT89C51設計的數字鐘,AT89C51 Digital Clock       


      3.系統板上硬件連線
      (1).把“單片機系統”區域中的P1.0-P1.7端口用8芯排線連接到“動態數碼顯示”區域中的A-H端口上;
      (2).把“單片機系統:區域中的P3.0-P3.7端口用8芯排線連接到“動態數碼顯示”區域中的S1-S8端口上;
      (3).把“單片機系統”區域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分別用導線連接到“獨立式鍵盤”區域中的SP3、SP2、SP1端口上;
      4.相關基本知識
      (1).動態數碼顯示的方法
      (2).獨立式按鍵識別過程
      (3).“時”,“分”,“秒”數據送出顯示處理方法
      5.程序框圖
      6.匯編源程序
      SECOND          EQU 30H
      MINITE                    EQU 31H
      HOUR            EQU 32H
      HOURK          BIT P0.0
      MINITEK        BIT P0.1
      SECONDK        BIT P0.2
      DISPBUF            EQU 40H
      DISPBIT            EQU 48H
      T2SCNTA            EQU 49H
      T2SCNTB            EQU 4AH
      TEMP              EQU 4BH
       
              ORG 00H
              LJMP START
              ORG 0BH
              LJMP INT_T0
      START:  MOV SECOND,#00H
              MOV MINITE,#00H
              MOV HOUR,#12
              MOV DISPBIT,#00H
              MOV T2SCNTA,#00H
              MOV T2SCNTB,#00H
              MOV TEMP,#0FEH
              LCALL DISP
              MOV TMOD,#01H
              MOV TH0,#(65536-2000) / 256
              MOV TL0,#(65536-2000) MOD 256
              SETB TR0
              SETB ET0
              SETB EA
      WT:    JB SECONDK,NK1
              LCALL DELY10MS
              JB SECONDK,NK1
              INC SECOND
              MOV A,SECOND
              CJNE A,#60,NS60
              MOV SECOND,#00H
      NS60:  LCALL DISP
              JNB SECONDK,$
      NK1:    JB MINITEK,NK2
              LCALL DELY10MS
              JB MINITEK,NK2
              INC MINITE
              MOV A,MINITE
              CJNE A,#60,NM60
              MOV MINITE,#00H
      NM60:  LCALL DISP
              JNB MINITEK,$
      NK2:    JB HOURK,NK3
              LCALL DELY10MS
              JB HOURK,NK3
              INC HOUR
              MOV A,HOUR
              CJNE A,#24,NH24
              MOV HOUR,#00H
      NH24:  LCALL DISP
              JNB HOURK,$
      NK3:    LJMP WT
      DELY10MS:
              MOV R6,#10
      D1:    MOV R7,#248
              DJNZ R7,$
              DJNZ R6,D1
              RET
      DISP: 
              MOV A,#DISPBUF
              ADD A,#8
              DEC A
              MOV R1,A
              MOV A,HOUR
              MOV B,#10
              p AB
              MOV @R1,A
              DEC R1
              MOV A,B
              MOV @R1,A
              DEC R1
              MOV A,#10
              MOV @R1,A
              DEC R1
              MOV A,MINITE
              MOV B,#10
              p AB
              MOV @R1,A
              DEC R1
              MOV A,B
              MOV @R1,A
              DEC R1
              MOV A,#10
              MOV @R1,A
              DEC R1
              MOV A,SECOND
              MOV B,#10
              p AB
              MOV @R1,A
              DEC R1
              MOV A,B
              MOV @R1,A
              DEC R1
              RET
      INT_T0:
              MOV TH0,#(65536-2000) / 256
              MOV TL0,#(65536-2000) MOD 256
              MOV A,#DISPBUF
              ADD A,DISPBIT
              MOV R0,A
              MOV A,@R0
              MOV DPTR,#TABLE
              MOVC A,@A+DPTR
              MOV P1,A
              MOV A,DISPBIT
              MOV DPTR,#TAB
              MOVC A,@A+DPTR
              MOV P3,A
              INC DISPBIT
              MOV A,DISPBIT
              CJNE A,#08H,KNA
              MOV DISPBIT,#00H
      KNA:    INC T2SCNTA
              MOV A,T2SCNTA
              CJNE A,#100,DONE
              MOV T2SCNTA,#00H
              INC T2SCNTB
              MOV A,T2SCNTB
              CJNE A,#05H,DONE
              MOV T2SCNTB,#00H
              INC SECOND
              MOV A,SECOND
              CJNE A,#60,NEXT
              MOV SECOND,#00H
              INC MINITE
              MOV A,MINITE
              CJNE A,#60,NEXT
              MOV MINITE,#00H
              INC HOUR
              MOV A,HOUR
              CJNE A,#24,NEXT
              MOV HOUR,#00H
      NEXT:  LCALL DISP
      DONE:  RETI
      TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
      TAB:    DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
              END

      程序:7.C語言源程序

      7.C語言源程序
      #include
      unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                                    0x66,0x6d,0x7d,0x07,
                                    0x7f,0x6f,0x77,0x7c,
                                    0x39,0x5e,0x79,0x71,0x00};
      unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                                  0xef,0xdf,0xbf,0x7f};
      unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
      unsigned char dispbitcnt;
      unsigned char second;
      unsigned char minite;
      unsigned char hour;
      unsigned int tcnt;
      unsigned char mstcnt;
      unsigned char i,j;
      void main(void)
      {
        TMOD=0x02;
        TH0=0x06;
        TL0=0x06;
        TR0=1;
        ET0=1;
        EA=1;
        while(1)
          {
            if(P0_0==0)
              {
                for(i=5;i>0;i--)
                for(j=248;j>0;j--);
                if(P0_0==0)
                  {
                    second++;
                    if(second==60)
                      {
                        second=0;
                      }
                    dispbuf[0]=second;
                    dispbuf[1]=second/10;
                    while(P0_0==0);
                  }
              }
            if(P0_1==0)
              {
                for(i=5;i>0;i--)
                for(j=248;j>0;j--);
                if(P0_1==0)
                  {
                    minite++;
                    if(minite==60)
                      {
                        minite=0;
                      }
                    dispbuf[3]=minite;
                    dispbuf[4]=minite/10;
                    while(P0_1==0);
                  }
              }
            if(P0_2==0)
              {
                for(i=5;i>0;i--)
                for(j=248;j>0;j--);
                if(P0_2==0)
                  {
                    hour++;
                    if(hour==24)
                      {
                        hour=0;
                      }
                    dispbuf[6]=hour;
                    dispbuf[7]=hour/10;
                    while(P0_2==0);
                  }
              }
          }
      }
      void t0(void) interrupt 1 using 0
      {
        mstcnt++;
        if(mstcnt==8)
          {
            mstcnt=0;
            P1=dispcode[dispbuf[dispbitcnt]];
            P3=dispbitcode[dispbitcnt];
            dispbitcnt++;
            if(dispbitcnt==8)
              {
                dispbitcnt=0;
              }
          }
        tcnt++;
        if(tcnt==4000)
          {
            tcnt=0;
            second++;
            if(second==60)
              {
                second=0;
                minite++;
                if(minite==60)
                  {
                    minite=0;
                    hour++;
                    if(hour==24)
                      {
                        hour=0;
                      }
                  }
              }
            dispbuf[0]=second;
            dispbuf[1]=second/10;
            dispbuf[3]=minite;
            dispbuf[4]=minite/10;
            dispbuf[6]=hour;
            dispbuf[7]=hour/10;
          }
      }

       

      Tags:單片機,數字時鐘,c語言程序  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章: 沒有了
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 色欲香天天天综合网站| 一本一本久久a久久精品综合麻豆 一本色道久久综合狠狠躁篇 | 色久悠悠婷婷综合在线亚洲| 青青草原综合久久大伊人导航| 天天做天天爱天天综合网2021| 91精品国产色综合久久不卡蜜| 亚洲av综合日韩| 伊人丁香狠狠色综合久久| 天天欲色成人综合网站| 天天av天天翘天天综合网| 亚洲综合AV在线在线播放| 婷婷六月久久综合丁香76| 91精品国产综合久久四虎久久无码一级 | 2021精品国产综合久久| 亚洲综合网美国十次| 激情五月激情综合网| 亚洲国产综合久久天堂| 国产成人亚综合91精品首页| 亚洲综合小说另类图片动图| 麻豆狠色伊人亚洲综合网站| 色综合AV综合无码综合网站| 久久狠狠一本精品综合网| 亚洲伊人久久综合中文成人网| 一本一本久久a久久综合精品蜜桃| 99久久国产综合精品2020| 91探花国产综合在线精品| 色综合色综合久久综合频道| 91综合精品网站久久| 国产成+人+综合+亚洲专| 亚洲综合久久成人69| 天天av天天翘天天综合网| 亚洲熟女综合色一区二区三区| 天天影视色香欲综合久久| 天天综合久久一二三区| 伊人久久大香线焦AV综合影院| 亚洲人成伊人成综合网久久久| 伊人久久综合热线大杳蕉下载| 久久大香线蕉综合爱| 狠狠色丁香婷婷久久综合| 色综合久久天天综线观看| 97久久国产综合精品女不卡|