找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6787|回复: 8
收起左侧

STM32+光敏传感器+串口接收光照强度源程序 制作成功

  [复制链接]
ID:538722 发表于 2020-12-9 14:37 | 显示全部楼层 |阅读模式
STM32F103RCT6+光敏传感器监测光照强度可以用串口助手接收
光敏传感器.jpg
我用的是四针脚光敏传感器
不同型号的STM32 ADC通道的选择也不一样
我使用的是STM32F103RCT6单片机 选择了ADC2 通道6 对应的是PA6引脚。
希望对你们有帮助
串口调试.JPG 2.jpg 1.jpg

下面是部分STM32单片机代码
主函数
  1. #include "stm32f10x.h"  
  2. #include "beep.h"
  3. #include "delay.h"
  4. #include "lcd.h"
  5. #include "usart.h"
  6. #include "adc.h"
  7. #include "lsens.h"
  8. #include "stdio.h"

  9. int main(void)
  10. {        
  11.   u8 ADCX;
  12.   u8 t=0,i;
  13.         char LSEN[20];
  14.   USART1_init();
  15.         BEEP_Init();
  16.         LCD_Init();
  17.         Lsens_Init();
  18.         LCD_BLK = 0;
  19.         for(i=3;i>0;i--)
  20.         {
  21.           LCD_DrawFont_Num32(50,80,RED,YELLOW,i);
  22.                 delay_ms(1000);
  23.         }
  24.         LCD_Clear(GREEN);
  25.         LCD_DrawFont_GBK16(25,0,BLUE,GREEN, "运行中...");
  26.         LCD_DrawFont_GBK16(5,60,BLACK,GREEN, "光照:");
  27.         LCD_DrawFont_GBK16(70,60,BLACK,GREEN, "CD");
  28.         while(1)
  29.         {
  30.    if(t%10==0)
  31.          {
  32.                 ADCX=Lsens_Get_Val();
  33.                 sprintf(LSEN,"%d",ADCX);        //将光敏电阻值转换为字符格式        
  34.                 printf("光强: %d CD\r\n ",ADCX);        
  35.          }
  36.          if(ADCX<40)             //报警阈值
  37.          {
  38.                  if(ADCX<40)
  39.                  {
  40.                    LCD_DrawFont_GBK16(50,60,RED,GREEN,LSEN);
  41.                  }
  42.            GPIO_SetBits(BEEP_PORT,BEEP_PIN);
  43.                  delay_ms(10);
  44.                  GPIO_ResetBits(BEEP_PORT,BEEP_PIN);
  45.          }
  46.          else
  47.          {
  48.                  LCD_DrawFont_GBK16(50,60,BLACK,GREEN,LSEN);
  49.          }
  50.    delay_ms(100);
  51.          t++;
  52.         }
  53. }
复制代码

串口
  1. <blockquote>void USART1_init(void)
复制代码
光敏传感器:
  1. //初始化光敏传感器函数,即对GPIO,PA6初始化参数配置//
  2. void Lsens_Init(void)
  3. {
  4. GPIO_InitTypeDef GPIO_InitStructure;
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);    //使能GPIOA时钟
  6. //配置GPIOA参数,引脚6,模拟输入//
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;     
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  
  9. GPIO_Init(GPIOF, &GPIO_InitStructure);
  10. Adc2_Init();
  11. }
  12. //读取Light Sens的值,范围0-100,0最暗;100最亮//
  13. u8 Lsens_Get_Val(void)
  14. {
  15. u32 temp_val=0;
  16. u8 t;
  17. for(t=0;t<LSENS_READ_TIMES;t++)       //LSENS_READ_TIMES在lsens.h文件中设好,默认10//
  18. {
  19.   temp_val+=Get_Adc2(LSENS_ADC_CHX);   //读取ADC值,LSENS_ADC_CHX在lsens.h文件中设好,默认ADC_Channel_6,即0x06//
  20.   delay_ms(5);
  21. }
  22. temp_val/=LSENS_READ_TIMES;           //计算平均值//
  23. if(temp_val>4000)temp_val=4000;       //当计算后的值大于4000时,强制转换为4000//
  24. return (u8)(100-(temp_val/40));       //将temp_val值归一化到0-100之间//
  25. }
复制代码
全部资料51hei下载地址:
STM32+光敏传感器.7z (186.17 KB, 下载次数: 217)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:794435 发表于 2021-4-15 23:03 | 显示全部楼层
大佬,求助,我遮住,显示的值变大,我打手电筒,值变小
回复

使用道具 举报

ID:818895 发表于 2021-4-16 06:58 | 显示全部楼层
是一个很好的学习资料。
回复

使用道具 举报

ID:882758 发表于 2021-8-2 15:37 | 显示全部楼层
DO接的什么口
回复

使用道具 举报

ID:882758 发表于 2021-8-2 16:59 | 显示全部楼层
我数据一直是0 我吐了
回复

使用道具 举报

ID:882758 发表于 2021-8-2 17:21 | 显示全部楼层
解决了  没有跳VREF
回复

使用道具 举报

ID:968147 发表于 2021-9-29 11:36 | 显示全部楼层
xxxxiii 发表于 2021-8-2 16:59
我数据一直是0 我吐了

请问怎么解决的呢
回复

使用道具 举报

ID:980680 发表于 2021-11-14 14:06 | 显示全部楼层

兄弟,你这D0接的啥
回复

使用道具 举报

ID:27027 发表于 2021-11-26 07:46 | 显示全部楼层
确实一个好资料,点赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表