#include "common.h"
#define DELAY_TIME 5
/** 定义I2C总线时钟线和数据线 */
sbit scl = P2^0;
sbit sda = P2^1;
uint8_t adc_value;
/**
* @brief I2C总线中一些必要的延时
*
* @param[in] i - 延时时间调整.
* @return none
*/
void i2c_delay(unsigned char i)
{
do
{
_nop_();
}
while(i--);
}
/**
* @brief 产生I2C总线启动条件.
*
* @param[in] none
* @param[out] none
* @return none
*/
void i2c_start(void)
{
sda = 1;
scl = 1;
i2c_delay(DELAY_TIME);
sda = 0;
i2c_delay(DELAY_TIME);
scl = 0;
}
/**
* @brief 产生I2C总线停止条件
*
* @param[in] none
* @param[out] none.
* @return none
*/
void i2c_stop(void)
{
sda = 0;
scl = 1;
i2c_delay(DELAY_TIME);
sda = 1;
i2c_delay(DELAY_TIME);
}
/**
* @brief I2C发送一个字节的数据
*
* @param[in] byt - 待发送的字节
* @return none
*/
void i2c_sendbyte(unsigned char byt)
{
unsigned char i;
//
EA = 0;
for(i=0; i<8; i++){
scl = 0;
i2c_delay(DELAY_TIME);
if(byt & 0x80){
sda = 1;
}
else{
sda = 0;
}
i2c_delay(DELAY_TIME);
scl = 1;
byt <<= 1;
i2c_delay(DELAY_TIME);
}
EA = 1;
//
scl = 0;
}
/**
* @brief 等待应答
*
* @param[in] none
* @param[out] none
* @return none
*/
unsigned char i2c_waitack(void)
{
unsigned char ackbit;
scl = 1;
i2c_delay(DELAY_TIME);
ackbit = sda; //while(sda); //wait ack
scl = 0;
i2c_delay(DELAY_TIME);
return ackbit;
}
/**
* @brief I2C接收一个字节数据
*
* @param[in] none
* @param[out] da
* @return da - 从I2C总线上接收到得数据
*/
unsigned char i2c_receivebyte(void)
{
unsigned char da;
unsigned char i;
//
EA = 0;
for(i=0;i<8;i++){
scl = 1;
i2c_delay(DELAY_TIME);
da <<= 1;
if(sda)
da |= 0x01;
scl = 0;
i2c_delay(DELAY_TIME);
}
EA = 1;
//
return da;
}
/**
* @brief 发送应答
*
* @param[in] ackbit - 设定是否发送应答
* @return - none
*/
void i2c_sendack(unsigned char ackbit)
{
scl = 0;
sda = ackbit; //0:发送应答信号;1:发送非应答信号
i2c_delay(DELAY_TIME);
scl = 1;
i2c_delay(DELAY_TIME);
scl = 0;
sda = 1;
i2c_delay(DELAY_TIME);
}
/**
* @brief 读写操作过程中一些必要的延时
*
* @param[in] i - 指定延时时间
* @return - none
*/
void operate_delay(unsigned char t)
{
unsigned char i;
while(t--){
for(i=0; i<112; i++);
}
}
#ifdef EEPROM_AT24C02 /** EEPROM AT24C02操作函数 */
/**
* @brief 向AT24C02(add)中写入数据val
*
* @param[in] add - AT24C02存储地址
* @param[in] val - 待写入AT24C02相应地址的数据
* @return - none
*/
void write_eeprom(unsigned char add,unsigned char val)
{
i2c_start();
i2c_sendbyte(0xa0);
i2c_waitack();
i2c_sendbyte(add);
i2c_waitack();
i2c_sendbyte(val);
i2c_waitack();
i2c_stop();
operate_delay(10);
}
/**
* @brief 从AT24C02(add)中读出数据da
*
* @param[in] add - AT24C02存储地址
* @param[out] da - 从AT24C02相应地址中读取到的数据
* @return - da
*/
unsigned char read_eeprom(unsigned char add)
{
unsigned char da;
i2c_start();
i2c_sendbyte(0xa0);
i2c_waitack();
i2c_sendbyte(add);
i2c_waitack();
i2c_start();
i2c_sendbyte(0xa1);
i2c_waitack();
da = i2c_receivebyte();
i2c_sendack(0);
i2c_stop();
return da;
}
#endif
#ifdef ADC_PCF8591 /** ADC芯片PCF8591操作函数 */
/**
* @brief PCF8591初始化
*
* @param[in] none
* @param[out] none
* @return none
*/
void init_pcf8591(uint8_t object)
{
i2c_start();
i2c_sendbyte(0x90);
i2c_waitack();
i2c_sendbyte(object); //ADC通道3
i2c_waitack();
i2c_stop();
operate_delay(10);
}
/**
* @brief 通过I2C总线读取ADC结果
*
* @param[in] none
* @param[out] temp - AD转换结果
* @return - temp
*/
unsigned char adc_pcf8591(void)
{
unsigned char temp;
i2c_start();
i2c_sendbyte(0x91);
i2c_waitack();
temp = i2c_receivebyte();
i2c_sendack(1);
i2c_stop();
return temp;
}
void READ_ADC(void)
{
if(MIS_ADC)
{
MIS_ADC = 0;
adc_value = adc_pcf8591();
}
}
#endif
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。
资源推荐
资源详情
资源评论
收起资源包目录
蓝桥杯电子赛蓝桥板集成系统(库).zip (61个子文件)
res
USER_APP
app.h 141B
APP.c 2KB
Driver
B_LED.h 353B
B_KEY.c 3KB
B_LED.c 519B
74_573.h 578B
FAC_operat.c 1KB
B_smg.h 754B
B_smg.c 2KB
B_KEY.h 621B
STARTUP.LST 14KB
OS_main.lst 4KB
B_smg.lst 7KB
B_OS.m51 46KB
B_OS.uvproj 15KB
B_KEY.lst 8KB
STARTUP.A51 6KB
OS_delay.lst 2KB
output
OS_main.obj 19KB
onewire.obj 22KB
OS_delay.obj 16KB
B_smg.obj 25KB
FAC_operat.obj 21KB
OS_timer.obj 18KB
B_OS.lnp 337B
B_KEY.obj 24KB
B_OS.SBR 161KB
ds1302.obj 22KB
B_LED.obj 19KB
B_OS.hex 9KB
STARTUP.obj 787B
D_i2c.obj 27KB
ultrasonic.obj 19KB
B_OS.plg 156B
APP.obj 25KB
B_OS 232KB
B_OS.uvopt 67KB
B_LED.lst 3KB
APP.lst 5KB
B_OS.map 214KB
onewire.lst 5KB
B_OS_uvproj.bak 15KB
D_i2c.lst 9KB
B_OS_uvopt.bak 67KB
FAC_operat.lst 4KB
ds1302.lst 6KB
ultrasonic.lst 3KB
Device
ultrasonic.c 849B
ds1302.h 2KB
ds1302.c 2KB
onewire.c 2KB
D_i2c.h 782B
ultrasonic.h 304B
D_i2c.c 4KB
onewire.h 419B
OS_timer.lst 2KB
system
OS_main.c 1KB
OS_timer.h 749B
common.h 853B
OS_timer.c 409B
B_OS.plg 3KB
共 61 条
- 1
资源评论
白话机器学习
- 粉丝: 8978
- 资源: 7681
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功