<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > C8051F330 16*16點(diǎn)陣(SPI 、SMBus、I2C)PCF8563

          C8051F330 16*16點(diǎn)陣(SPI 、SMBus、I2C)PCF8563

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          void SPI_INT(void) //SPI初始化
          {
          SPI0CFG=0x40;
          SPI0CN=0x01; //0000 0001最后一位是SPI使能位 SPI工作在三線主方式
          SPI0CKR=0x0f; //SPI 時鐘頻率設(shè)置為100kHz 0x63

          IE &= 0xbf; //關(guān)閉SPI中斷
          }

          void SMB_INT(void) //SMB初始化
          {
          SMB0CF=0x5f; //使能SMB 允許時間擴(kuò)充 定時器2低字節(jié)溢出時鐘源

          SMB0CF|=0x80;
          }


          void TIME01_INT(void) //定時器初始化
          {
          TCON=0x10; //定時器0允許
          TMOD=0x01; //定時器0在16位工作方式
          CKCON &= 0xf8;
          CKCON |= 0x01; //定時器0使用系統(tǒng)4分頻

          TL0=0x03;
          TH0=0x03;

          IE|=0x02;
          }


          void TIME2_INT(void) //定時器2用于配置SMB的時鐘頻率
          {
          TMR2CN=0x00;
          CKCON |= 0x00;

          TMR2RLL = 0xef;
          TMR2RLH = 0xff;
          TMR2L = 0xef;
          TMR2H = 0xff;

          TMR2CN |= 0x0c;
          }

          void TIME3_INT(void)//用于I2C的超時檢測
          {
          TMR3CN = 0x00; //定時器3為16位自動重載
          CKCON &= ~0x40;

          TMR3RLL = 0xaf;
          TMR3RLH = 0x57;
          TMR3L = 0xaf;
          TMR3H = 0x57;

          EIE1|=0x00;
          TMR3CN |= 0x04;
          }

          void pio_int(void) // 端口配置
          {
          XBR0=0x06;
          XBR1=0x40;

          P0MDIN=0xff; //禁止模擬輸入,0為模擬,1為數(shù)字
          P0MDOUT=0x0d; //0為開漏,1為推挽(ff)
          P0SKIP=0x08;

          P1MDIN=0xff;
          P1MDOUT=0xff; //低四位用于138
          P1SKIP=0x00;

          P0=0xff;
          P1=0xff;

          }


          /*************呈現(xiàn)各種顯示效果的函數(shù)集****************/
          //void Jump_Word(uchar a) 立即跳顯示一個字或一張圖案
          //void M_Word(uchar a)卷簾出顯示一個字或一張圖案
          //void M_Words(number) 顯示幾個交換的字
          //void UP_Run(number) 向上滾屏n個字
          //void L_Removeout(number) 右入左出n個字
          //void M_Black(void) 黑屏
          //void R_Removeout(number) 左入右出n個字
          /*****************************************************/

          /****************立即跳顯示一個字或一張圖案***************/
          void Jump_Word(uchar a)
          {register uchar i,q;
          for(i=0;i<32;i++)
          {
          for(q=0;q {dispram[i+q*32]=Bmp[a][i];}
          //if(i%2)delay(SPEED);
          }
          }
          /****************卷簾出顯示一個字或一張圖案***************/
          void M_Word(uchar a)
          {register uchar i,q;
          for(i=0;i<32;i++)
          {
          for(q=0;q {dispram[i+q*32]=Bmp1[a][i];}
          if(i%2)delay(SPEED);
          }
          }

          /****************卷簾出顯示number個字***************/
          void M_Words(number)
          {register uchar i,q,w;
          for(w=0;w{
          for(i=0;i<32;i++)
          {
          for(q=0;q if(i%2)delay(SPEED);
          }
          delay(TIME);
          }
          }

          /****************向上滾屏number個字***************/
          void UP_Run(number)
          {register uchar i,j,k,q;
          for(i=0;i{
          for(j=0;j<16;j++)
          {
          for(k=0;k<15;k++)
          {
          for(q=0;q {
          dispram[k*2+q*32]=dispram[(k+1)*2+q*32];
          dispram[k*2+1+q*32]=dispram[(k+1)*2+1+q*32];
          }
          }
          for(q=0;q {
          dispram[30+q*32]=Bmp[q+i*BLKN/2][j*2];
          dispram[31+q*32]=Bmp[q+i*BLKN/2][j*2+1];
          }
          delay(2*SPEED);
          }
          delay(2*TIME);
          }
          }

          /****************左移出顯示number個字*******************/
          void L_Removeout(number)
          {register uchar i,j,k,l,q;
          for(i=0;i{
          for(j=0;j<2;j++)
          for(k=0;k<8;k++)
          {
          for(l=0;l<16;l++)
          {
          for(q=0;q {
          dispram[l*2+q*32]=dispram[l*2+q*32]<<1|dispram[l*2+1+q*32]>>7;
          if(q==BLKN/2-1)
          dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<<1|Bmp[i][l*2+j]>>(7-k);
          else
          dispram[l*2+1+q*32]=dispram[l*2+1+q*32]<<1|dispram[l*2+(q+1)*32]>>7;
          }
          }
          delay(2*SPEED);
          }
          }
          }

          /****************卷簾出黑屏***************/
          void M_Black(void)
          {register uchar i,q;
          for(i=0;i<32;i++)
          {
          for(q=0;q {dispram[i+q*32]=0x00;}
          if(i%2)delay(SPEED);
          }
          }
          /****************右移出顯示number個字*******************/
          void R_Removeout(number)
          {register uchar i,j,k,l,q;
          for(i=0;i{
          for(j=2;j>0;j--)
          for(k=0;k<8;k++)
          {
          for(l=0;l<16;l++)
          {
          for(q=0;q {
          dispram[l*2+1+q*32]=dispram[l*2+1+q*32]>>1|dispram[l*2+q*32]<<7;
          if(q==0)
          dispram[l*2+q*32]=dispram[l*2+q*32]>>1|Bmp[i][l*2+j-1]<<(7-k);
          else
          dispram[l*2+q*32]=dispram[l*2+q*32]>>1|dispram[l*2+1+(q-1)*32]<<7;
          }
          }
          delay(2*SPEED);
          }
          }
          }


          /*************用于時鐘芯片操作的函數(shù)集****************/
          //void write_pcf8563(void)寫時鐘芯片
          //void read_pcf8563(void)讀時鐘芯片
          /*****************************************************/
          void write_pcf8563(void)
          {
          SPI0CN &=~0x01; //暫時關(guān)掉SPI通訊

          send =0xa2; //送子器件地址
          while(BUSY);
          BUSY=1;
          SMB_RW=0;control=5;
          STA=1; //開始傳送

          while(BUSY);
          SPI0CN |=0x01; //重新開啟SPI
          }

          void read_pcf8563(void) //讀當(dāng)時的時,分,鈔
          {

          SPI0CN &=~0x01;
          send =0xa2; //送子器件地址
          while(BUSY);
          BUSY=1;
          SMB_RW=0;
          STA=1;

          send=0x02;
          while(!SI);
          BUSY=1;

          send=0xa2;
          while(BUSY);
          BUSY=1;
          SMB_RW=1;
          STA=1;


          while(BUSY);
          BUSY=1;
          sec=receive1[2]&0x7f;//讀秒
          min=receive1[1]&0x7f;//讀分
          hou=receive1[0]&0x3f;//讀時

          SPI0CN |=0x01;
          }

          void spit_time(void)//分別計算時、分、秒的各位數(shù)字
          {
          sg=(int)hou/16;
          sd=(int)hou%16;

          fg=(int)min/16;
          fd=(int)min%16;

          mg=(int)sec/16;
          md=(int)sec%16;
          }

          void dat_int(void) //數(shù)據(jù)初始化
          {
          scyx=1;
          CLK=0;
          }

          void sysclk_int(void);
          void delay(unsigned n);
          void pio_int(void);
          void SPI_INT(void);
          void SMB_INT(void);
          void dat_int(void);
          void TIME01_INT(void);
          void TIME2_INT(void);
          void TIME3_INT(void);
          void write_pcf8563(void);
          void read_pcf8563(void);
          void spit_time(void);

          /**************主函數(shù)**************/
          void main(void) //主程序
          {
          register uchar i;
          PCA0MD &= ~0x40;// 關(guān)閉看門狗
          sysclk_int();
          OSCICN |= 0x02;

          /****************初始化檢測pcf8563****************/
          while(!pcf8563_sda)
          {
          XBR1 = 0x40;
          pcf8563_scl = 0;
          for(i = 0; i < 255; i++);
          pcf8563_scl = 1;
          while(!pcf8563_scl);

          for(i = 0; i < 10; i++);
          XBR1 = 0x00;
          }



          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();