IIC记忆单片机开机次数

发布者:恬淡岁月最新更新时间:2015-06-29 来源: 51hei关键字:IIC  单片机  开机次数 手机看文章 扫描二维码
随时随地手机看文章
IIC具有记忆功能,其实之前没有体会好为什么会记忆,因为编的程序是让灯闪烁的,所以理解不出它可以所谓记忆的原理,今天通过数码管让其记忆单片机开机次数,终于明天了它的真正原理,其实是单片机控制它的时候,程序不断运行,把程序运行得到的数据不断地写入IIC寄存器中,而寄存器是掉电后不数据不会丢失的,所以当我们把程序关了,也就是掉电了以后数据被保存了下来,下次再开机运行的时候,程序是从头开始的,但是地址是从我们上次我们寄存器储存地址开始的,所以就达到了记忆的功能。这个的应用在数据的存储和保护是很大的,比如交通灯记忆违章车辆,账户储存,数据累积等可以靠它进行储存。

下面是IIC记忆单片机开机次数的程序:

程序如下:
//版权所有:单片机网http://www.51hei.com 
#include
#include
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit scl=P2^0;  //这两个位定义是控制IIC的引脚      
sbit sda=P2^1;
uchar number[10]={           //数码管数组定义
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f
};
void delayt(void)//数码管的延时
{
 uint x,y;
 for(x=0;x<5;x++)
 for(y=0;y<120;y++);
}
void delay(void)//IIC的适应延时
{
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
}
void start()//开始
{
 sda=1;
 delay();
 scl=1;
 delay();
 sda=0;
 delay(); 
}
void stop()//停止
{
 sda=0;
 delay();
 scl=1;
 delay();
 sda=1;
 delay();
}
void init()//初始化设置
{
 sda=1;
 scl=1;
}
void answer()//应答
{
 uchar i;
 scl=1;
 while((sda==1)&&(i<250))i++;
 scl=0;
 delay();
}
void noanser()//非应答
{
 scl=1;
 delay();
 sda=1;
 delay();
 scl=0; 
 delay();
}
void writebyte(uchar dat)//写字节
{
 uchar i;
 scl=0;
 delay();
 for(i=0;i<8;i++)
 {
  if(dat&0x80)
  {
  sda=1;
  }
  else
  {
  sda=0;
  }
  dat=dat<<1;
  delay();
  scl=1;
  delay();
  scl=0;
  delay();
 }
 sda=1;
 
}

uchar readbyte()//读字节
{
 uchar i,dat;
 scl=0;
 delay();
 sda=1;
 delay();
 for(i=0;i<8;i++)
 {
 scl=1;
 delay();
 dat=dat<<1;
 if(sda)
 {
 dat++;
 }
 scl=0;
 delay();
 }
 return dat;
}


void write_byte(uchar add,uchar dat)//写字节的封装
{
 init();
 start();
 writebyte(0xae);
 answer();
 writebyte(add);
 answer();
 writebyte(dat);
 answer();
 stop();
}
uchar read_byte(uchar add)//读字节的封装
{
 uchar value;
 init();
 start();
 writebyte(0xae);
 answer();
 writebyte(add);
 answer();
 start();
 writebyte(0xaf);
 answer();
 value=readbyte();
 noanser();
 stop();
 return value;
}
void main()
{
 
 
 uchar temp,k,j;

 temp=read_byte(0x10);//数码管个位和十们的操作
 k=temp/10;
 j=temp%10;
 temp++;
  write_byte(0x10,temp);
 delay();
 while(1) //数码管显示
 {
 P1=number[k];
 P0=0;
 delayt();
 P1=number[j];
 P0=1;
 delayt();
 }
}

关键字:IIC  单片机  开机次数 引用地址:IIC记忆单片机开机次数

上一篇:太阳射电望远镜自动观测控制平台的研究与设计
下一篇:单片机与步进电机的控制

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

