资讯详情

AVR的EEPROM简单实验

#include <iom16.h> #include <intrinsics.h> #define uchar unsigned char #define uint unsigned int __flash uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; __flash uchar tab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; #define EEWE 1 #define EERE 0 #define EEMWE 2 #define k1 PIND_Bit4 //地址变化键 #define k2 PIND_Bit5 //数据变化键 #define k3 PIND_Bit6 //地址写入 #define k4 PIND_Bit7 //地址读出 uint val; //显示的存储数值 uchar address,data; //存储地址和数值 void delay(uint k) //延迟函数 { uint i,j; for(i=0;i<k;i++) for(j=0;j<1140;j++); } void key1() { static uchar i,j; if(k1==0) { if(i==0) { j++; if(j>3) { if(k1==0) { i=1;j=0; address++; } } } } else { i=0;j=0; } } void key2() { static uchar i,j; if(k2==0) { if(i==0) { j++; if(j>3) { if(k2==0) { i=1;j=0; data++; } } } } else { i=0;j=0; } } void show_val(uint k) //显示数值函数 { static uchar i=0,j; uchar ss[6]; do { ss[i]=k%10; i++; }while(k/=10); for(j=0;j<i;j++) { PORTA=seg[ss[j]]; PORTC=tab[j]; delay(1); PORTA=0xff; PORTC=0xff; } i=0; } void show_address(uint k) //显示数值函数 { static uchar i=0,j; uchar ss[6]; do { ss[i]=k%10; i++; }while(k/=10); for(j=0;j<i;j++) { PORTA=seg[ss[j]]; PORTC=tab[j+3]; delay(1); PORTA=0xff; PORTC=0xff; } i=0; } void show_data(uint k) //显示数值函数 { static uchar i=0,j; uchar ss[6]; do { ss[i]=k%10; i++; }while(k/=10); for(j=0;j<i;j++) { PORTA=seg[ss[j]]; PORTC=tab[j+6]; delay(1); PORTA=0xff; PORTC=0xff; } i=0; } #include "1602.h" void port_init() //端口初始化 { PORTA=0xff; A=0xff; PORTB=0xff; DDRB=0xff; PORTC=0xff; DDRC=0xff; PORTD=0xff; DDRD=0x0f; } void write_ (uchar address,uchar data) //写入EEPROM函数 { while(EECR&(1<<EEWE)); //等待变成0 EEAR=address; EEDR=data; EECR|=(1<<EEMWE); // EECR|=(1<<EEWE); // } uchar receive_EEPROM(uchar address) //读取EEPROM操作 { while(EECR&(1<<EEWE)); //检查写操作位是否正在进行,如果不在进行则进行读取 EEAR=address; EECR|=(1<<EERE); //设置为读状态 return EEDR; } void key3() { static uchar i,j; if(k3==0) { if(i==0) { j++; if(j>3) { if(k3==0) { i=1;j=0; write_EEPROM(address,data); } } } } else { i=0;j=0; } } void key4() { static uchar i,j; if(k4==0) { if(i==0) { j++; if(j>3) { if(k4==0) { i=1;j=0; val=receive_EEPROM(address); } } } } else { i=0;j=0; } } void main() { port_init(); write_EEPROM(address,data); val=receive_EEPROM(address); while(1) { show_val(val); //显示数据值 show_address(address); //显示数据地址 show_data(data); //显示需要写入的数据地址 key1(); //改变数据地址 key2(); //改变准备写入的数据值 key3();//把数据写入地址中 key4();//读出地址值 } } -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台