哪位有at24c32的驱动程序啊 帮我个忙 单片机虚拟iic总线的 我的邮箱18947115719@189..cn谢谢 5

哪位高手有at24c32的驱动程序啊帮我个忙单片机虚拟iic总线的我的邮箱18947115719@189..cn谢谢谢谢。。。... 哪位高手有at24c32的驱动程序啊 帮我个忙 单片机虚拟iic总线的 我的邮箱18947115719@189..cn谢谢
谢谢。。。
展开
 我来答
爱绿顿o
2011-10-31
知道答主
回答量:14
采纳率:0%
帮助的人:10.7万
展开全部

#include<reg52.h>

#include<D:\C51_H\LCD1602.H>        //我的自定义LCD1602头文件

/*---------------------------------------------------------------

 24C32可存储4K(1024*4)个字节(8bit),因此寻址地址最大为0x0FFF,24C32为从机。

----------------------------------------------------------------*/

#define WriteDeviceAddress 0x0A2 //定义器件在I2C总线中的写地址(注意:根据自定义从机地址接口改变)

#define ReadDviceAddress 0x0A3   //定义器件在I2C总线中的读地址(注意:根据自定义从机地址接口改变)

sbit SCL=P0^4;           //我的24C32接口设置

sbit SDA=P3^7;

//2us延时子程序

void delay_2us(uchar i)

{

 while(--i);

}

//开始总线

void Start()

{

SDA=1;

SCL=1;

delay_2us(1);

SDA=0;

delay_2us(1);

SCL=0;

}

//结束总线

void Stop()

{

SDA=0;

SCL=1;

delay_2us(1);

SDA=1;

delay_2us(1);

SDA=0;

SCL=0;

}

//发送应答位信号

//void MACK()

//{

//SDA=0;

//SCL=1;

//delay_2us(1);

//SCL=0;

//SDA=1;

//}

//发送非应答位信号

void MNACK()

{

SDA=1;

SCL=1;

delay_2us(1);

SCL=0;

SDA=0;

}

//检测从机应答信号

bit CACK()

{

bit flag;

SDA=1;

SCL=1;

delay_2us(1);

flag=SDA;

SCL=0;

return(flag);

}

/*--------------------------------------------------------------------------

       //写入8个bit到24C32

---------------------------------------------------------------------------*/

Write8Bit(uchar input)

{

uchar temp;

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

{

SDA=(bit)(input&0x80);

SCL=1;

delay_2us(1);

SCL=0;

input=input<<1;

}

}

/*--------------------------------------------------------------------------

          //写入一个字节到24C32中

---------------------------------------------------------------------------*/

void Write24C32(uchar ch,uint address)

{

Start();

Write8Bit(WriteDeviceAddress);

while(CACK());

Write8Bit(address/256);(注意:地址分两次传送,高位在前!)

while(CACK());

Write8Bit(address%256);

while(CACK());

Write8Bit(ch);

while(CACK());

Stop();

}

/*--------------------------------------------------------------------------

          //从24C32中读出8个bit

---------------------------------------------------------------------------*/

uchar Read8Bit()

{

unsigned char temp,rbyte=0;

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

{

SDA=1;

SCL=1;

rbyte=rbyte|((unsigned char)(SDA));

if(temp<7)                //注意:仅左移7次

{

  rbyte=rbyte<<1;

}

SCL=0;

}

return(rbyte);

}

/*--------------------------------------------------------------------------

          从24c32中读出1个字节

---------------------------------------------------------------------------*/

uchar Read24C32(uint address)

{

uchar ch;

Start();

Write8Bit(WriteDeviceAddress);

while(CACK());

Write8Bit(address/256);

while(CACK());

Write8Bit(address%256);

while(CACK());

Start();

Write8Bit(ReadDviceAddress);

while(CACK());

ch=Read8Bit();

MNACK();

Stop();

return(ch);

}

/*--------------------------------------------------------------------------

          主函数

---------------------------------------------------------------------------*/

void main(void) // 主程序

{

 uchar newchar;                            

 LCD1602_init();                           //1602初始化

 Write24C32('8',0x01FF);                   //写'5'进0x1FF

 LCD1602_puts(0,0,"24C32 W_Test OK!");

 newchar=Read24C32(0x01FF);               //从0x1FF接收数据

 LCD1602_puts(0,1,"ReadValue=");

 LCD1602_puts(10,1,newchar);

 while(1);

邮箱的我也发了,这里还是要贴出来。可以给大家一个参考!

注明一下:我这里使用的是LCD1602显示的是ReadValue,使用时SCL和SDA加10K的上拉电阻,否则无法确定总线空闲哦!!

意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式