📄 24lcxx.c
字号:
/*
*********************************************************************************************************
*
* 低成本汇率电子显示屏控制系统的开发
* 独立本科段毕业设计
*
* Since 2004 - 2005
* All Rights Reserved.
*
*
*------------------------------------------文件信息------------------------------------------------------
*
* 文件名 : 24LCXX.C
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
* 描 述 : 24系列串行EEPROM的驱动程序。支持24系列16bit地址的所有器件。
*
*------------------------------------------日志记录------------------------------------------------------
*
* 版 本 : V1.01
* 作 者 : li.yao
* 日 期 : 2005年 03月 01日,星期二
* 变 更 : 修改了几处BUGS,补全了注释。
*
*--------------------------------------------------------------------------------------------------------
*
* 版 本 : V1.00 格式说明: 主版本号 . 升级版本号 + 内部测试版本号
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
* 变 更 : 文件建立。
*
*********************************************************************************************************
*/
#include "..\INC\HEADER.H"
/*
*********************************************************************************************************
* 配置参数 *
*********************************************************************************************************
*/
#define WADDR 0xA0 // 地址格式: | 1 | 0 | 1 | 0 | A2 | A1 | A0 | R/W |
#define RADDR 0xA1
/*
*********************************************************************************************************
* 函数说明
*
* 函数名 : void Delay(INT16U count);
* 参数表 : count: 延时计数的次数。
* 返回值 : none
* 功 能 : 延时子程序。
*
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
*
*-----------------------------------------日志记录-------------------------------------------------------
*
* 版 本 : V1.00 格式说明:主版本号 . 升级版本号 + 内部测试版本号
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
* 变 更 : 函数建立。
*
*********************************************************************************************************
*/
void Delay(INT16U count)
{
INT8U i;
for(i = 0; i < count; i++) _nop_();
}
/*
*********************************************************************************************************
* 函数说明
*
* 函数名 : INT8U ReadData(INT16U offset, void *buffer, INT16U count);
* 参数表 : offset: 数据保存在串行EEPROM内的地址。
* *buffer: 读取数据保存的首地址。
* count: 读取数据的字节数。
* 返回值 : 是否超时错误。
* 功 能 : 从串行EEPROM中读取指定个数的字节数据。
*
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
*
*-----------------------------------------日志记录-------------------------------------------------------
*
* 版 本 : V1.01
* 作 者 : li.yao
* 日 期 : 2005年 03月 01日,星期二
* 变 更 : 增加了错误类型的返回值。
*
*--------------------------------------------------------------------------------------------------------
*
* 版 本 : V1.00 格式说明:主版本号 . 升级版本号 + 内部测试版本号
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
* 变 更 : 函数建立。
*
*********************************************************************************************************
*/
INT8U ReadData(INT16U offset, void *buffer, INT16U count)
{
INT8U *addr;
INT8U err;
INT16U i = 0;
addr = (INT8U *)(&offset);
I2cStart();
I2cWrite(WADDR);
err = I2cAckR();
I2cWrite(addr[1]);
err = I2cAckR();
I2cWrite(addr[0]);
err = I2cAckR();
I2cStart();
I2cWrite(RADDR);
err = I2cAckR();
while (1)
{
((INT8U *)buffer)[i++] = I2cRead();
if (i < count)
{
I2cAckS();
} else {
I2cNotAckS();
break;
}
}
I2cStop();
return err;
}
/*
*********************************************************************************************************
* 函数说明
*
* 函数名 : INT8U WriteData(INT16U offset, void *buffer, INT16U count);
* 参数表 : offset: 数据保存在串行EEPROM内的地址。
* *buffer: 要写入数据的首地址。
* count: 写入数据的字节数。
* 返回值 : 是否超时错误。
* 功 能 : 从串行EEPROM中写入指定个数的字节数据。
*
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
*
*-----------------------------------------日志记录-------------------------------------------------------
*
* 版 本 : V1.01
* 作 者 : li.yao
* 日 期 : 2005年 03月 01日,星期二
* 变 更 : 增加了错误类型的返回值。
*
*--------------------------------------------------------------------------------------------------------
*
* 版 本 : V1.00 格式说明:主版本号 . 升级版本号 + 内部测试版本号
* 作 者 : li.yao
* 日 期 : 2004年 05月 13日,星期四
* 变 更 : 函数建立。
*
*********************************************************************************************************
*/
INT8U WriteData(INT16U offset, void *buffer, INT16U count)
{
INT8U *addr;
INT8U err;
INT16U i = 0;
addr = (INT8U *)(&offset);
I2cStart();
I2cWrite(WADDR);
err = I2cAckR();
I2cWrite(addr[1]);
err = I2cAckR();
I2cWrite(addr[0]);
err = I2cAckR();
while (i < count)
{
I2cWrite(((INT8U *)buffer)[i++]);
err = I2cAckR();
}
I2cStop();
Delay(4000);
return err;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -