加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

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

07/04 13:09
405
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

本设计:
基于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);	 	//´®¿Ú³õʼ»¯Îª115200
	 
  TIM3_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;    //·ÀÖ¹Öظ´¼ì²âµ½°´¼ü
	}
}



在这里插入图片描述

资料清单如下:
在这里插入图片描述

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
MCF5282CVM66J 1 Freescale Semiconductor IC,MICROCONTROLLER,32-BIT,COLDFIRE CPU,CMOS,BGA,256PIN,PLASTIC
暂无数据 查看
FS32K146HAT0MLLT 1 NXP Semiconductors RISC Microcontroller

ECAD模型

下载ECAD模型
$11.53 查看
STM32F405RGT6V 1 STMicroelectronics High-performance foundation line, Arm Cortex-M4 core with DSP and FPU, 1 Mbyte of Flash memory, 168 MHz CPU, ART Accelerator

ECAD模型

下载ECAD模型
$12.92 查看

相关推荐

电子产业图谱