AT24C02做密码锁c程序——西华师范大学电子协会黄超自学51单片机总结

#include <reg52.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit sda=P2^1;

sbit scl=P2^0;

void delay()

{

_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); }

void delay1();

void start();

void stop();

void ack();

void noack();

void iicwr_byte(uchar dat); uchar iicre_byte();

void init();

void delay1()

{

uint a=30000;

while(a--);

}

void start()

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}

void stop()

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}

void ack()

{

uchar i;

scl=1;

delay();

while((sda==0) && (i<200)) {

i++;

}

scl=0;

delay();

}

void noack()

{

sda=1;

delay();

scl=1;

delay();

scl=0;

delay();

}

void init()

{

sda=1;

scl=1;

}

void iicwr_byte(uchar dat) {

uchar i;

scl=0;

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

{

if(dat&0x80) {

sda=1; }

else

{

sda=0; }

dat=dat<<1; delay(); scl=1; delay(); scl=0; delay();

}

sda=1; delay();

}

void iicre_byte() {

uchar i; scl=0; delay(); sda=1; delay();

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

scl=1; delay(); dat=dat<<1; if(sda) {

dat++; } scl=0; delay(); }

return dat;

}

void main() {

init(); start();

iicwr_byte(0xa0); ack();

iicwr_byte(10);

} ack(); iicwr_byte(0x55); ack(); stop(); delay1(); init(); start(); iicwr_byte(0xa0); ack(); iicwr_byte(10); ack(); start(); iicwr_byte(0xa1); ack(); P0=iicre_byte();; noack(); stop(); while(1);

相关推荐