📄 24c61.c
字号:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0;
sbit sclk=P1^1;
sbit kk=P1^2;
sbit kk2=P1^3;
uchar temp5,count_1,temp6;
uchar const tab0[5]={0x01,0x02,0x03,0x04,0x05};
uchar tab1[6];
/**************************************************************************
** 单步延时
*************************************************************************/
void delay(uint us)
{
while(us>0)
us--;
}
/***************************************************************************
** 起始信号
*****************************************************************************/
void iicstart(void)
{
sclk=0;
sda=1;
sclk=1;
delay(2);
sda=0;
delay(2);
sclk=0;
}
/***************************************************************************
** 结束信号
*******************************************************************************/
void iicstop(void)
{
sclk=0;
sda=0;
sclk=1;
sda=1;
delay(2);
sclk=0;
}
/**********************************************************************************
** 检测应答信号
***********************************************************************************/
uchar upcheck(void)
{
uchar i;
sclk=0;
sda=1;
sclk=1;
if(sda==1)
i=0;
else
{
i=1;
count_1++;
}
sclk=0;
return(i);
}
/*******************************************************************************
** 发送应答信号和非应答信号
*********************************************************************************/
void sendcheck(void)
{
sclk=0;
sda=0;
sclk=1;
delay(2);
sclk=0;
}
void senducheck(void)
{
sclk=0;
sda=1;
sclk=1;
delay(2);
sclk=0;
}
/*********************************************************************************
**写入一个字节
**字节内容:addr
*******************************************************************************/
void writeiic(uchar addr)
{
uchar temp1,i;
temp1=addr;
sclk=0;
for(i=0;i<8;i++)
{
if((temp1&0x80)==0)
sda=0;
else
sda=1;
sclk=1;
delay(2);
sclk=0;
temp1=temp1<<1;
}
temp5=upcheck();
}
/******************************************************************************************
**读取一个字节
**读取内容:addr
**********************************************************************************************/
uchar read(uchar addr)
{
uchar temp1,temp2,i;
temp1=addr;
sclk=0;
for(i=0;i<8;i++)
{
if((temp1&0x80)==0)
sda=0;
else
sda=1;
sclk=1;
delay(2);
sclk=0;
temp1=temp1<<1;
}
temp5=upcheck();
sclk=0;
sda=1;
for(i=0;i<8;i++)
{
temp2=temp2<<1;
sclk=1;
delay(2);
if(sda==1)
temp2=temp2|0x01;
sclk=0;
}
senducheck();
return(temp2);
}
/******************************************************************************************************
**读取多个字节
**字节数:cc
**器件地址:addr
**存放地址:chn
**********************************************************************************************************/
void read1(uchar addr,uchar cc,uchar *chn)
{
uchar temp1,temp2,temp3,i;
temp1=addr;
temp3=cc;
sclk=0;
for(i=0;i<8;i++)
{
if((temp1&0x80)==0)
sda=0;
else
sda=1;
sclk=1;
delay(2);
sclk=0;
temp1=temp1<<1;
}
temp5=upcheck();
for(temp1=0;temp1<temp3;temp1++)
{
sclk=0;
sda=1;
for(i=0;i<8;i++)
{
temp2=temp2<<1;
sclk=1;
delay(2);
if(sda==1)
temp2=temp2|0x01;
sclk=0;
}
chn[temp1]=temp2;
temp2=0x00;
if((temp3-temp1)==1)
senducheck();
else
sendcheck();
}
}
/************************************************************************************************
**写多个字节的数据
**字节数:cc
**数据存放地址:chn
*****************************************************************************************************/
void write1iic(uchar cc,uchar *chn)
{
uchar temp1,temp2,temp3,i;
temp2=cc;
sclk=0;
for(temp1=0;temp1<temp2;temp1++)
{
temp3=chn[temp1];
for(i=0;i<8;i++)
{
if((temp3&0x80)==0)
sda=0;
else
sda=1;
sclk=1;
delay(2);
sclk=0;
temp3=temp3<<1;
}
upcheck();
}
}
/***********************************************************************************************/
main()
{
kk=0;
kk2=0;
iicstart(); //写开始
writeiic(0xa0);
writeiic(0x02);
//writeiic(0x01);
//writeiic(0x06);
write1iic(5,tab0);
iicstop();
delay(200);
iicstart(); //读开始
writeiic(0xa0);
writeiic(0x02);
iicstart(); //重起总线
read1(0xa1,4,tab1);
iicstop();
while(1)
{
if(temp5==1&&count_1==7)
kk=1;
if(tab1[0]==0x01&&tab1[3]==0x04)
kk2=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -