锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

蓝桥杯单片机 | 特训案例【进阶05】采样光敏电阻与可调电阻的电压

时间:2022-08-15 18:00:02 3b522a分压电阻102可调电阻

【1】题目要求

新建工程,以I/O模式编写代码,在CT107D在单片机综合训练平台上,实现以下功能:

1、将IIC总线底层驱动代码文件正确移植到工程中。

2、光敏电阻rd1接到PCF8591AIN1通道;可调电阻rb2接到PCF8591的AIN3通道。

3.系统上电后,循环采样AIN1通道和AIN并将3通道的电压A/D读取转换结果,将转换成相应的实际电压值,保留两位小数,单位为V。

4、在数码管上显示采样的实时电压数值,显示格式如图所示,数码管左端三位,显示AIN1通道,即采样光敏电阻rd1的电压值,数字管三位靠右端,显示AIN3通道,即采样可调电阻rd3的电压值,未使用的数字管熄灭。

【小提示】:

IIC本博客可以看到接口的基本原理:【蓝桥杯单片机高级强化-01】IIC总线接口技术基础。

PCF本博客的基本原8591的基本原理:【蓝桥杯单片机高级强化-02】PCF8591的基本原理和A/D转换应用》

2核心源码分析

/*==================蓝桥杯单片机特训================== 高级05:采样光敏电阻和可调电阻的电压 **平  台:CT107D单片机综合培训平台 **模  式:IO模式 **底层驱动文件:2022年竞赛资源数据包提供的文件 **设  计:欧浩源(小蜜蜂老师,ohy3686@qq.com) **时  间:2022-04-01 **更多详见:www.xmf393.com ====================================================*/  #include "reg52.h" #include "iic.h"  ///定义动态显示单个数字管点亮时间 #define TSMG 500 //-共阳数码管段码编码表(无小数点)-------- //0 1 2 3 4 5 6 7 8 9 A B C D E F - . unsigned char code SMG_NoDot[18]={0xc0,0xf9,    0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,     0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f}; //-共阳数码管段码编码表(带小数点)-------- //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. unsigned char code SMG_Dot[10]={0x40,0x79,   0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //-----------------------------------------------  unsigned char adc1_value = 0;  //AIN1的采样数据 float adc1_volt = 0;    //AIN1的换算电压 unsigned int smg1_volt = 0;   //AIN1的显示电压 unsigned char adc3_value = 0;  //AIN3的采样数据 float adc3_volt = 0;    //AIN3的换算电压 unsigned int smg3_volt = 0;   //AIN3的显示电压   /*====定器设置和数字管显示的代码参考上述案例====*
//===================电压值显示函数=================== void DisplaySMG_ADC() {  ///数码管右起第0位  DisplaySMG_Bit(7,SMG_NoDot[smg1_volt % 10]);  ///数字管右起第一位  DisplaySMG_Bit(6,SMG_NoDot[(smg1_volt / 10) % 10]);    ///数码管右起第2位  DisplaySMG_Bit(5,SMG_Dot[smg1_volt / 100]);       ///数码管右起第5位  DisplaySMG_Bit(2,SMG_NoDot[smg3_volt % 10]);  ///数码管右起第6位  DisplaySMG_Bit(1,SMG_NoDot[(smg3_volt / 10) % 10]);    ///数码管右起第7位  DisplaySMG_Bit(0,SMG_Dot[smg3_volt / 100]);   }
//===============PCF8591电压采样处理函数=============== unsigned char Read_PCF8591_ADC(unsigned char ain) {  unsigned char tmp;  IIC_Start();       IIC_SendByte(0x90);  //PCF8591写设备地址   IIC_WaitAck();      if(ain == 1)  {   IIC_SendByte(0x01); //通道1,光敏电阻电压  }  else if(ain == 3)  {   IIC_SendByte(0x03); //通道3,可调电阻电压  }    IIC_WaitAck();          IIC_Stop();     DisplaySMG_ADC();   //等待电压转换完成    IIC_Start();           IIC_SendByte(0x91);  //PCF阅读设备地址8591  IIC_WaitAck();           tmp = IIC_RecByte();  //读出AD采样数据  IIC_SendAck(1);     //产生非响应信号           IIC_Stop();  return tmp; } //=============采样光敏电阻和可调电阻的电压============= void Read_AIN1_AIN3() {  adc1_value = Read_PCF8591_ADC(1);  adc1_volt = adc1_value * (5.0 / 255);  smg1_volt = adc1_volt * 100;    adc3_value = Read_PCF8591_ADC(3);  adc3_volt = adc3_value * (5.0 / 255);  smg3_volt = adc3_volt * 100; }

【注】:蓝桥杯单片机备赛更多详见蓝桥杯单片机设计与开发蜜蜂特训手册,本网站可下载更多蓝桥杯案例的完整源代码和学习备考笔记。欢迎进入小蜜蜂笔记公众号。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章