×
单片机 > 单片机程序设计 > 详情

AVR中高档单片机内部EEPROM方法!可以用!

发布时间:2020-06-04 发布时间:
|

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

;eeprom.c 在AVR单片机中可以用在ATMEGA16和ATMEGA8中都可以用,在GCC下

;编译通过。09年11月1号! 陈永飞已测试过!

;读/写atmega8515内部EEPROM的例子

;将数据0....9写入eeprom中,再读出用数码管显示出来

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

#include

#include

#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(); //调用显示程序

}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式