51 单片机 pcf8591 四路ADC 读取 数码管显示 LCD1602显示 程序
发布日期:2021-05-07 10:25:27 浏览次数:11 分类:原创文章

本文共 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); }
上一篇:51单片机 酒精浓度测试仪 proteus 仿真 程序 LCD1602
下一篇:LED彩灯控制器设计 51单片机 流水灯 PROTEUS 仿真

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月11日 22时39分44秒