博客
关于我
51 单片机 pcf8591 四路ADC 读取 数码管显示 LCD1602显示 程序
阅读量:334 次
发布时间:2019-03-04

本文共 967 字,大约阅读时间需要 3 分钟。

步骤1 写入0x90,然后写入控制字0x44。控制字0x04表示开启自动增。控制字0x40表示使能DAC输出,当我们开启自动增后,必须打开DAC输出,这样内部时钟才稳定。

/* PCF8591初始化 */void init_pcf8591(void){       i2c_start();    i2c_sendbyte(0x90);    i2c_sendbyte(0x44); /* 自动增加 */    i2c_stop();}

步骤2 写入0x91,然后读取一个字节。调用四次这个函数,每一次都是代表了某个通道的ADC结果。

/* 通过I2C总线读取ADC结果 */unsigned char adc_pcf8591(void){       unsigned char temp;    i2c_start();    i2c_sendbyte(0x91);    temp = i2c_receivebyte();    i2c_stop();    return (temp);}

步骤3 我们得到的是四个数据。每个数据一个字节。
每个数据的大小是0到255,表示0到5V。
所以:
电压伏特=读取到的结果 / 255 * 5
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
或者按照下面的时序读取。一个通道一个通道来。

unsigned char ReadADC(unsigned char Chl) //0 1 2 3 {     unsigned char Val;   Start_I2c();               //启动总线   SendByte(AddWr);             //发送器件地址	0X90     if(ack==0)return(0);   SendByte(Chl);//0            //发送通道     if(ack==0)return(0);   Start_I2c();   SendByte(AddRd);	 //0X91      if(ack==0)return(0);   Val=RcvByte();   NoAck_I2c();                 //发送非应位   Stop_I2c();                  //结束总线  return(Val); }

转载地址:http://xbce.baihongyu.com/

你可能感兴趣的文章
Python:面向对象
查看>>
Python练习题 :随机生成一批数
查看>>
Spring源码:prepareBeanFactory(beanFactory);方法
查看>>
Spring源码:initApplicationEventMulticaster源码解析
查看>>
AcWing 786: 第k个数
查看>>
AcWing 798. 差分矩阵
查看>>
AcWing 828. 模拟栈
查看>>
AcWing 845. 八数码(BFS)
查看>>
AcWing 849. Dijkstra求最短路 I(Dijkstra)
查看>>
AcWing 4. 多重背包问题(带有个数限制的完全背包问题dp)
查看>>
EventBus简单Demo实现
查看>>
监听CPU和内存占用率脚本
查看>>
添加Selinux权限
查看>>
ifconfig网络配置信息解析
查看>>
(2019.9.10测试可用)如何在Windows的cmd中使用ls命令
查看>>
多因子策略中的IC、IR是什么,以及如何计算
查看>>
pd.resample('B')指重采样为工作日
查看>>
债券中的久期是什么意思
查看>>
MA、WMA、EMA、EXPMA区别及公式详述
查看>>
国内量化交易现状总结
查看>>