摘要

本文章主要基于国信长天蓝桥杯嵌入式开发板及其扩展板,介绍了扩展板上光敏电阻的使用方法。

硬件原理图


光敏电阻的阻值会随着光照强度的变化而变化,光照越强阻值越小,光线越暗阻值越大。

从上图可以看出,定值电阻R46与光敏电阻R47组成了一个欧姆分压电路,当光线增强时,光敏电阻R47的阻值减小,Tr_AO的电压降低;当光线减弱时,光敏电阻R47的阻值增大,Tr_AO的电压增大。

另外,Tr_AO连接到运算放大器LM393的正向输入端(3号脚),LM393的反向输入端(2号脚)连接在可调电阻RP7上,当3号脚的电压高于2号脚的电压时,Tr_DO输出高电平,当3号脚的电压低于2号脚的电压时,Tr_Do输出低电平。

调节可调电阻RP7可设定2号脚的电压,相当于是调节光敏电阻的阈值

扩展板与主板连接后,调节跳线帽,可是Tr_AO连接到PA4Tr_DO连接到PA3

光敏电阻使用步骤

下面将基于硬件原厂提供的显示屏示例代码:HAL_06_LCD 介绍ADC的使用步骤:

① 添加 stm32g4xx_hal_adc.c,stm32g4xx_hal_adc_ex.c

双击Drivers/STM32G4xx_HAL_Driver,打开添加文件对话框,在向上一级 -> Drivers -> STM32G4xx_HAL_Driver -> Src中,找到stm32g4xx_hal_adc.cstm32g4xx_hal_adc_ex.c 并添加。添加后如下图所示:

② 修改 stm32g4xx_hal_conf.h 文件

在如下位置找到该文件,并打开:

取消注释 #define HAL_ADC_MODULE_ENABLED 这一行,取下注释后如下图所示:

main.c 添加 #include "stm32g4xx_hal_adc.h"

main.c 适当位置添加 #include "stm32g4xx_hal_adc.h",添加后如下图所示:

④ 复制如下 ADC 按键初始化及获取ADC按键值的代码

复制下面的代码,粘贴到main.c文件 main()函数上面空白处

ADC_HandleTypeDef hadc2;uint16_t Get_ADC2_Value(void)
{uint16_t adc_value = 0;HAL_ADC_Start(&hadc2);adc_value = HAL_ADC_GetValue(&hadc2);return adc_value;
}static void ADC2_Init(void)
{ADC_ChannelConfTypeDef sConfig = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};GPIO_InitTypeDef GPIO_InitStruct = {0};PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);__HAL_RCC_ADC12_CLK_ENABLE();//打开ADC时钟__HAL_RCC_GPIOA_CLK_ENABLE();//打开GPIO A时钟hadc2.Instance = ADC2;hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;hadc2.Init.Resolution = ADC_RESOLUTION_12B;hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc2.Init.GainCompensation = 0;hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;hadc2.Init.LowPowerAutoWait = DISABLE;hadc2.Init.ContinuousConvMode = DISABLE;hadc2.Init.NbrOfConversion = 1;hadc2.Init.DiscontinuousConvMode = DISABLE;hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc2.Init.DMAContinuousRequests = DISABLE;hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;hadc2.Init.OversamplingMode = DISABLE;HAL_ADC_Init(&hadc2);sConfig.Channel = ADC_CHANNEL_17; //设置采样通道为17(PA4引脚)sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;sConfig.SingleDiff = ADC_SINGLE_ENDED;sConfig.OffsetNumber = ADC_OFFSET_NONE;sConfig.Offset = 0;HAL_ADC_ConfigChannel(&hadc2, &sConfig);GPIO_InitStruct.Pin = GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化PA4脚为模拟模式HAL_ADC_Start(&hadc2);
}static void Photo_Status_Init(void) //读取Tr_DO电平高低
{GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化PA3脚为输入模式
}

上述代码中包含了Tr_AO与Tr_DO数据的读取,考生根据题目要求,按需复制。

⑤ 在main() 中调用 ADC2_Init();Photo_Status_Init()

如下图所示,在main() 函数中LCD_Init();下面调用 ADC2_Init();Photo_Status_Init()

⑥ 获取光敏电阻值及其状态

main()while()中插入如下代码:

     char buf[64] = { 0 };int adc_value =  Get_ADC2_Value();int p_status =  HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3);sprintf(buf, "Photo Value is %d  ", adc_value);LCD_DisplayStringLine(Line3, (u8*)buf);sprintf(buf, "Photo Status is %d  ", p_status);LCD_DisplayStringLine(Line5, (u8*)buf);

⑦ 运行效果

用手遮住光敏电阻或者使用灯光照射光敏电阻,可以看到屏幕上数字的变化。

如果此文章对你有帮助,欢迎点赞 关注 收藏 转发.

作者:我是鹏老师

