新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机-AT24C

51单片机-AT24C

作者: 时间:2016-12-02 来源:网络 收藏
写入EEPROM一个2,然后读出,在数码管上显示出来: #include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P3^6;
sbit SDA = P3^7;
void delay()
{ ;; } //5us
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void Init(){
SCL = 1;
SDA = 1;
}
void start(){
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0;
delay();
}
void stop(){
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();
}
void write(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
uchar read()
{
uchar i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA; // 将SDA赋给K的每一位
SCL=0;
delay();
}
return k;
}
void response(){
int i;
SCL = 1; //在SCL为高电平期间,进行应答
delay();
while((SDA == 1) && (i < 170))i++; //SCL释放总线,等待从设备应答,从设备会把SDA拉低
SCL = 0;
delay();
}
void At24c_Write(uchar address, uchar value){
start();
write(0xa0); //写入设备地址
response();
write(address); //写入首地址
response();
write(value); //写入数据
response();
stop();
}
uchar At24c_Read(uchar address){
uchar value;
start();
write(0xa0); //伪写,先写入设备地址
response();
write(address); //再写入要读取数据的首地址
response();
start(); //再次
write(0xa1); //写入要读取数据的地址,方向为1
response();
value = read(); //读取数据
stop();
return value;
}
void main(){
P1 = 0x0; // 位选,使最地位数码管被选中
Init();
At24c_Write(23,0x5b); // 在EEPROM的23这个地址上写数据0x5b
delay1(100); // 在写和读之间要多延时一会儿,否则器件处理不完
P2 = At24c_Read(23); // 读取23地址的数据,也就是刚才写入的数据
while(1);
}
掉电后数据不丢失,复位后,仍然从刚才掉电的数字开始往下显示。从0"9
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P3^6;
sbit SDA = P3^7;
uchar temp, sum;
uint flag;
unsigned char code duan[]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay()
{ ;; } //5us
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void Init(){
SCL = 1;
SDA = 1;
}
void start(){
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0;
delay();
}
void stop(){
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();

评论


技术专区

关闭