24c02程序 高手请进
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了24c02程序 高手请进相关的知识,希望对你有一定的参考价值。
程序目的是 记录开机次数,每次开机把次数存入24c02中
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sck=P1^0;
sbit sda=P1^1;
sbit wp=P1^2;
void delay1()
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
void delay(uchar a)
uchar z,j;
for(z=0;z<a;z++)
for(j=0;j<112;j++);
void i2cinit()
sck=1;
sda=1;
void start() //起始信号
sda=1;
delay1();
sck=1;
delay1();
sda=0;
delay1();
sck=0;
delay1();
void stop() //终止信号
sda=0;
delay1();
sck=1;
delay1();
sda=1;
delay1();
void ack() //应答信号
sck=1;
delay1();
while(sda==1);
sck=0;
delay1();
void noack() //非应答信号
sda=1;
delay1();
sck=1;
delay1();
sck=0;
delay1();
void i2cwrite_byte(uchar dat) //I2C写一个字节
uchar i;
sck=0;
for(i=0;i<8;i++)
sda=dat&&0x80;
sck=1;
delay1();
sck=0;
dat<<=1;
sda=1;
delay(5);
uchar i2cread_byte() //I2C读一个字节
uchar i,num;
sck=0;
delay1();
sda=1;
delay1();
for(i=0;i<8;i++)
sck=1;
delay1();
num<<=1;
if(sda)
num++;
sck=0;
delay1();
delay1();
sda=1;
return num;
delay(5);
void writei2c(uchar add,uchar dat) //I2C写时序
i2cinit();
start();
i2cwrite_byte(0xa0);
ack();
i2cwrite_byte(add);
ack();
i2cwrite_byte(dat);
ack();
stop();
uchar readi2c(uchar add) //I2C读时序
uchar num;
i2cinit();
start();
i2cwrite_byte(0xa0);
ack();
i2cwrite_byte(add);
ack();
start();
i2cwrite_byte(0xa1);
ack();
num=i2cread_byte();
noack();
stop();
return num;
void main() //主函数
uchar k=0;
k=readi2c(0);
k=k%10;
P3=k;
k++;
writei2c(0,k);
while(1);
解决的问题的有高分
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=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);
dula=1; //开机次数送数码管显示
P0=table[k];
dula=0;
wela=1;
P0=0xfe;
wela=0;
k++;
writeadd(3,k);
while(1);
高手不敢说,刚学习的,已经调试过了,可以正常运行,记录开机次数
不过你要先把24c02清0,他才会从0开始计数
否则他会读取24c02里面已经存储的值,直接继续加上去
我的程序里面他只能记录16次,要更多的话你可以自己扩展
qq807761589 有不懂的再来问我本回答被提问者采纳
C语言高手请进
有一个简单的程序,老是运行不了,也不知道错在哪,请高手指点
main()
int num1,num2,max;
scanf("%d,%d",&num1,&num2);
printf("max=%d\n",max(num1,num2));
int max(int x,int y)
if(x>y) return x;
else return y;
把你们谁改好的程序,发过来,我一看就明白
main函数之外你定义了一个叫max的函数,
会造成编译时二义性.所以不能运行.
(因为在函数中定义的同名变量或函数会覆盖该
函数体外的变量或函数) 参考技术A scanf("%d,%d",&num1,&num2);
把%d,%d中间的逗号取掉.再加上头文件
还有楼下的说:函数申明 参考技术B 函数使用前需要声明。
main()
int num1,num2,max;
int max(int x,int y);
scanf("%d,%d",&num1,&num2);
printf("max=%d\n",max(num1,num2));
int max(int x,int y)
if(x>y) return x;
else return y;
参考技术C int num1,num2,max;//定义函数出错;
改为:
int max(int x,int y);
int int num1,num2;
另外:建议你不要用max这个字符,避免和某些关键字符重复! 参考技术D 在使用函数的时候需要加以声明的,声明应该在使用该函数之前,即在printf("max=%d\n",max(num1,num2));
这句话之前应该有一句
int max(int x,int y);
,或者直接把
int max(int x,int y)
if(x>y) return x;
else return y;
这句写在main函数之前,也就是最上边,已达到声明的效果 第5个回答 2007-09-22 int max(int x,int y)
if(x>y) return x;
else return y;
main()
int num1,num2;
scanf("%d,%d",&num1,&num2);
printf("max=%d\n",max(num1,num2));
以上是关于24c02程序 高手请进的主要内容,如果未能解决你的问题,请参考以下文章