PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。
AD转换即(模拟量)Analog 转换成 (数字量)Digital
1.引脚分析
PCF8591具有4个模拟输入(AIN0~AIN3)、1个模拟输出(AOUT)和1个串行I²C总线接口(SDA、SCL)。
PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
OSC:外部时钟输入端,内部时钟
EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。
VDD、VSS:电源端。
AGND:模拟信号地。
VREF:基准电源端。
2.应用分析
AD转换部分电路图:
要求:使用LCD1602将电压值显示出来,调节变阻器改变电压值
说明:以下代码中用到了LCD1602驱动程序和I2C总线驱动程序,请参考博主51单片机栏目下的博客。
#define uint unsigned int
#define uchar unsigned char
/*查阅pcf8591的资料可知它的都写地址如下*/
#define WRITEADDR 0x90 //写地址
#define READADDR 0x91 //读地址
uchar dat[6];
void Pcf8591SendByte(uchar channel)
{
I2C_Start(); //关于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;
float value;
Lcd1602_init(); //关于lcd1602,请参照博主博文:51单片机LCD1602程序详解
while(1)
{
Pcf8591SendByte(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]=adNum%1000/100+'0';
dat[2]='.';
dat[3]=adNum%100/10+'0';
dat[4]=adNum%10+'0';
dat[5]='V';
Lcd1602_WriteCom(0x80);
for(i=0;i<6;i++)
{
Lcd1602_WriteData(dat[i]);
}
}
}
上一篇:51单片机汇编语言实验(一)-----数字量输入输出
下一篇:51单片机DHT11温湿度传感器
推荐阅读最新更新时间:2024-11-21 00:38
设计资源 培训 开发板 精华推荐
- 【数字传感器】HDC2080数字温湿度传感器
- NCP45780IMNGEVB:NCP45780IMN24RTWG 评估套件
- OP184FS-REEL7 运算放大器噪声电路模型的典型应用,用于确定总电路等效输入噪声电压
- STEVAL-ISA095V1,使用 ST1S14 高达 3 A 的 HSOP8 封装降压开关稳压器的演示板
- LTC3646HDE-1 24V 输入至 5V 输出、1MHz 频率和 EXTVCC 同步降压转换器的典型应用电路
- EVAL-ADM1041EB,评估板允许在开关电源应用中快速评估 ADM1041
- safeStepper
- 基于L6983CQTR的38V,3A同步降压型开关稳压器评估板
- 用于便携式的 5 节镍镉电池备份
- ADP2118、3.3V、3A、1.2MHz降压稳压器、跟踪模式的典型应用