一、要求
测量电位器Rb2输出的电压并将电压大小显示在数码管上,同时DAC输出电压跟随Rb2电位器输出电压变化。
关于AD、DA转换可以参看这篇博文:
【蓝桥杯-单片机学习笔记(十六)】PCF8591原理与A/D、D/A转换_傻萌的路飞的博客-CSDN博客_pcf8591
二、核心代码
//--------------------------------电压测量---------------------------------//
uchar ADC_read_AIN3()
{
IIC_Start();
IIC_SendByte(0x90); //写设备地址
IIC_WaitAck();
IIC_SendByte(0x43); //写控制字,4为打开DAC
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91); //读设备地址
IIC_WaitAck();
voltage_t = IIC_RecByte(); //获取电压
IIC_Stop();
return voltage_t;
}
void voltage_3()
{
voltage_t_3 = ADC_read_AIN3();
voltage_t_3 = voltage_t_3 * 0.0196078;
voltage = voltage_t_3 * 100;
}
//--------------------------------DAC输出------------------------------//
void DAC_AIN3(uint dat)
{
IIC_Start();
IIC_SendByte(0x90); //写设备地址
IIC_WaitAck();
IIC_SendByte(0x40); //写控制字
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
注意:AD和DA要想同时使用,在AD初始化时必须要将DA使能,如果不这样做就会出现DA输出不正常的现象。
void main()
{
system_init();
while(1)
{
//AD
ADC_read_AIN3();
voltage_3();
voltage_show();
//DA
DAC_AIN3(ADC_read_AIN3());
}
}
如有不正确的地方,欢迎大家指正!
|