本设计:
基于STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB)
原理图:Altium Designer
程序编译器:keil 5
编程语言:C语言
编号C0023

完整下载链接:
【腾讯文档】C0023 网盘链接
https://docs.qq.com/doc/DS2JPanJXZ2pwQnBU

功能描述:
本系统由STM32F103C8T6单片机核心板、紫外线传感器、LCD1602液晶显示、蜂鸣器报警、按键控制及电源组成。
1、通过传感器检测传感器实际值,并将传感器实际值显示在LCD1602液晶上。
2、感器检测采用的是AD数据转换,然后传感器手册运算获得的。
3、三个按键设置阈值,分别为设置键、设置+、设置-,其中设置+、设置-只有在设置模式下才能进行操作。
4、在设置模式下,液晶有对应的显示标志,设置阈值存储到单片机Flash中,具有掉电不丢失,无需重新设置。
5、设置值与采集值实时对比,如果出现异常情况,蜂鸣器报警提醒。

原理图(提供源文件):

PCB(提供源文件):

源程序(提供源文件):

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include <stdio.h>
#include "lcd1602.h"
#include "adc.h"
#include "stmflash.h"  #define BASICS_VAL 15 //ÓÃÓÚÊý¾Ýת»»µÄ»ù´¡Öµ
#define DEFAULT_SET_VAL 2   //µÚÒ»´ÎÏÂÔØĬÈÏÉèÖÃÖµchar dis0[17]; //ÔÝ´æÊý×é
char dis1[17]; //ÔÝ´æÊý×éfloat sensorVolt = 0; //µ±Ç°²É¼¯Öµ
unsigned int adcx;
unsigned int uvIndex = 0;unsigned int setNum = 50; //ÉèÖÃÖµ
unsigned char setMode = 0;//ĬÈÏÊÖ¶¯Ä£Ê½
unsigned char disFlag = 0;//ÏÔʾ±êÖ¾#define FLASH_SAVE_ADDR  0X08010000    // ×¢ÒⲻͬоƬ ÉÈÇøflashµØÖ·²»Ò»Ñù ÉèÖÃFLASH ±£´æµØÖ·(±ØÐëΪżÊý£¬ÇÒÆäÖµÒª´óÓÚ±¾´úÂëËùÕ¼ÓÃFLASHµÄ´óС+0X08000000)
//stm32f103R8T6 flashµØÖ··¶Î§ 0x8010000-0x801FFFF
//stm32f103C8T6 flashµØÖ··¶Î§ 0x8000000-0x807FFFF#define SIZE 10        //Êý×鳤¶È
unsigned char  setFlashBuf[10];//´æ´¢Êý¾Ý'unsigned char initFlagData;  //³õʼ»¯Êý¾Ý´æ¶ÁÈ¡
/******************°ÑÊý¾Ý±£´æµ½µ¥Æ¬»úÄÚ²¿eepomÖÐ******************/
void write_FlashBuf(void)
{setFlashBuf[0] = initFlagData;setFlashBuf[1] =  setNum / 256;  //ÖØÐÂдÈëÖµsetFlashBuf[2] =  setNum % 256; STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)setFlashBuf,SIZE);      //¶ÁÈ¡Êý¾Ý  }/******************°ÑÊý¾Ý´Óµ¥Æ¬»úÄÚ²¿eepomÖжÁ³öÀ´*****************/
void read_FlashBuf(void)
{STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)setFlashBuf,SIZE); //¶ÁÈ¡flashÖµinitFlagData = setFlashBuf[0]; //Êý¾Ý³õʼ»¯¶ÁÈ¡   setNum  = setFlashBuf[1];  //¶ÁÈ¡¸ß×Ö½ÚsetNum <<= 8;setNum  |= setFlashBuf[2];  //¶ÁÈ¡µÍ×Ö½Ú ²¢ºÏ²¢
}/**************¿ª»ú³õʼ»¯±£´æµÄÊý¾Ý*****************/
void init_FlashBuf(void)
{read_FlashBuf(); //¶ÁÈ¡flashÖµif(initFlagData != 0x55)        //еĵ¥Æ¬»ú³õʼµ¥Æ¬»úÄÚÎÊeeprom Èç¹û²»ÊÇ0x55ÖØÐÂдÈë{setNum =  DEFAULT_SET_VAL;//ÉèÖÃÉÏÏÞinitFlagData = 0x55;   //ÐÞ¸ÄÖµdelay_ms(20);write_FlashBuf();       //¶ÁÈ¡Êý¾Ý}
}void CheckKey(void);int main(void){        delay_init();            //ÑÓʱº¯Êý³õʼ»¯     uart_init(9600);      //´®¿Ú³õʼ»¯Îª115200TIM3_Int_Init(499,7199); //¶¨Ê±Æ÷³õʼ»¯LED_Init();              //³õʼ»¯½Ó¿Ú     KEY_Init();  Adc_Init(); //³õʼ»¯adת»»init_FlashBuf();//³õʼ»¯¶ÁÈ¡´æ´¢Êý¾Ý buzzer = 1; //·äÃùÆ÷±¨¾¯Ò»ÏÂdelay_ms(200);buzzer = 0;//·äÃùÆ÷ Í£Ö¹±¨¾¯Lcd_GPIO_init();   //Òº¾§½Ó¿Ú³õʼ»¯Lcd_Init();      //Òº¾§ÅäÖóõʼ»¯delay_ms(20);   while(1){          CheckKey();if(disFlag==1)//¶¨Ê±¶ÁÈ¡±êÖ¾{disFlag=0;//Çå¿Õ±êÖ¾adcx=Get_Adc_Average(ADC_Channel_1,5);//¶ÁÈ¡adת»»Öµ 5´ÎÇóƽ¾ù          sensorVolt =(float)adcx*3.3/4096;// ²É¼¯Öµ  if(sensorVolt < 0.05) {uvIndex = 0;}//¸ù¾Ý´«¸ÐÆ÷±íÈ·¶¨µÄelse if(sensorVolt < 0.227) {uvIndex = 1;}//¸ù¾Ý´«¸ÐÆ÷±íÈ·¶¨µÄelse if(sensorVolt < 0.318) {uvIndex = 2;}//¸ù¾Ý´«¸ÐÆ÷±íÈ·¶¨µÄelse if(sensorVolt < 0.408) {uvIndex = 3;}//¸ù¾Ý´«¸ÐÆ÷±íÈ·¶¨µÄelse if(sensorVolt < 0.503) {uvIndex = 4;}else if(sensorVolt < 0.606) {uvIndex = 5;}else if(sensorVolt < 0.696) {uvIndex = 6;}else if(sensorVolt < 0.795) {uvIndex = 7;}else if(sensorVolt < 0.881) {uvIndex = 8;}else if(sensorVolt < 0.976) {uvIndex = 9;}else if(sensorVolt < 1.079) {uvIndex = 10;}else {uvIndex = 11;}sprintf(dis0,"%4.2fv UVIndex:%d  ",sensorVolt,uvIndex);        //´òÓ¡                  Lcd_Puts(0,0,(u8 *)dis0);//ÏÔʾ if(setMode){sprintf(dis1,"setIndex:%02d<   ",setNum);      //´òÓ¡                  }else{sprintf(dis1,"setIndex:%02d    ",setNum);   }Lcd_Puts(0,1,dis1);//ÏÔʾ      if(uvIndex > setNum) //²É¼¯Öµ ºÍ ÉèÖÃÖµ ¶Ô±È{buzzer = !buzzer;}  //·äÃùÆ÷±¨¾¯else {buzzer = 0;} //²»±¨¾¯           }           }
}void CheckKey(void)
{ static unsigned  char rekey =0;if((key1==0)||(key2==0)||(key3==0))      //¼ì²âµ½°´¼ü°´ÏÂ{delay_ms(10);   //С¶¶¶¯if(rekey==0){if(key1==0)    //¼ì²âÊÇ·ñ°´ÏÂ{rekey=1;if(setMode){setMode = 0; //È¡ÏûÉèÖÃ}else {setMode = 1; //ÉèÖÃ״̬}                              }   else if(key2==0)//ÉèÖÃÖµ¼ü{rekey=1;if(setMode){ //ÉèÖÃÌõ¼þÏÂif(setNum < 99 ){setNum=setNum+1;} //+1                        }               }else if(key3==0)//ÉèÖÃÖµ¼ü{rekey=1;if(setMode){ //ÉèÖÃÌõ¼þÏÂif(setNum > 0 ){setNum=setNum-1;}}} write_FlashBuf();//´æ´¢Êý¾Ý     }}else{rekey=0;    //·ÀÖ¹Öظ´¼ì²âµ½°´¼ü}
}

