|
- /**************************************************************
- ;eeprom.c
- ;讀/寫(xiě)atmega8515內(nèi)部EEPROM的例子
- ;將數(shù)據(jù)0....9寫(xiě)入eeprom中,再讀出用數(shù)碼管顯示出來(lái)
- ***************************************************************/
- #include "avr/io.h"
- #include "avr/eeprom.h"
- #define uchar unsigned char
- #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]; //顯示緩沖區(qū)
- unsigned char Counter=0;
- static 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(uint16_t DelayTim)
- { uint16_t i;
- for(;DelayTim>0;DelayTim--)
- { for(i=0;i<600;i++)
- {;}
- }
- }
- void disp()
- { static uchar i;
- uchar tmp;
- if(++i>=6)
- i=0;
- PORTC=0xff; //關(guān)閉顯示
- tmp=DispBuf[i];
- PORTA=DispTab[tmp];
- tmp=BitTab[i];
- PORTC=tmp;
- mDelay(1); //延時(shí)1ms
- }
- int main(void)
- { unsigned int Count=0;
- unsigned char Addr=1; //向地址1里面寫(xiě)數(shù)字
- 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; //計(jì)數(shù)值在0~9之間循環(huán)
- disp(); //調(diào)用顯示程序
- }
- }
復(fù)制代碼
|
|