【国信长天蓝桥杯】扩展板⑦ 光敏电阻的使用相关推荐

  1. 【国信长天蓝桥杯】扩展板② ADC按键的使用

    摘要 本篇文章主要介绍了蓝桥杯嵌入式比赛扩展板上面ADC按键的工作原理与使用方法. 跳线帽与原理图 要想使用ADC按键需要将扩展板连接到主板上,如下图所示,并且还要短路扩展板上AKEY跳线帽. 连接成 ...

  2. 国信长天蓝桥杯嵌入式类——stm32——使用keil4建立工程文件过程

    蓝桥杯嵌入式----使用keil4建立工程文件过程 目录 蓝桥杯嵌入式----使用keil4建立工程文件过程 一.完成文件建立 (一).先建立名为test工程文件夹,如图.并建立如下几个文件夹 (二) ...

  3. 【国信长天蓝桥杯】CT117E-M4 嵌入式开发板 显示屏播放Bad Apple,采用OLED_ToolBox

    摘要 最近在指导学生参见 蓝桥杯 嵌入式比赛,比赛完成后开发板就闲置了,于是准备拿过来做一个好玩的东东. 总体思路是这样的,计算机端通过上位机获取视频信息,并将视频信息转换成显示屏可现实的数据,然后通 ...

  4. 蓝桥杯 模板Template Part9:PCF8591 ADC/DAC

    九层妖塔 起于垒土 蓝桥杯 模板Template Part9:PCF8591 ADC/DAC 一.原理图 二.通过IIC对PCF8591的写操作与读操作 写操作 读操作 三.基本模板 1.`头文件` ...

  5. 蓝桥杯单片机第七届省赛-模拟风扇控制系统

    九层妖塔 起于垒土 ● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改 蓝桥杯单片机第七届省赛-模拟风扇控制系统 Notes1:按键按下后在某些情况下给一定的缓冲时间 Notes2 ...

  6. 蓝桥杯 模板Template Part10:AT24C02存储器

    九层妖塔 起于垒土 蓝桥杯 模板Template Part10:AT24C02存储器 一.原理图 二.AT24C02存储器内部存储结构的形象解释 1.存储结构 2.存储结构的地址编码 3.第一页的形象 ...

  7. 蓝桥杯模板TemplatePart12:NE555定时器频率测量

    九层妖塔 起于垒土 蓝桥杯模板TemplatePart12:NE555定时器&频率测量 一.555定时器 1.内部框图: 2.基础知识: 二.Template: 1.定时器0初始化为计数器 2 ...

  8. 蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置

    九层妖塔 起于垒土 ● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改 蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置 Notes1:矩阵按键的灵活使用 Notes2:AT24 ...

  9. stm32入门学什么板子_“蓝桥杯”嵌入式stm32开发入门(1)概述

    声明:笔者绝不是给"蓝桥杯"打广告,而是笔者曾经参加过蓝桥杯嵌入式设计与开发比赛,想借此机会总结并分享自己的学习中的点点滴滴. 此系列教程将以蓝桥杯官方指定的开发板和接口板来深入浅 ...

最新文章

  1. DC-DC电源输出纹波测量的方法
  2. 一口气说出 4种 “附近的人” 实现方式,面试官笑了
  3. java dictionary遍历_遍历 Dictionary,你会几种方式?
  4. [wbia 2.2] 对检索结果进行评估
  5. 计算机科学导论考试A卷试题,09级计算机科学导论A卷答案
  6. Echarts自定义折线图例,增加选中功能
  7. 容器编排技术 -- Kubernetes Replication Controller
  8. 韩国央行行长李柱烈:加密货币的波动给金融稳定带来风险
  9. Java好还是网优好,java和seo哪个好
  10. 呼叫中心点击拨打接口升级代码
  11. 计算机屏幕显示不全怎么办,电脑打开软件后屏幕显示不全怎么办
  12. 论文笔记1:Fast and Robust Multi-Person 3D Pose Estimation from Multiple Views
  13. Java实现仿QQ聊天工具的项目总结
  14. 十六进制解码_快速十六进制编码和解码
  15. OSG 中 常用的 Uniforms
  16. RecycleBin
  17. synergy /Applications/Synergy.app/contents/MacOS/synergy 没有权限问题
  18. 2020牛客暑期多校训练营(第八场)E.Enigmatic Partition(差分+隔项差分/dp+暴力)
  19. 洛谷 P2862 [USACO06JAN]把牛Corral the Cows 解题报告
  20. Google gflags使用说明

热门文章

  1. 什么是restful,什么是rest风格
  2. 吐槽下Arcgis的二次开发
  3. 基于ARCGIS二次开发可视化开发环境搭建(JAVA)
  4. 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
  5. 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
  6. MAC查看SVN版本日志
  7. 测试基础-静态白盒测试(检查代码)
  8. 流媒体直播防盗链安全控制
  9. java中处理换行符
  10. ZYNQ开发系列——hw_platform包和BSP包中的一些理解