<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/2/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
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 亚洲综合一区二区| 亚洲五月丁香综合视频| 久久精品国产91久久综合麻豆自制| 久久精品亚洲综合一品| 国产色综合天天综合网| 玖玖爱zh综合伊人久久| 久久久久亚洲AV综合波多野结衣| 色综合久久久无码中文字幕| 色天使久久综合网天天| 国产成人综合久久久久久| 亚洲综合在线成人一区| 色爱区综合激情五月综合色| 久久综合精品国产二区无码| 狠狠色噜噜色狠狠狠综合久久| 亚洲色偷偷偷综合网| 久久综合九九亚洲一区| 国产成人综合久久精品免费| 18和谐综合色区| 色综合色综合久久综合频道| 久久午夜综合久久| 亚洲国产综合精品一区在线播放| 色综合天天综合高清网| 97久久天天综合色天天综合色hd| 国产综合成人色产三级高清在线精品发布| 久久婷婷色香五月综合激情| 色之综合天天综合色天天棕色| 亚洲伊人成无码综合网 | 狠狠色丁香婷婷久久综合五月| 一本一道久久综合狠狠老| 中文字幕久久综合| 久久久久综合一本久道| 久久综合久久自在自线精品自| 亚洲综合久久1区2区3区| 色狠狠久久综合网| 色婷婷久久综合中文网站| 国产精品综合一区二区三区| 久久综合伊人77777| 一本色道久久88加勒比—综合| 亚洲综合久久成人69| 亚洲国产综合无码一区二区二三区 | 亚洲精品欧美综合四区|