24c02程序 高手请进
发布网友
发布时间:2022-04-26 17:49
我来回答
共1个回答
热心网友
时间:2023-10-18 23:12
#include<reg51.h>
sbit sda=P2^0;
sbit scl=P2^1;
sbit la=P2^6; // 数码管段选位
sbit wela=P2^7; // 数码管位选位
char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delaym(int x)
{
int y;
for(x;x>0;x--)
for(y=110;y>0;y--);
}
void start()
{
scl=1;
sda=1;
sda=0;
scl=0;
}
void stop()
{
scl=0;
sda=0;
scl=1;
sda=1;
}
bit testack()
{
bit errorbit;
sda=1;
scl=1;
errorbit=sda;
scl=0;
return(errorbit);
}
void writebyte(char input)
{
char i;
for(i=8;i>0;i--)
{
sda=(bit)(input&0x80);
scl=1;
scl=0;
input=input<<1;
}
}
char readbyte()
{
char i,k;
for(i=8;i>0;i--)
{
scl=1;
k=(k<<1)|sda;
scl=0;
}
return(k);
}
void writeadd(char address,char date)
{
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
writebyte(date);
testack();
stop();
delaym(10);
}
char readadd(char address)
{
char ch;
start();
writebyte(0xa0);
testack();
writebyte(address);
testack();
start();
writebyte(0xa1);
testack();
ch=readbyte();
stop();
return(ch);
}
void main()
{
char k;
k=readadd(3);
la=1; //开机次数送数码管显示
P0=table[k];
la=0;
wela=1;
P0=0xfe;
wela=0;
k++;
writeadd(3,k);
while(1);
}
高手不敢说,刚学习的,已经调试过了,可以正常运行,记录开机次数
不过你要先把24c02清0,他才会从0开始计数
否则他会读取24c02里面已经存储的值,直接继续加上去
我的程序里面他只能记录16次,要更多的话你可以自己扩展
qq807761589 有不懂的再来问我