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

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

        AVR單片機內部EEPROM方法

        作者:陳永飛   來源:本站原創   點擊數:  更新時間:2014年03月25日   【字體:

        /**************************************************************
        ;eeprom.c 在AVR單片機中可以用在ATMEGA16和ATMEGA8中都可以用,在GCC下
        ;編譯通過。09年11月1號! 陳永飛已測試過!
        ;讀/寫atmega8515內部EEPROM的例子
        ;將數據0....9寫入eeprom中,再讀出用數碼管顯示出來
        ***************************************************************/

        #include <avr/io.h>
        #include <avr/eeprom.h>
        #define uchar unsigned char
        #define uint unsigned int
        #define Hidden 16

        uchar DispTab[17]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
        uchar BitTab[6]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
        uchar DispBuf[6]; //顯示緩沖區

        unsigned char Counter=0;

        void io_init(void)
        {
         // PortA
         PORTA = 0xff;
         DDRA = 0xff;
         // PortB
         PORTB = 0x0;
         DDRB = 0x0;
         // PortC
         PORTC = 0xfc;
         DDRC = 0xfc;
         // PortD
         PORTD = 0x0;
         DDRD = 0x0;
        }

        void mDelay(uint DelayTim)
        {
         uint i;
         for(;DelayTim>0;DelayTim--)
         {
          for(i=0;i<600;i++)
          {;}
         }
        }

        void disp()
        {
         uchar i;
         uchar tmp;
         if(++i>=6)
         i=0;
         PORTC=0xff; //關閉顯示
         tmp=DispBuf[i];
         PORTA=DispTab[tmp];
         tmp=BitTab[i];
         PORTC=tmp;
         mDelay(1); //延時1ms
        }

        int main(void)
        {
         unsigned int Count=0;
         unsigned char Addr=1; //向地址1里面寫數字
         uint8_t temp=0;
         io_init();
         DispBuf[0]=Hidden;
         DispBuf[1]=Hidden;
         DispBuf[2]=Hidden;
         DispBuf[3]=Hidden;
         DispBuf[4]=0; //次低位顯示0
         while(1)
         {
          temp=eeprom_read_byte (Addr);
          DispBuf[5]=temp;
          if(++Count==1000)
          {
           Count=0;
           Counter++;
           eeprom_write_byte(Addr,Counter);
          }
          if(Counter>=10)
          Counter=0; //計數值在0~9之間循環
          disp(); //調用顯示程序
         }
        }

        關閉窗口

        相關文章

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