IIC总线的使用EEPROM芯片的读写程序
- 格式:doc
- 大小:23.00 KB
- 文档页数:5
51单片机第二十二课IIC总线的使用EEPROM芯片的读写
所属类别:课程代码发布日期:2011-03-05 点击量:341 #include
#include
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^1;
sbit scl=P2^0;
unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x00};
unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};
void start(void);
void stop(void);
void ack(void);
void noack(void);
void iicwr_byte(uchar dat);
uchar iicre_byte(void);
void delay (void);
void init(void);
void delay1(void);
void write_byte(uchar add,uchar dat);
uchar read_byte(uchar add);
///////////////////////////////////
void delay1(void)
{
uint a=30000;
while(a--);
}
void delay (void)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void start(void)
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop(void)
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void ack(void)
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<200))i++; scl=0;
delay();
}
void noack(void)
{
sda=1;
delay();
scl=1;
delay();
scl=0;
delay();
}
void init(void)
{
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();
}
uchar iicre_byte(void) {
uchar i;
uchar dat;
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(); */
uchar k;
k=read_byte(7); k=k%10;
P1=smg_du[k]; k++;
write_byte(7,k);