完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,PCF8591——ADC
先上干货 //Control_byte:控制字节 u8 read_pcf8591(Control_byte)//读pcf8591,读取转换通道的转换值 { u8 temp; IIC_Start();//起始信号 IIC_SendByte(0x90);//发送设备写,设备地址+write(0) 1001 0000 IIC_WaitAck();//等待应答 IIC_SendByte(Control_byte);//发送控制字节 (控制字节 请看下面) IIC_WaitAck();//等待应答 IIC_Start();//起始信号 IIC_SendByte(0x91);//发送设备读,设备地址+read(1) 1001 0001 IIC_WaitAck();//等待应答 temp=IIC_RecByte();//读取电压转化值 IIC_SendAck(1);//发送非应答信号 IIC_Stop();//停止信号 return temp;//返回转换值 将转换值变为电压值V=5*temp/255.0 } 下图就是控制字节的描述.显而易见:0x01表示模拟输入通道1(AIN1)连接转换通道1(channel 1),我们读取转换通道1的转换值。其余的不再多说 二,PCF8591——DAC 先上代码,看我的注释 //data1:数值 void write_pcf8591(u8 data1) { IIC_Start();//起始信号 IIC_SendByte(0x90);//设备写 IIC_WaitAck();//等待应答 IIC_SendByte(0x40);//控制字节 0100 0000 对应上图自然懂 IIC_WaitAck();//等待应答 IIC_SendByte(data1);//发送数值,将数值转化为对应的电压值输出 IIC_WaitAck();//等待应答 IIC_Stop();//停止信号 } PCF8591的ADC,DAC都是8位转换器并且参考电压为0-5V,所以我的data1与模拟输出电压之间的关系为:V=5* data1 /255 上述代码通过蓝桥杯官方资源包IIC.C,IIC.H修改并编写 修改的地方有: void Delay5us() //@12.000MHz { unsigned char i; _nop_(); _nop_(); i = 12; while (--i); } 替代官方代码中的延迟函数: #define DELAY_TIME 5 void IIC_Delay(unsigned char i) { do{_nop_();} while(i--); } IIC_Delay(DELAY_TIME); ] 有帮助请点赞,不懂call me,留言吧 |
|
|
|
只有小组成员才能发言,加入小组>>
3263 浏览 9 评论
2944 浏览 16 评论
3443 浏览 1 评论
8955 浏览 16 评论
4036 浏览 18 评论
1081浏览 3评论
561浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
554浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2290浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1849浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 03:32 , Processed in 1.055518 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号