Bổn thiết kế:
Cơ vu STM32Đan phiến cơTử ngoại tuyến cường độ kiểm trắc nghi khíPhong minh khíBáo cảnh ( trình tự +Nguyên lý đồ+PCB)
Nguyên lý đồ:Altium Designer
Trình tựBiên dịch khí:keil 5
Biên trình ngữ ngôn: C ngữ ngôn
Biên hào C0023
Hoàn chỉnh hạ tái liên tiếp:
【Đằng tấnVăn đương 】C0023 võng bàn liên tiếp
https://docs.qq.com/doc/DS2JPanJXZ2pwQnBU
Công năng miêu thuật:
Bổn hệ thống doSTM32F103C8T6Đan phiến cơHạch tâm bản,Tử ngoại tuyếnTruyện cảm khí,LCD1602Dịch tinh hiển kỳ, phong minh khí báo cảnh, án kiện khống chế cậpĐiện nguyênTổ thành.
1, thông quá truyện cảm khí kiểm trắc truyện cảm khí thật tế trị, tịnh tương truyện cảm khí thật tế trị hiển kỳ tại LCD1602 dịch tinh thượng.
2, cảm khí kiểm trắc thải dụng đích thị AD sổ cư chuyển hoán, nhiên hậu truyện cảm khí thủ sách vận toán hoạch đắc đích.
3, tam cá án kiện thiết trí quắc trị, phân biệt vi thiết trí kiện, thiết trí +, thiết trí -, kỳ trung thiết trí +, thiết trí - chỉ hữu tại thiết trí mô thức hạ tài năng tiến hành thao tác.
4, tại thiết trí mô thức hạ, dịch tinh hữu đối ứng đích hiển kỳ tiêu chí, thiết trí quắc trị tồn trữ đáo đan phiến cơ Flash trung, cụ hữu điệu điện bất đâu thất, vô nhu trọng tân thiết trí.
5, thiết trí trị dữ thải tập trị thật thời đối bỉ, như quả xuất hiện dị thường tình huống, phong minh khí báo cảnh đề tỉnh.
Nguyên lý đồ ( đề cung nguyên văn kiện ):
PCB ( đề cung nguyên văn kiện ):
Nguyên trình tự ( đề cung nguyên văn kiện ):
#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_ADDR0X08010000 // ×¢ÒⲻͬоƬ ÉÈÇø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; //·ÀÖ¹Öظ´¼ì²âµ½°´¼ü
}
}
Tư liêu thanh đan như hạ: