色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ATmega16L-EEPROM寫入讀取實驗

          ATmega16L-EEPROM寫入讀取實驗

          作者: 時間:2012-08-18 來源:網(wǎng)絡 收藏
          /***************************************
          讀寫AVR單片機實驗。
          先向單片機寫入1到255,然后依次讀出,
          并在數(shù)碼管上顯示出來
          ***************************************/
          #includeiom16v.h>
          const unsigned char duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
          const unsigned char weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

          unsigned char shu[8];
          unsigned int num;

          unsigned int aa,bb;

          /****************************************
          延時函數(shù)
          ****************************************/
          void delay(unsigned char t)
          {
          unsigned char x,y;
          for(x=t;x>0;x--)
          for(y=100;y>0;y--);
          }

          /****************************************
          顯示函數(shù)
          ****************************************/
          void display(void)
          {
          unsigned char i;
          for(i=0;i4;i++)
          {
          PORTB =0X00;
          PORTA|=0X01;
          PORTA=0XFE;

          PORTB =weima[i];
          PORTA|=0x02;
          PORTA=0XFD;

          PORTB=shu[i];
          PORTA|=0X01;
          PORTA=0XFE;

          delay(4);
          }
          }

          /***************************************

          ***************************************/
          void write_eep(unsigned int add,unsigned int data)
          { //data為待寫數(shù)據(jù),add為某單元地址
          while(EECR(1EEWE)); //等待前一次寫操作完成
          EEAR=add; //設定單元地址
          EEDR=data; //將數(shù)據(jù)寫入EEDR
          EECR|=(1EEMWE); //允許EEPROM操作
          EECR|=(1EEWE); //開始EEPROM操作
          }

          /***************************************
          讀EEPROM
          ***************************************/
          unsigned char read_eep(unsigned int add)
          { //add為某單元地址
          while(EECR(1EEWE));//等待前一次寫操作完成
          EEAR=add; //設定單元地址
          EECR|=(1EERE); //開始EEPROM寫操作
          return EEDR; //返回讀出的數(shù)據(jù)
          }

          /***************************************
          數(shù)據(jù)轉(zhuǎn)換子函數(shù)
          ***************************************/
          void change(unsigned int i)
          {
          shu[0]=duanma[i/1000];
          shu[1]=duanma[i/100%10];
          shu[2]=duanma[i%100/10];
          shu[3]=duanma[i%10];
          }


          /***************************************
          端口初始化
          ***************************************/
          void init_port(void)
          {
          PORTA=0XFF;
          DDRA=0XFF;
          PORTB=0XFF;
          DDRB=0XFF;
          }

          /***************************************
          MAIN
          ***************************************/
          void main(void)
          {
          init_port();
          for(aa=0;aa255;aa++)
          {
          write_eep(aa,aa);

          change(num); //延時
          display();
          display();
          display();
          }

          while(1)
          {
          for(aa=0;aa255;aa++)
          {
          num=read_eep(aa);
          for(bb=0;bb40;bb++) //延時
          display();

          change(num);

          for(bb=0;bb40;bb++) //延時
          display();
          }
          }
          }


          評論


          相關推薦

          技術專區(qū)

          關閉