一本精品热在线视频,久久免费视频分类,精品婷婷乱码久久久久久蜜桃,在线可以免费观看的Av

<mark id="vd61v"><dl id="vd61v"></dl></mark>
    <sub id="vd61v"><ol id="vd61v"></ol></sub>

  • <sub id="vd61v"><ol id="vd61v"></ol></sub>

    新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DS1302時(shí)鐘芯片顯示時(shí)間C51程序

    DS1302時(shí)鐘芯片顯示時(shí)間C51程序

    作者: 時(shí)間:2012-11-10 來源:網(wǎng)絡(luò) 收藏

    /*
    程序效果:通過芯片,本程序主要是要理解
        芯片的協(xié)議,這樣便于編寫程序。
        當(dāng)然時(shí)間顯示也可以用單片機(jī)的定時(shí)器來控制,比起延時(shí)
        子函數(shù)來說較精準(zhǔn)。
    */
    #includereg52.h> //頭文件
    #includeintrins.h>
    #define uchar unsigned char //宏定義
    sbit scl2=P1^3; //位聲明
    sbit sda2=P1^4;
    sbit rst2=P1^5;
    uchar tmpdata[8]={0x00,0x3b, //顯示的時(shí)間值
    0x17,0x1f,0x0c,0x08,0x09,0x00};
    uchar tmpdisplay[8];
    code uchar write_rtc_address[7]={ //寫入時(shí)間的地址
    0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
    code uchar read_rtc_address[7]={ //讀取時(shí)間的地址
    0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
    code unsigned char table[]={
    0x3f,0x06,0x5b,0x4f,0x66,
    0x6d,0x7d,0x07,0x7f,0x6f, //共陰數(shù)碼管 0-9
    0x40,0x00}; // '-' '熄滅‘表
    void delay();
    void display(uchar *lp,uchar lc); //顯示子函數(shù)
    void write_ds1302(uchar address,uchar dat); //寫子函數(shù)
    uchar read_ds1302(uchar address);//讀子函數(shù)
    void read_rtc();
    void set_rtc();
    void main()
    {
      rst2=0;
      set_rtc();
      while(1)
      {
        read_rtc();
        switch(tmpdata[0]/5) // 設(shè)計(jì)每隔5秒交替顯示年月日 時(shí)分秒
        {  
          case 0: //顯示時(shí)分秒
          case 2:
          case 4:
          case 6:
          case 8:
          case 10:
              tmpdisplay[0]=tmpdata[2]/16;
              tmpdisplay[1]=tmpdata[2]0x0f;
              tmpdisplay[2]=10; //在時(shí)與分之間加一個(gè)“-”
              tmpdisplay[3]=tmpdata[1]/16;
              tmpdisplay[4]=tmpdata[1]0x0f;
              tmpdisplay[5]=10;
              tmpdisplay[6]=tmpdata[0]/16;
              tmpdisplay[7]=tmpdata[0]0x0f;
              break;
          case 1: //顯示年月日
          case 3:
          case 5:
          case 7:
          case 9:
          case 11:
              tmpdisplay[0]=tmpdata[6]/16;
              tmpdisplay[1]=tmpdata[6]0x0f;
              tmpdisplay[2]=10;
              tmpdisplay[3]=tmpdata[4]/16;
              tmpdisplay[4]=tmpdata[4]0x0f;
               tmpdisplay[5]=10;
              tmpdisplay[6]=tmpdata[3]/16;
              tmpdisplay[7]=tmpdata[3]0x0f;
              break;
          default :
            break;
          }
        display(tmpdisplay,8);
      }
    }
    void display(uchar *lp,uchar lc) //lp為數(shù)組的首地址,lc為顯示的個(gè)數(shù)
    {
      uchar i; //定義局部變量
      P2=0; //清零端口,準(zhǔn)備顯示
      P1=P10xf8; //不影響P1口的高5位,低三位用于控制哪個(gè)數(shù)碼管亮
      for(i=0;ilc;i++) //循環(huán)顯示
      {
        P2=table[lp[i]];//查表獲得相應(yīng)的數(shù)值
        delay(); //延時(shí),使數(shù)碼管更加亮
        P2=0; //清零端口,準(zhǔn)備顯示下一位
        P1++; //點(diǎn)亮下一個(gè)數(shù)碼管
      }
    }
    void delay() //延時(shí)子函數(shù)
    {
      uchar i; //i的值的大小可以決定數(shù)碼管的亮暗的程度
      for(i=20;i>0;i--); //但i的值要適中,并不是越大越好
    }
    void write_ds1302_byte(uchar temp) //寫子函數(shù)
    {
      uchar i;
      for(i=0;i8;i++) //循環(huán)8次,寫入數(shù)據(jù)
      {
        scl2=0;
        sda2=temp0x01; //每次傳輸?shù)妥止?jié)
        temp>>=1; //右移一位
        scl2=1;
      }
    }
    void write_ds1302(uchar address,uchar dat) //根據(jù)ds1302協(xié)議編寫的程序
    {
      rst2=0;
      _nop_();
      scl2=0;
      _nop_();
      rst2=1;
      _nop_(); //從此后開始發(fā)送數(shù)據(jù)
      write_ds1302_byte(address);//發(fā)送地址
      write_ds1302_byte(dat); //發(fā)送數(shù)據(jù)
      rst2=0; //停止發(fā)送數(shù)據(jù)
    }
    uchar read_ds1302(uchar address) //根據(jù)ds1302編寫的程序
    {
      uchar i,temp=0;
      rst2=0;
      _nop_();
      scl2=0;
      _nop_();
      rst2=1;
      _nop_();
      write_ds1302_byte(address);
      for(i=0;i8;i++) //循環(huán)8次,讀取數(shù)據(jù)
      {
        scl2=1;
        _nop_();
        if(sda2)
        temp|=0x80;//每次傳輸?shù)妥止?jié)
        scl2=0;
        temp>>=1; // 右移一位
      }
      rst2=0;
      _nop_();
      scl2=1;
      sda2=0;
      return temp; //返回 temp值
    }
    void read_rtc() //讀取日歷
    {
      uchar i,*p;
      p=read_rtc_address; //傳遞地址
      for(i=0;i7;i++) //分七次讀取年月日 時(shí)分秒 星期
      {
        tmpdata[i]=read_ds1302(*p);
        p++;
      }
    }
    void set_rtc() //設(shè)定日歷
    {
      uchar i,*p,tmp;
      for(i=0;i7;i++)
    {
      tmp=tmpdata[i]/10;
      tmpdata[i]=tmpdata[i]%10;
      tmpdata[i]=tmpdata[i]+tmp*16;
    }
      write_ds1302(0x8e,0x00);

      p=write_rtc_address; //傳遞地址
       for(i=0;i7;i++) //分七次寫入年月日 時(shí)分秒星期
      {
        write_ds1302(*p,tmpdata[i]);
        p++;
      }
      write_ds1302(0x8e,0x80);
    }

    萬能遙控器相關(guān)文章:萬能遙控器代碼




    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