AT24C02开机记忆
时间:08-18
来源:互联网
点击:
//************************************
/*
程序功能:记忆开机的次数,并显示在数码管上
*/
//************************************
#includereg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[]={0x80,0xed,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08};
//****管脚定义****
sbit scl=P0^3;//艾方西的数据线
sbit sda=P0^4;//艾方西的时钟线
sbit rck=P2^0;
sbit sck=P2^1;
sbit si=P2^2; //数码管的串行数据输入端
sbit key1=P1^0;
//====函数的声明=====
void delayus();//微秒级延时函数
void delayms();//毫秒级延时函数
void start();//起始函数
void stop();//终止函数
void ack();//应答函数
void noack();//非应答函数
void write_byte(uchar date);//写字节函数
uchar read_byte();//读字节函数
void xie(uchar add,uchar date);//写操作函数
uchar du(uchar add);//读操作函数
void write_595(uchar date);//数码管
void smg_595(uint j,uint i);
//************************************
void delayus()
{
; ; ;
}
/*void delayms(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=110;j>0;j--);
} */
void start()
{
sda=1;
delayus();
scl=1;//时钟线在高电平期间,数据线由高到底的跳变表示起始
delayus();
sda=0;
delayus();
}
void stop()
{
sda=0;
delayus();
scl=1; //时钟线在高电平期间,数据线由底到高的跳变表示终止
delayus();
sda=1;
delayus();
}
void ack()
{
uint i=0;
scl=1;
if((sda==1)(i250))i++;
scl=0;
delayus();
}
void noack()
{
sda=1;
delayus();
scl=0;
delayus();
scl=1;
delayus();
scl=0;
}
void write_byte(uchar date)
{
uint i;
scl=0;
for(i=0;i8;i++)
{
if(date0x80)
{
sda=1;
}
else
{
sda=0;
}
scl=1;
date=date1;
delayus();
scl=0;
sda=1;
delayus();
}
sda=1;
delayus();
}
uchar read_byte()
{
uint i;
uchar date=0x00;
sda=1;
delayus();
scl=0;
delayus();
for(i=0;i8;i++)
{
scl=1;
delayus();
date=date1;
if(sda)
{
date++;
}
scl=0;
delayus();
}
return date;
}
void xie(uchar add,uchar date)
{
start();
write_byte(0xa0);
ack();
write_byte(add);
ack();
write_byte(date);
ack();
stop();
}
uchar du(uchar add)
{
uchar k;
start();
write_byte(0xa0);
ack();
write_byte(add);
ack();
start();
write_byte(0xa1);
ack();
k=read_byte();
noack();
stop();
return k;
}
void chushihua()
{
sda=1;
scl=1;
}
void main()
{
uchar k=0;
k=du(7);
k=k%10;
smg_595(k,k);
k++;
xie(7,k);
while(1);
}
void smg_595(uint j,uint i)
{
write_595(num[i]);
write_595(num[j]);
rck=0;
rck=1;
}
void write_595(uchar date)
{
uint i;
for(i=0;i8;i++)
{
date>>=1;
sck=0;
si=CY;
sck=1;
}
}
/*
程序功能:记忆开机的次数,并显示在数码管上
*/
//************************************
#includereg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[]={0x80,0xed,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08};
//****管脚定义****
sbit scl=P0^3;//艾方西的数据线
sbit sda=P0^4;//艾方西的时钟线
sbit rck=P2^0;
sbit sck=P2^1;
sbit si=P2^2; //数码管的串行数据输入端
sbit key1=P1^0;
//====函数的声明=====
void delayus();//微秒级延时函数
void delayms();//毫秒级延时函数
void start();//起始函数
void stop();//终止函数
void ack();//应答函数
void noack();//非应答函数
void write_byte(uchar date);//写字节函数
uchar read_byte();//读字节函数
void xie(uchar add,uchar date);//写操作函数
uchar du(uchar add);//读操作函数
void write_595(uchar date);//数码管
void smg_595(uint j,uint i);
//************************************
void delayus()
{
; ; ;
}
/*void delayms(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=110;j>0;j--);
} */
void start()
{
sda=1;
delayus();
scl=1;//时钟线在高电平期间,数据线由高到底的跳变表示起始
delayus();
sda=0;
delayus();
}
void stop()
{
sda=0;
delayus();
scl=1; //时钟线在高电平期间,数据线由底到高的跳变表示终止
delayus();
sda=1;
delayus();
}
void ack()
{
uint i=0;
scl=1;
if((sda==1)(i250))i++;
scl=0;
delayus();
}
void noack()
{
sda=1;
delayus();
scl=0;
delayus();
scl=1;
delayus();
scl=0;
}
void write_byte(uchar date)
{
uint i;
scl=0;
for(i=0;i8;i++)
{
if(date0x80)
{
sda=1;
}
else
{
sda=0;
}
scl=1;
date=date1;
delayus();
scl=0;
sda=1;
delayus();
}
sda=1;
delayus();
}
uchar read_byte()
{
uint i;
uchar date=0x00;
sda=1;
delayus();
scl=0;
delayus();
for(i=0;i8;i++)
{
scl=1;
delayus();
date=date1;
if(sda)
{
date++;
}
scl=0;
delayus();
}
return date;
}
void xie(uchar add,uchar date)
{
start();
write_byte(0xa0);
ack();
write_byte(add);
ack();
write_byte(date);
ack();
stop();
}
uchar du(uchar add)
{
uchar k;
start();
write_byte(0xa0);
ack();
write_byte(add);
ack();
start();
write_byte(0xa1);
ack();
k=read_byte();
noack();
stop();
return k;
}
void chushihua()
{
sda=1;
scl=1;
}
void main()
{
uchar k=0;
k=du(7);
k=k%10;
smg_595(k,k);
k++;
xie(7,k);
while(1);
}
void smg_595(uint j,uint i)
{
write_595(num[i]);
write_595(num[j]);
rck=0;
rck=1;
}
void write_595(uchar date)
{
uint i;
for(i=0;i8;i++)
{
date>>=1;
sck=0;
si=CY;
sck=1;
}
}
- 51单片机读写AT24C02源代码(详细注释)(12-02)
- 51单片机的at24c02驱动程序(12-01)
- I2C总线AT24C02芯片应用(12-01)
- AT24C02EEPROM芯片《实现对其读和写》(12-01)
- i2c总线AT24C02存储器读写程序(11-29)
- STM32 I2C AT24C02驱动(11-25)