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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用430寫的IIC總線協(xié)議:24C02掉電記憶程序(數(shù)碼管顯示)

          用430寫的IIC總線協(xié)議:24C02掉電記憶程序(數(shù)碼管顯示)

          作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          #include <msp430x14x.h>

          #define OP_READ 0xa1 // 器件地址以及讀取操作
          #define OP_WRITE 0xa0 // 器件地址以及寫入操作
          #define uchar unsigned char
          #define uint unsigned int
          #define SDA_OUT P1DIR|=BIT3
          #define SDA_IN P1DIR&=~BIT3
          #define SCL_OUT P1DIR|=BIT2
          #define SCL_IN P1DIR&=~BIT2
          #define SDA_H P1OUT|=BIT3
          #define SDA_L P1OUT&=~BIT3
          #define SCL_H P1OUT|=BIT2
          #define SCL_L P1OUT&=~BIT2
          #define wei_h P5OUT|= BIT5
          #define wei_l P5OUT&= ~BIT5
          #define duan_l P6OUT &= ~BIT6
          #define duan_h P6OUT |= BIT6
          //數(shù)碼管7位段碼:0--f
          uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
          //記錄顯示位數(shù)的全局變量
          uchar miao;
          uchar write;
          //8M晶振時大約20us延時程序
          void delayus(uint z)
          {
          uint i,j;
          for(i = 0;i<20;i++)
          for(j=0;j {;;};
          }
          // 開始位
          void start()
          {
          SDA_OUT;
          SCL_OUT;
          SDA_H;
          SCL_H;
          delayus(1); //20
          SDA_L;
          delayus(2);//40
          SCL_L;
          }
          // 停止位
          void stop()
          {
          SDA_OUT;
          SCL_OUT;
          SDA_L;

          delayus(2);//20
          SCL_H;
          delayus(2);
          SDA_H;
          }
          // 從AT24Cxx移入數(shù)據(jù)到MCU
          uchar shin()
          {
          uchar i,read_data;
          SDA_OUT;
          SCL_OUT;
          for(i = 0; i < 8; i++)
          {
          SDA_H;
          delayus(1);
          SCL_H;
          SDA_IN;
          read_data <<= 1;
          if(P1IN&BIT3)
          read_data|=0x01;
          SDA_OUT;
          SCL_L;
          }
          return(read_data);
          }
          // 從MCU移出數(shù)據(jù)到AT24Cxx
          uchar shout(uint write_data)
          {
          uchar i;
          uchar ack_bit;
          SDA_OUT;
          SCL_OUT;
          for(i = 0; i < 8; i++) // 循環(huán)移入8個位
          {
          if(write_data&0x80)
          SDA_H;
          else
          SDA_L;
          delayus(2);//2
          SCL_H;
          delayus(2);//2
          SCL_L;
          delayus(2);//2
          write_data <<= 1;
          }

          SDA_H; // 讀取應(yīng)答
          delayus(2);
          SCL_H; //注意拉高
          delayus(2);
          SDA_IN;
          if(P1IN&BIT3)
          ack_bit=1;
          else ack_bit=0;
          SCL_L;
          return ack_bit; // 返回AT24Cxx應(yīng)答位
          }
          // 在指定地址addr處寫入數(shù)據(jù)write_data
          void write_byte(uchar addr, uchar write_data)
          {
          SDA_OUT;
          SCL_OUT;
          SDA_H;
          SCL_H;
          start();
          shout(OP_WRITE);
          shout(addr);
          shout(write_data);
          stop();
          delayus(1000);// 寫入周期
          }
          // 在當(dāng)前地址讀取
          uint read_current()
          {
          uint read_data;
          start();
          shout(OP_READ);
          read_data = shin();
          stop();
          return read_data;
          }

          // 在指定地址讀取
          uchar read_random(uint random_addr)
          {
          SDA_IN;
          SCL_OUT;
          SDA_H;
          SCL_H;
          start();
          shout(OP_WRITE);
          shout(random_addr);
          return(read_current());
          }

          本文引用地址:http://www.ex-cimer.com/article/201612/324660.htm

          void display(uchar dat)
          {
          P4OUT = table[dat];//輸出段選信號
          duan_h;
          duan_l;
          P4OUT = 0x00; //設(shè)置P4,P5的輸出初值
          wei_h;
          wei_l;
          }

          void Clock(void)
          {
          miao++;
          if(miao==10)
          miao=0;
          }

          int main( void )
          {
          /*下面六行程序關(guān)閉所有的IO口*/
          P1DIR = 0XFF;P1OUT = 0XFF;
          P2DIR = 0XFF;P2OUT = 0XFF;
          P3DIR = 0XFF;P3OUT = 0XFF;
          P4DIR = 0XFF;P4OUT = 0XFF;
          P5DIR = 0XFF;P5OUT = 0XFF;
          P6DIR = 0XFF;P6OUT = 0XFF;


          SDA_OUT;
          SCL_OUT;
          SDA_H;
          SCL_H;


          WDTCTL = WDTPW + WDTHOLD;
          CCR0 = 32768 - 1;//設(shè)置定時器A的中斷時間為1S
          TACTL = TASSEL_1 + MC_1; //計數(shù)時鐘ACLK, 增計數(shù)模
          CCTL0 |= CCIE; //使能CCR0比較中斷
          _EINT();//打開全局中斷


          miao=read_random(3) ;//從地址2中讀出以前保存的數(shù)據(jù)
          if(miao>9) miao=0; //防止首次讀出錯誤數(shù)據(jù)

          while(1)
          {
          display(miao);
          if(write==1)
          {
          write=0;
          write_byte(3,miao);
          }

          LPM3;//進入LPM3低功耗模式

          }
          }

          /*******************************************
          函數(shù)名稱:TimerA_ISR
          功 能:定時器A的中斷服務(wù)函數(shù)
          ********************************************/
          #pragmavector=TIMERA0_VECTOR
          __interrupt void TimerA_ISR(void)
          {
          Clock();
          write=1;
          LPM3_EXIT;
          }



          評論


          技術(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); })();