微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > IIC记忆单片机开机次数

IIC记忆单片机开机次数

时间:11-30 来源:互联网 点击:
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();
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top