<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        DS1302讀寫程序(IIC總線)

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年05月02日   【字體:
        #include<reg51.h>    //包含單片機寄存器的頭文件
        #include<intrins.h>  //包含_nop_()函數定義的頭文件
        #define uchar unsigned char
        #define uint unsigned int
         
        sbit SRT=P3^5;
        sbit IO=P3^4;
        sbit SCK=P3^6;
        uchar code table[]={0x3f,0x06,0x5b,0x4f,
             0x66,0x6d,0x7d,0x07,
             0x7f,0x6f,0x77,0x7c,
             0x39,0x5e,0x79,0x71};
        uchar miao,fen,shi,tian,yue,zhou,nian;
         
        uchar read_DS1302(uchar addr)//讀DS1302子程序;
        {
         uchar dat,i,temp,j;
         SRT=0;
         SCK=0;
         IO=0;//必須先置低,否則易出錯;
         SRT=1;
         for(i=0;i<8;i++)//寫地址(要讀數據的地址);
         {
          SCK=0;
          dat=addr&0x01;
          IO=dat;
          addr=addr>>1;
          SCK=1;
          _nop_(); 
         }
        // IO=1;//釋放總線,以便接下來的讀操作,
                 //否則讀出的數據永遠都是0x00,
           //但因addr最高總是1,在傳送最高位時,即IO=dat=1,
                 //所以此句可以不要;
         for(j=0;j<8;j++)//讀數據;
         {
          SCK=0;
          temp>>=1;
          if(IO)
           temp=temp|0x80;
          SCK=1;
          _nop_();
         }
         SCK=0;//必須嚴格按時序拉低,不然出錯;
         SRT=0;
         IO=1;//必須釋放總線;
         return temp;
        }
         
        void write_DS1302(uchar add,uchar date)//寫DS1302子程序;
        {
         uchar dat1,i,dat2,j;
         SRT=0;
         SCK=0;
         IO=0;
         SRT=1;
         _nop_();
         for(i=0;i<8;i++)//先寫地址;
         {
          SCK=0;
          dat1=add&0x01;
          add=add>>1;
          IO=dat1;
          SCK=1;
          _nop_();
         }
         for(j=0;j<8;j++)//再寫數據;
         {
          SCK=0;
          dat2=date&0x01;
          date=date>>1;
          IO=dat2;
          SCK=1;
          _nop_();
         }
         SCK=0;
         SRT=0;
         IO=1; 
        }
         
        void delay(uint n)
        {
         while(n--);
        }
         
        void display()
        {
         uchar miao1,miao2,fen1,fen2,shi1,shi2;
         P0=0xff;
         P1=0x00;
         
         miao1=miao&0x0f;
         miao2=miao&0xf0;
         miao2=miao2>>4; 
         
         fen1=fen&0x0f;
         fen2=fen&0xf0;
         fen2=fen2>>4;
         
         shi1=shi&0x0f;
         shi2=shi&0xf0;
         shi2=shi2>>4;
         
         P1=table[miao1];
         P0=0x7f;
         delay(200);
         
         P1=table[miao2];
         P0=0xbf;
         delay(200);
         
         P1=0x40;
         P0=0xdf;
         delay(200);
         
         P1=table[fen1];
         P0=0xef;
         delay(200);
         
         P1=table[fen2];
         P0=0xf7;
         delay(200);
         
         P1=0x40;
         P0=0xfb;
         delay(200);
         
         P1=table[shi1];
         P0=0xfd;
         delay(200);
         
         P1=table[shi2];
         P0=0xfe;
         delay(200);
        }
         
        void main()
        {
        //設置日期時間(2013/09/11,21:03:00,星期3);
         while(1)
         {
          miao=read_DS1302(0x81);
          fen=read_DS1302(0x83);
          shi=read_DS1302(0x85);
          tian=read_DS1302(0x87);
          yue=read_DS1302(0x89);
          zhou=read_DS1302(0x8b);
          nian=read_DS1302(0x8d);//讀取DS18B20數據;
         
          P2=miao;
          display();
         }
         
        }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