|
读/写atmega8515内部EEPROM的程序
/************************************************************** ; 平凡单片机工作室 ; http://www.mcustudio.com ; Copyright 2004 pingfan's mcustudio ; All rights Reserved ;作者:周坚 ;eeprom.c ;读/写atmega8515内部EEPROM的例子 ;将数据0....9写入eeprom中,再读出用数码管显示出来 ***************************************************************/
#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]; //显示缓冲区
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; //关闭显示 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(); //调用显示程序 } } |
|