用STC12C2052AD单片机制作的0-99V数字电压表
用STC12C2052AD单片机制作的0-99V数字电压表来源于数码之家_abenyao。这个电路我感觉比较有用,原理简单,直接用STC12C2052AD单片机处带的AD,数码管用四位共阳数码管,小数点后面有一点跳动,电路由面包板搭建的电路,基准电压采用TL431产生。下面是实物图: ********************************************************************** 用STC12C2052AD单片机制作的0-99V数字电压表源程序 数码之家首发。ID:abenyao P1.6口为0-5V模拟量输入端,P1.5口连接TL431l输出的2.5V基准电源,4位串行LED数码管显
[单片机]
用STC12C2052AD<font color='red'>单片机</font>制作的0-99V数字电压表
关于51单片机编程的一些错误总结
(1)这两天一直在受一个问题的干扰,那就是做单片机串口通信的时候,有些数据总是传得不对:当显示0~f这些数字的时候,显示没有错误,而显示其它8位数据的时候都错了,发送11(16进制)时,到单片机上居然是49(十进制),这显然是不对的,一直怀疑是程序的问题,反复地检查和修改之前编的一个数码管动态显示子程序,没有错,那只能是串口初始化和串口子程序有问题了……这么想太错了……先入为主,两天以来,都没解决(其实也没什么心情解决了,又是临近周末,都在看老友记),今天打定一定要解决了,就开始研究,刚开始一直在沿着老路,反复修改程序。。。。后来无意间一瞥,看到晶振上标着“12.000”,瞬间明白所有问题所在,立刻改为11.0592Mhz的晶振,
[单片机]
51单片机的精确延时程序一
51单片机的精确延时程序分析(C语言和汇编语言程序) 一、C51程序 在晶振为11.0592的情况下,如下程序能实现ms级的比较精确的延时: 1 void Delayms(unsigned int n) 2 { 3 unsigned int i,j; 4 for(j=n;j 0;j--) 5 for(i=112;i 0;i--); 6 } 用keil可以看出这个延时的时间,我们先延时1ms,即Delayms(1)。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时
[单片机]
单片机硬件IIC和软件IIC区别
1. 硬件IIC用法比较复杂,模拟IIC的流程更清楚一些。 2. 硬件IIC速度比模拟快,并且可以用DMA 3. 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。 4. 软件i2c是程序员使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序。一般较硬件i2c稳定,但是程序较为繁琐,但不难。 5. 硬件i2c程序员只要调用i2c的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出。但是有些单片机的硬件i2c不太稳定,调试问题较多。
[单片机]
STC89C52单片机继电器实验
///////////////////////////////////////////////////////////////////////// 实现功能:打开实验板上的蜂鸣,响0.3秒,然后关闭0.3秒,然后依次这样循环, 同时在实验板上继电器旁边的发光二极管也会跟随继电器不停地闪烁 实验板型号:KBL-XYD-C52 实验名称: 继电器实验 编写人: 谢应东 编写日期: 2012-4-25 ///////////////////////////////////////////////////////////////////////// #include reg52.h
[单片机]
基于AVR单片机数字功率跟随技术
  引言   目前地球的五大问题,包括能源失衡、产油国独裁、失控的气候变迁、能源匮乏、生物多样性消失等,都是因为人类大量使用并依赖传统的能源所造成,而且五大问题环环相扣、迫在眉睫,再不积极采取行动,全人类都将陷入无法想像的浩劫,所以发展替代能源已不仅仅是解决高油价的方案,而是人类能在地球上永续生存下去的最关键要素。煤炭、石油是我国利用的主要能源,它们的巨量消费不仅是大气污染的主要来源,还有其不可再生性,使得它们会逐渐被可再生能源所代替。我国大部分地区有着丰富的风能和太阳能资源,但限于科技的发展程度,它们一直未能得到有效地利用。近些年,随着电子技术和硅材料研究的不断进步,促进了对风能、太阳能的开发利用,市场前景相当广阔。在此前提下,研
[单片机]
基于AVR<font color='red'>单片机</font>数字功率跟随技术
AT89S52单片机的外部引脚及功能
AT89S52是一种带8K字节FPEROM的低电压、高性能CMOS 型8位单片机。AT89S52具有以下主要基本特征: 8位CPU,和MCS-51单片机产品完全兼容 8K字节在系统可编程Flash存储器 1000次擦写周期 振荡器和时钟电路的全静态操作:0Hz~33Hz 三级加密程序存储器 32个可编程I/O口线 3个16位定时器/计数器 8个中断源,6个中断矢量,2级优先权的中断系统 全双工UART串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 具有看门狗定时器 双数据指针DPTR0和DPTR1 具有掉电标识符POF 常见的AT89S52单片机有PDIP封装(如图1所示)、PLCC封装(如图2
[单片机]
AT89S52<font color='red'>单片机</font>的外部引脚及功能
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]
解析8051<font color='red'>单片机</font>的三种数据传输方式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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