24c02程序 高手请进

24c02程序 高手请进,第1张

#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(xx>0x--)

for(y=110y>0y--)

}

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=8i>0i--)

{

sda=(bit)(input&0x80)

scl=1

scl=0

input=input<<1

}

}

char readbyte()

{

char i,k

for(i=8i>0i--)

{

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 有不懂的再来问我

下面给你一个24C02的程序 你编个主函数把密码存进去 然后再用矩阵扫描 加上判断就可以了

还有个步进电机就哦了 就这块比较难写

#include<reg52.h>

#define uchar unsigned char

sbit sda=P0^0

sbit scl=P0^1

uchar a

void delay()

{ }

void start() //开始信号

{

sda=1

delay()

scl=1

delay()

sda=0

delay()

}

void stop() //停止

{

sda=0

delay()

scl=1

delay()

sda=1

delay()

}

void respons() //应答

{

uchar i

scl=1

delay()

while((sda==1)&&(i<250))i++

scl=0

delay()

}

void init()

{

sda=1

delay()

scl=1

delay()

}

void write_byte(uchar date)

{

uchar i,temp

temp=date

for(i=0i<8i++)

{

temp=temp<<1

scl=0

delay()

sda=CY

delay()

scl=1

delay()

// scl=0

// delay()

}

scl=0

delay()

sda=1

delay()

}

uchar read_byte()

{

uchar i,k

scl=0

delay()

sda=1

delay()

for(i=0i<8i++)

{

scl=1

delay()

k=(k<<1)|sda

scl=0

delay()

}

return k

}

void delay1(uchar x)

{

uchar a,b

for(a=xa>0a--)

for(b=100b>0b--)

}

void write_add(uchar address,uchar date)

{

start()

write_byte(0xa0)

respons()

write_byte(address)

respons()

write_byte(date)

respons()

stop()

}

uchar read_add(uchar address)

{

uchar date

start()

write_byte(0xa0)

respons()

write_byte(address)

respons()

start()

write_byte(0xa1)

respons()

date=read_byte()

stop()

return date

}

void main()

{

init()

write_add(8,0x55)

delay1(200)

P1=read_add(8)

while(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11027550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存