#include "SonixC51.h"
#include "delay.h"
#include "i2c_key.h"
#include "TMD2771.H"
/*****************全局变量定义********************/
/*****************局部变量定义********************/
/*****************声明外部变量********************/
static void delay10us(void)
{
nop();nop();nop();nop();
nop();nop();nop();nop();
nop();nop();//10
nop();nop();nop();nop();
nop();nop();nop();nop();
nop();nop();//10
}
void I2CStart(void)
{
delay10us();
IO_SDA_KEYM_IN;
delay10us();
IO_SCL_KEYM_IN;
delay10us();
IO_SDA_KEY_LOW;
delay10us();
IO_SCL_KEY_LOW;
delay10us();
}
void I2CStop(void)
{
delay10us();
IO_SDA_KEY_LOW;
delay10us();
IO_SCL_KEY_LOW;
delay10us();
IO_SCL_KEYM_IN;
delay10us();
IO_SDA_KEYM_IN;
delay10us();
}
u8 I2CReadAck(void)
{
static u8 temp;
delay10us();
IO_SDA_KEYM_IN;//设为输入状态
delay10us();
IO_SCL_KEYM_IN;
delay10us();
if(IO_SDA_KEY_RD)
{
temp = C_NACK;//无应答信号
}
else
{
temp = C_ACK;//有应答信号
}
IO_SCL_KEY_LOW;
return (temp);
}
void I2CWriteNoAck(void)
{
delay10us();
IO_SDA_KEYM_IN;
delay10us();
IO_SCL_KEYM_IN;
delay10us();
IO_SCL_KEY_LOW;
delay10us();
}
void I2CWriteAck(void)
{
delay10us();
IO_SDA_KEY_LOW;
delay10us();
IO_SCL_KEYM_IN;
delay10us();
IO_SCL_KEY_LOW;
delay10us();
}
void I2CWriteByte(u8 u8data)
{
static u8 i;
for(i=0u;i<8u;i++)
{
if (0!=(u8data&0x80u))
{
IO_SDA_KEYM_IN;
}
else
{
IO_SDA_KEY_LOW;
}
delay10us();
IO_SCL_KEYM_IN;
delay10us();
IO_SCL_KEY_LOW;
delay10us();
u8data<<=1u;
}
}
u8 I2CReadByte(void)
{
static u8 i,u8data;
u8data=0;
IO_SCL_KEY_LOW;
delay10us();
IO_SDA_KEYM_IN;//设为输入状态
delay10us();
for (i=0u;i<8u;i++)
{
IO_SCL_KEYM_IN;
delay10us();
u8data <<= 1u;
if (IO_SDA_KEY_RD)
{
u8data|=0x01;
}
else
{
nop();
}
IO_SCL_KEY_LOW;
delay10us();
}
return (u8data);
}
/*******************************************************
* 函数名:SignalReadI2CData
* 描述 :读取I2C数据
* 输入 :无
* 输出 :无
* 调用 :5ms调用
*********************************************************/
u8 SignalReadI2CData(u8 Reg_Addr)
{
static u8 u8key_data;
// while(1)
// {
// Reg_Addr=0x4B;
// I2CStart();
// I2CWriteByte(MAC_ADDR+I2C_Write);
// if(I2CReadAck()==C_NACK)
// {
// I2CStop();
// return C_ERROR;
// }
//
// I2CWriteByte(Reg_Addr);
// if(I2CReadAck()==C_NACK)
// {
// I2CStop();
// return C_ERROR;
// }
// I2CStart();
// I2CWriteByte(MAC_ADDR+I2C_Read);
// if(I2CReadAck()==C_NACK)
// {
// I2CStop();
// return C_ERROR;
// }
// u8key_data=I2CReadByte();
// I2CWriteNoAck();
// I2CStop();
//
// if(u8key_data!=0)
// {
// delay_5us(200);
// }
// WDTR = 0x5a;
// delay_5us(200);
// }
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Write);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CWriteByte(Reg_Addr);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Read);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
u8key_data=I2CReadByte();
I2CWriteNoAck();
I2CStop();
return (u8key_data);
}
/*******************************************************
* 函数名:MulReadI2CData
* 描述 :连续读取I2C数据
* 输入 :无
* 输出 :无
* 调用 :5ms调用
*********************************************************/
u8 MulReadI2CData(u8 Strart_Reg_Addr,u8 LEN,u8 *buf)
{
u8 i;
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Write);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CWriteByte(Strart_Reg_Addr);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Read);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
for(i=0;i<LEN;i++)
{
*buf++=I2CReadByte();
I2CWriteAck();
}
I2CWriteNoAck();
I2CStop();
return C_SUCCESS;
}
/*******************************************************
* 函数名:WriteI2CData
* 描述 : 写入I2C数据
* 输入 :无
* 输出 :无
* 调用 :5ms调用
*********************************************************/
u8 WriteI2CData(u8 Reg_Addr,u8 *dat,u8 len)
{
u8 i;
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Write);
if(I2CReadAck()!=C_ACK){I2CStop(); return C_ERROR;}
I2CWriteByte(Reg_Addr);
if(I2CReadAck()!=C_ACK){I2CStop(); return C_ERROR;}
for(i=0;i<len;i++)
{
I2CWriteByte(*(dat+i));
if(I2CReadAck()!=C_ACK){I2CStop(); return C_ERROR;}
}
I2CStop();
return C_SUCCESS;
}
u8 SignalReadI2CData_test(u8 Reg_Addr,u8 *dat)
{
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Write);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CWriteByte(Reg_Addr);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
I2CStart();
I2CWriteByte(MAC_ADDR+I2C_Read);
if(I2CReadAck()==C_NACK)
{
I2CStop();
return C_ERROR;
}
*dat=I2CReadByte();
I2CWriteNoAck();
I2CStop();
return C_SUCCESS;
}
没有合适的资源?快使用搜索试试~ 我知道了~
距离传感器RPR-0521RS 驱动 用KEIL C51编写.zip
共109个文件
lst:26个
obj:25个
h:19个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 23 浏览量
2023-10-11
20:32:58
上传
评论
收藏 407KB ZIP 举报
温馨提示
距离传感器RPR-0521RS 驱动 用KEIL C51编写.zip
资源推荐
资源详情
资源评论
收起资源包目录
距离传感器RPR-0521RS 驱动 用KEIL C51编写.zip (109个子文件)
BatteryClass.__i 157B
Scan_Switch.__i 154B
Table.__i 131B
PWM.__i 117B
ADC.__i 117B
FLASH.__i 117B
STARTUP.A51 6KB
OPTIONS_SN8F5702.A51 3KB
main.uvgui.Administrator 72KB
main.uvgui.lqq_lin.bak 147KB
main.uvgui_Administrator.bak 73KB
main.BIN 4KB
I2C_Key.c 5KB
BatteryClass.c 5KB
FLASH.C 5KB
TMD2771.c 4KB
SN8F5702BSP_ADC.c 4KB
main.c 3KB
scan_key.c 2KB
drive.c 2KB
sysnit.c 2KB
delay.c 2KB
isr.c 2KB
Disp.c 1KB
time.c 1KB
ADC_FUNC.C 211B
SN8F5702Config.h 8KB
SN8F5702.H 6KB
define.h 4KB
SN8F5702BSP_PWM.h 3KB
SonixC51.h 3KB
TMD2771.h 2KB
intrinsic.h 1KB
I2C_Key.h 1KB
SN8F5702BSP_ADC.h 1KB
BatteryClass.h 477B
delay.h 445B
ADC.h 235B
drive.h 174B
scan_key.h 152B
sys_init.h 132B
ADC_FUNC.H 74B
time.h 65B
Disp.h 65B
SN8F570210.H 21B
main.hex 10KB
ExtDll.iex 19B
main.uvgui.lqq.lin 147KB
main.lnp 406B
Tapping_Mode.lst 20KB
ADC.lst 14KB
STARTUP.LST 14KB
I2C_Key.lst 11KB
Data_Deal.lst 11KB
Controller_Data_RW.lst 10KB
PWM.lst 10KB
BatteryClass.lst 9KB
FLASH.lst 9KB
Table.lst 9KB
TMD2771.lst 8KB
SN8F5702BSP_ADC.lst 7KB
OPTIONS_SN8F5702.LST 6KB
Scan_Switch.lst 6KB
UART.lst 6KB
main.lst 5KB
scan_key.lst 5KB
drive.lst 5KB
sysnit.lst 5KB
delay.lst 4KB
isr.lst 4KB
deal_key.lst 4KB
Disp.lst 3KB
time.lst 3KB
ADC_FUNC.lst 2KB
SN8F5702BSP_PWM.lst 644B
main.M51 26KB
main 283KB
main.MAP 194KB
I2C_Key.obj 39KB
BatteryClass.obj 30KB
main.obj 29KB
TMD2771.obj 26KB
SN8F5702BSP_ADC.obj 25KB
Tapping_Mode.obj 25KB
Controller_Data_RW.obj 24KB
drive.obj 23KB
Data_Deal.obj 23KB
ADC.obj 23KB
sysnit.obj 23KB
Scan_Switch.obj 22KB
delay.obj 21KB
FLASH.obj 20KB
PWM.obj 20KB
ADC_FUNC.obj 19KB
UART.obj 17KB
scan_key.obj 17KB
Table.obj 15KB
Disp.obj 15KB
isr.obj 14KB
time.obj 12KB
共 109 条
- 1
- 2
资源评论
- Serei6232024-02-11实在是宝藏资源、宝藏分享者!感谢大佬~
- 2301_765122392024-04-15资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
N201871643
- 粉丝: 796
- 资源: 2280
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功