资料清单如下:

STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB)相关推荐

  1. STM32模拟电磁炮设计_STM32F103ZET6(程序+原理图+PCB+论文报告)

    本设计: 基于STM32模拟电磁炮设计_STM32F103ZET6(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0029 ...

  2. 基于STM32单片机的天然气甲烷硫化氢气体检测仪原理图PCB

    功能简介: 0.单片机采用STM32F103C8T6最小系统板 1.采用SGP30传感器可检测二氧化碳浓度 2.利用MQ136可检测硫化氢气体 3.利用MQ-4传感器可检测天然气甲烷等气体 原理图: ...

  3. STM32老人防跌倒报警GSM短信GPS定位设计(程序+原理图+PCB)

    本设计: 基于STM32老人防跌倒报警GSM短信GPS定位设计(程序+原理图+PCB) 编号C0025 下载链接 C0025 网盘链接 功能描述: 本系统由基于STM32单片机的核心板.ADXL345 ...

  4. STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告)

    本设计: 基于STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0021 资料下载 [ ...

  5. 课设-51单片机+PM2.5+温湿度(程序+原理图+Protel仿真)

    51单片机PM2.5+温湿度(程序+原理图+Protel仿真) 一.功能 二.模块 三.代码程序 四.PCB原理图 一.功能 本系统以STC89C52单片机为核心,主要包括传感器温湿度采集,传感器PM ...

  6. STM32物联网智能鱼缸智能家居系统(程序+原理图+PCB+图文教程)

    本设计: 基于STM32物联网智能鱼缸智能家居系统设计方案(程序+原理图+PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0027 功能说明: 1. ...

  7. 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础

    上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...

  8. STM32音频频谱分析设计方案(程序+原理图+PCB)

    本设计: 基于STM32音频频谱分析设计方案(程序+原理图+PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0030 功能说明: 硬件系统组成=ST ...

  9. 基于51单片机锂电池电压电量检测(原理图+PCB+程序)

    资料编号:198  下面是该资料仿真演示视频: 198-基于51单片机锂电池电压电量检测(原理图+PCB+程序+全套资料) 功能介绍: 采用51系列自带AD的单片机stc12c5a60s2型号单片机( ...

最新文章

  1. Android开发傲娇之作
  2. wk一sm5时间温度控制器_新能源汽车电机控制器温度计算及其模型—DC电容篇
  3. 详解虚函数的实现过程之虚基类(4)
  4. Zigbee中添加用户任务
  5. 华为p4用鸿蒙系统吗_华为p40pro是鸿蒙系统吗
  6. oracle 拉文件进ubuntu,ubuntu 18-20 安装oracle java 打开jnlp文件
  7. go 框架iris 响应记录器
  8. 三层交换机启用OSPF后,如何实现数据转发路径
  9. 自学python能找到工作吗-通过自学python能找到工作吗
  10. EasyBCD误删win10启动项后的修复方法
  11. Linux与Windows编译器的区别
  12. 网络安全基础知识笔记
  13. 利用JDK发布webService实例
  14. Django菜鸟入门
  15. 豆瓣电影TOP250全套下载
  16. DMS - 简介 Driver Monitor System
  17. 开始启程, 你的第一行前端代码
  18. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  19. 算法设计与分析大作业 关于核算检测次数的问题研究 (分治策略 二分法 实例生活运用)
  20. 纹理过滤函数glTexParameteri

热门文章

  1. 模板匹配算法(手写数字识别)
  2. Android 检测获取 Mac 权限
  3. 2023有潜力的新药都有哪些?新药筛选方法总结
  4. Cortex-M3 异常和中断---基于NXP LPC177x/8x
  5. maple函数第二章-微积分:一元函数
  6. 以彼之道,还施彼身:Android 模拟定位
  7. 标注图像 创建cnn网络_如何在网络上创建图
  8. 驱动开发:内核R3与R0内存映射拷贝
  9. 前端知乎:关于阮一峰博客《学习Javascript闭包》章节中最后两个思考题
  10. 【经典数据结构】B树与B+树的对比区别