在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            DS1302時鐘芯片顯示時間C51程序

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

            /*
            程序效果:通過芯片,本程序主要是要理解
                芯片的協(xié)議,這樣便于編寫程序。
                當然時間顯示也可以用單片機的定時器來控制,比起延時
                子函數(shù)來說較精準。
            */
            #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, //顯示的時間值
            0x17,0x1f,0x0c,0x08,0x09,0x00};
            uchar tmpdisplay[8];
            code uchar write_rtc_address[7]={ //寫入時間的地址
            0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
            code uchar read_rtc_address[7]={ //讀取時間的地址
            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) // 設計每隔5秒交替顯示年月日 時分秒
                {  
                  case 0: //顯示時分秒
                  case 2:
                  case 4:
                  case 6:
                  case 8:
                  case 10:
                      tmpdisplay[0]=tmpdata[2]/16;
                      tmpdisplay[1]=tmpdata[2]0x0f;
                      tmpdisplay[2]=10; //在時與分之間加一個“-”
                      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為顯示的個數(shù)
            {
              uchar i; //定義局部變量
              P2=0; //清零端口,準備顯示
              P1=P10xf8; //不影響P1口的高5位,低三位用于控制哪個數(shù)碼管亮
              for(i=0;ilc;i++) //循環(huán)顯示
              {
                P2=table[lp[i]];//查表獲得相應的數(shù)值
                delay(); //延時,使數(shù)碼管更加亮
                P2=0; //清零端口,準備顯示下一位
                P1++; //點亮下一個數(shù)碼管
              }
            }
            void delay() //延時子函數(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++) //分七次讀取年月日 時分秒 星期
              {
                tmpdata[i]=read_ds1302(*p);
                p++;
              }
            }
            void set_rtc() //設定日歷
            {
              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++) //分七次寫入年月日 時分秒星期
              {
                write_ds1302(*p,tmpdata[i]);
                p++;
              }
              write_ds1302(0x8e,0x80);
            }

            萬能遙控器相關文章:萬能遙控器代碼




            評論


            相關推薦

            技術專區(qū)

            關閉