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里面已经存储的值,直接继续加上去
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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)