博客
关于我
51 单片机 pcf8591 四路ADC 读取 数码管显示 LCD1602显示 程序
阅读量:331 次
发布时间: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/

你可能感兴趣的文章
阿里云云解析DNS各种概念深度剖析
查看>>
SQLite基础用法
查看>>
(20200328已解决)从docker容器内复制文件到宿主机
查看>>
理解Docker ulimit参数
查看>>
pandas.groupby().rank()用法详解
查看>>
Factor Exposure因子暴露
查看>>
理解zvt in Python on Quant
查看>>
理解Data Centric VS. Document Centric VS. mixed-content XML
查看>>
理解DSL||AST||query clauses||X-Pack||JDBC||ODBC
查看>>
将DataFrame作为邮件正文HTML发送 in Python
查看>>
理解Library of Congress Cataloging-in-Publication Data
查看>>
理解Python系统下的时间格式
查看>>
《经济机器是怎样运行的》笔记(三)
查看>>
prod()与cumprod()区别cumsum()
查看>>
Python提升回测速度concurrnet.futures模块详解
查看>>
Python语言'类'概念再理解
查看>>
(2019.6.27)Anaconda清华镜像已恢复使用
查看>>
Robomongo使用教程:踩着前辈的路
查看>>
Python中Class类与def函数的区别
查看>>
OpenAI Gym简介及初级实例
查看>>