首页 > 编程知识 正文

51单片机数字电压表程序,pcf8591接单片机MQ2

时间:2023-05-05 21:31:56 阅读:154738 作者:4195

PCF8591是单片集成、单独供电、低功耗、8位CMOS数据获取设备。

模数转换即(模拟量)将模拟模拟信号转换为(数字量)数字信号

1.引脚分析

PCF8591具有四个模拟输入(ain 0至ain3)、一个模拟输出(AOUT )和一个串行集成电路总线接口(SDA、SCL )。

PCF8591的三个地址引脚A0、A1和A2可用于硬件地址编程,允许8个PCF8591设备连接到同一I2C总线,而无需额外的硬件。 输入和输出到PCF8591设备的地址、控制和数据信号通过双线双向I2C总线串行传输。

OSC :外部时钟输入端子、内部时钟

(EXT )使用内部、外部时钟选择线、内部时钟时进行EXT接地。

VDD、VSS :电源侧。

AGND :模拟信号地。

VREF :基准电源侧。

2.应用分析

模数转换部分电路图:

要求:用LCD1602显示电压值,调节变阻器改变电压值

说明:以下代码使用LCD1602驱动程序和I2C总线驱动程序。 参见博主51单片机栏的博客。

调查# defineuintunsignedint # defineucharunsignedchar/* PCF 8591的资料,其所有的写入地址如下*/#define WRITEADDR0x90 ////I2C总线,请参考博主博文: 51单片机I2C总线驱动程序I2C_sendbyte(writeaddr ); //写入设备地址I2c_sendbyte(0x40|Channel ); //发送控制寄存器I2C_Stop (; }uchar Pcf8591ReadByte () ) { uchar num; I2C_Start (; I2c_sendbyte(readaddr; //发送读取设备地址dat=I2C_ReadByte (; //读取数据I2C_Stop (; //退出总线return num } void main () { uint adNum,I; 浮动值; Lcd1602_init (; //lcd1602请参阅博主博文: 51单片机LCD1602程序详情while(1) { Pcf8591SendByte(0)0); //使用信道0 /*adNum必须是0到255之间的数。 由于pcf8591是8位AD/DA芯片,因此输出范围为00000000至11111111,即0至255*/adNum=Pcf8591ReadByte (; //读取数值并将adNum转换为电压值。 假设单片机的电压为5V,则电位计的电压从0变为5V。 如果用0到255表示0到5V,则各个1表示5/255V。 即0.01953V*/value=adNum*0.01953; //转移到电压值adNum=value*100; dat[0]=adNum/1000 '0';//标上“0”表示数字到字符的转换,1602表示字符dat[1]=adNum00/100 '0'; dat[2]='.'; dat[3]=adNum0/10 '0'; dat[4]=adNum '0'; dat[5]='V '; LCD1602_writecom(0x80 ); for(I=0; i6; I ) LCD1602_writedata(dat[I]; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。