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);

解决的问题的有高分

参考技术A #include<reg51.h>

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;

把你们谁改好的程序,发过来,我一看就明白

你在主程序中定义了一个叫max的整型变量,而
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程序 高手请进的主要内容,如果未能解决你的问题,请参考以下文章

Linux高手请进,急急急!Linux脚本,与二进制程序的异同

JAVA 高手请进

急急!汇编高手请进!

C语言高手请进

java高手请进

关于CPU利用率的计算问题(高手请进,谢谢)