AVR的EEPROM简单实验

发布者:Joyful222Life最新更新时间:2015-06-23 来源: 51hei关键字:AVR  EEPROM  简单实验 手机看文章 扫描二维码
随时随地手机看文章
#include
#include

#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 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  {
  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  {
  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  {
  PORTA=seg[ss[j]];
  PORTC=tab[j+6];
  delay(1);
  PORTA=0xff;
  PORTC=0xff;
 }
 i=0;
}
[page]
#include "1602.h"
void port_init()   //端口初始化
{
PORTA=0xff;
DDRA=0xff;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0x0f;  
}
void write_EEPROM(uchar address,uchar data)    //写入EEPROM函数
{
  while(EECR&(1<   EEAR=address;
  EEDR=data;
  EECR|=(1<   EECR|=(1< }
uchar receive_EEPROM(uchar address)        //读取EEPROM操作
{
  while(EECR&(1<   EEAR=address;
  EECR|=(1<   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();        //读出地址值
  } 
}
关键字:AVR  EEPROM  简单实验 引用地址:AVR的EEPROM简单实验

上一篇:AVR 1602液晶字符移动
下一篇:AVR单片机+DS18B20简易VB显示程序

推荐阅读最新更新时间:2024-03-16 14:04

stm32f407学习笔记之flash模拟eeprom
stm32f407zgt6的flash有1M容量,总共分为11个扇区,每个扇区的地址和大小如下所示 #define ADDR_FLASH_SECTOR_0 ((u32)0x08000000) //扇区0起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_1 ((u32)0x08004000) //扇区1起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_2 ((u32)0x08008000) //扇区2起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_3 ((u32)0x0800C000) //扇区3
[单片机]
Microchip ATtiny1617系列AVR MCU在贸泽开售
专注于新产品引入 (NPI) 并提供极丰富产品类型的半导体和电子元件分销商贸泽电子(Mouser Electronics)即日起备货 Microchip Technology的ATtiny1617单片机系列。作为Microchip 低功耗8位AVR® 单片机家族中的一员,ATtiny1617扩大了闪存容量,并与ATtiny817系列器件的引脚和代码互相兼容。此款紧凑型8位器件的工作频率最高达20 MHz,提供定制化配置和简化的流程,适用于电容式触摸系统及核心独立外设(CIP),可帮助提高系统吞吐量,同时降低总体功耗。 贸泽电子供应的Microchip ATtiny1617 8位AVR 单片机配有16 K
[单片机]
Microchip ATtiny1617系列<font color='red'>AVR</font> MCU在贸泽开售
AVR单片机的TWI总线的原理及应用
  AVR系列的单片机内部集成了TWI(Two-wire SerialInterface)总线。该总线具有I2C总线的特点,即接线简单,外部硬件只需两个上拉电阻,使用时钟线SCL和数据线SDA就可以将128个不同的设备互连到一起;而且支持主机和从机操作,器件可以工作于发送器模式或接收器模式,数据传输率高达400 kHz。正因为TWI总线具有这么多的优点,因此受到了使用者的青睐。   由于该总线与传统的I2C总线极其相似。因此不少人误以为TWI总线就是I2C总线,其实这只是一种简单化的理解。TWI总线是对I2C总线的继承和发展。它定义了自已的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同;而且TWI总线引入了状奁寄
[单片机]
<font color='red'>AVR</font>单片机的TWI总线的原理及应用
AVR 软件操作库函数
1.C语言宏定义技巧(常用宏定义) 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef unsigned char boolean; typedef unsigned long int uint32; typedef unsigned short uint16; typedef unsigned char uint8; typedef signed long int int32; typedef signed short int16; type
[单片机]
AVR单片机入门系列(25)AVR PWM OC0
系统功能 AVR内部脉宽调制OC0输出实验,用LED指示PWM的频率,在PWM速度较低时,可观察到LED的闪烁。 硬件设计 AVR主控电路原理图 软件设计 //目标系统: 基于AVR单片机 //应用软件: ICC AVR /*01010101010101010101010101010101010101010101010101010101010101010101 ---------------------------------------------------------------------- 实验内容: AVR内部脉宽调制输出实验,用LED指示PWM的频率,在PWM速度较低时,可观察到LED的闪烁
[单片机]
<font color='red'>AVR</font>单片机入门系列(25)<font color='red'>AVR</font> PWM OC0
AVR单片机I/O寄存器的C语言源程序及剖析详解
I/O寄存器的C语言源程序及剖析   在ICCAVR中访问0x00~0x3f的寄存器空间,可以使用内汇编和预处理宏。一个数据内存地址可以通过加指针类型符号直接访问。 例如,SREG寄存器的地址是0x5f,对它的访问操作: unsigned char c; c=*(volatile unsigned char *)0x5f;//读取SREG寄存器   *(volatile unsigned char *)0x5f|=0x80;//打开全局中断允许位  提示:数据内存地址0x00~0x31指向CPU通用寄存器R0~R31,不能随意修改它们的地址(或者输入错误的地址),否则可能会造成致命的错误。   ICCAVR C在io
[单片机]
STM8S103F2 EEPROM读写
/************ STM8S103 EEPROM读写 ******/ /*芯片型号:STM8S103F2PB6 */ /*功能描述:STM8S103 EEPROM读写 */ /*作者: ClimberWin */ /*编写时间:2013.11.24 */ /*功能: STM8S103 EEPROM读写 */ /*内部晶振 */ /***********************************************/ #include iostm8s103f2
[单片机]
电源管理:基于AVR单片机的多功能电源设计
引 言 随着嵌入式系统设计技术的发展,在设计和仿真中,系统 工程师 对 电源 的要求也越来越高。在嵌入式系统设计是使用8031 单片机 和74系列 集成电路 时,所有使用74系列集成电路的 电路 板都使用单一的5 V电源供电就可以了。当时的供电电源部分不是一个需要太多注意的单元,基本上5 V的电源能满足所有的数字集成电路设计的需要。而近几年来,随着技术的发展,集成电路里的 三极管 变得越来越小并且工作的 电压 越来越低,使得嵌入式系统开发的重点从系统的速度,转到 低功耗 设计上。因此在同一个嵌入式系统中,存在多种不同电压的电源供电,从低于1 V到高于5 V都存在。而且在系统的稳定性和可靠性测
[电源管理]
电源管理:基于<font color='red'>AVR</font>单片机的多功能电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved