当前位置: 首页 > news >正文

基于STM32汽车温度空调控制系统

基于STM32温度空调控制

(程序+原理图+设计报告)

功能介绍

具体功能:

本控制系统主要以数字控制器MCU为控制中枢,采用STM32为控制芯片,外围电路有DS18B20温度采集电路,风扇控制电路,1602液晶显示电路和电源电路等组成。

1.通过DS18B20检测温度,实时显示在液晶上。

2.通过按键设置温度阈值,将阈值显示在1602液晶上,当温度超过阈值时,风扇启动降温,温度低于阈值,则风扇不转动。

添加图片注释,不超过 140 字(可选)

程序

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
#include "timer.h"
#include "lcd1602.h"
#include "ds18b20.h"  
#include <string.h>
#include "key.h"unsigned char relayFlag=1;unsigned char BufTab[maxBuf]; //wifi数据暂存
unsigned char Count;	   //串口数据计数
unsigned char UartBusy=0;  //盘忙
unsigned char ReadFlag=0;//读取标志char dis0[16];
char dis1[16];
float temperature; 
unsigned char i,rekey ;
unsigned int SetNum= 35;
int main(void){ delay_init();	    	 //延时函数初始化	  uart_init(9600);	 	//串口初始化为115200TIM3_Int_Init(499,7199);//50ms  	 LED_Init();		  		//初始化与LED连接的硬件接口KEY_Init(); 
// 	Adc_Init();		  		//ADC初始化	    Lcd_GPIO_init();  Lcd_Init();		 delay_ms(20);//	while(DS18B20_Init());	//DS18B20初始化	Lcd_Puts(0,0,"My Designer!");//显示while(1){if((key1==0)||(key2==0))//按键按下{if(rekey == 0){delay_ms(10);}		}else{rekey =0;}if(disFlag==1)//定时读取温度{temperature=(float)DS18B20_Get_Temp()/10;	//缩小10倍为实际值	   disFlag = 0;}}											    
}	
#include "lcd1602.h"/************************端口初始化*******************************/
void Lcd_GPIO_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;   //声明结构体/********Data端口设置*************/RCC_APB2PeriphClockCmd(RCC_GPIO_DATA, ENABLE);  //打开端口B时钟 GPIO_InitStructure.GPIO_Pin  = GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN; //  DB8~DB15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_DATA_0, &GPIO_InitStructure);      //初始化端口/********使能端口设置**********/RCC_APB2PeriphClockCmd(RCC_GPIO_EN, ENABLE);    	//打开端口时钟 GPIO_InitStructure.GPIO_Pin =  GPIO_EN_PIN;     	// 使能端口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_EN, &GPIO_InitStructure);/********读/写端口设置**********/RCC_APB2PeriphClockCmd(RCC_GPIO_RW, ENABLE);    //打开端口时钟 GPIO_InitStructure.GPIO_Pin =  GPIO_RW_PIN;     // 使能端口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //标准输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_RW, &GPIO_InitStructure);/********指令/数据端口设置**********/RCC_APB2PeriphClockCmd(RCC_GPIO_RS, ENABLE);    //打开端口时钟 GPIO_InitStructure.GPIO_Pin =  GPIO_RS_PIN;     // 使能端口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽复用输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_RS, &GPIO_InitStructure);}
/******************************************************************/void Lcd_Init( void )  //初始化
{  Lcd_GPIO_init();delay_us(1500);                     //延时15msLcd_Write_Command( 0x38,0);       // 写指令38H 不检测忙信号delay_us(500);				      //延时5msLcd_Write_Command( 0x38,0);       // 写指令38H 不检测忙信号delay_us(500);					  //延时5msLcd_Write_Command( 0x38,0);       // 写指令38H 不检测忙信号//以后每次写指令、读/写数据操作之前需检测忙信号Lcd_Write_Command( 0x38,1);       //显示模式设置 Lcd_Write_Command( 0x08,1);		  //显示关闭Lcd_Write_Command( 0x01,1);       //显示清屏Lcd_Write_Command( 0x06,1);       //显示光标移动设置 Lcd_Write_Command( 0x0C,1); 	  //显示开、光标不显示
} 
/******************************************************/void Lcd_En_Toggle(void) //发使能脉冲
{SET_EN;        //使能1delay_us(5);   //延时160usCLE_EN;
}
#include "key.h"
//	 
*****//完整资料
****//***微信公众号:木子单片机****/
//All rights reserved									   
//	 //按键初始化函数 
//PA15和PC5 设置成输入
void KEY_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//PA5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15} void Lcd_Busy(void)//判断忙
{unsigned int later0=0;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_GPIO_DATA, ENABLE);    //打开DATA端口时钟 GPIO_InitStructure.GPIO_Pin  = GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN; //  DB8~DB15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入模式 = 上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_DATA_7, &GPIO_InitStructure);      //打开忙检测端口CLE_RS; //RS = 0//delay_us(1);   //延时10usSET_RW; //RW = 1//delay_us(1);   //延时10usSET_EN; //EN = 1//delay_us(2);   //延时20uswhile ((GPIO_ReadInputDataBit(GPIO_DATA_7,GPIO_DATA_7_PIN))&&(later0<20000)) //循环等待忙检测端口 = 0{delay_us(5);later0++;	}CLE_EN; //EN = 0//恢复端口为输出状态 RCC_APB2PeriphClockCmd(RCC_GPIO_DATA, ENABLE);    //打开DATA端口时钟 GPIO_InitStructure.GPIO_Pin  = GPIO_DATA_0_PIN|GPIO_DATA_1_PIN|GPIO_DATA_2_PIN|GPIO_DATA_3_PIN|GPIO_DATA_4_PIN|GPIO_DATA_5_PIN|GPIO_DATA_6_PIN|GPIO_DATA_7_PIN; //  DB8~DB15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度GPIO_Init(GPIO_DATA_7, &GPIO_InitStructure);} void Gpio_data(unsigned char x)  //端口置入数据
{  
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_0_PIN);  //DB0
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_1_PIN);  //DB1
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_2_PIN);  //DB2
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_3_PIN);  //DB3
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_4_PIN);  //DB4
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_5_PIN);  //DB5
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_6_PIN);  //DB6
GPIO_ResetBits(GPIO_DATA_0, GPIO_DATA_7_PIN);  //DB7
if(x&0X01)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_0_PIN);//DB0
if(x&0X02)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_1_PIN);//DB1
if(x&0X04)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_2_PIN);//DB2
if(x&0X08)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_3_PIN);//DB3
if(x&0X10)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_4_PIN);//DB4
if(x&0X20)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_5_PIN);//DB5
if(x&0X40)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_6_PIN);//DB6
if(x&0X80)GPIO_SetBits(GPIO_DATA_0, GPIO_DATA_7_PIN);//DB7
}//向液晶里面写入指令  时序:RS=L,RW=L,Data0-Data7=指令码,E=高脉冲
void Lcd_Write_Command(unsigned char x,char Busy) 
{ if(Busy) Lcd_Busy();//delay_us(1);   //延时10usCLE_RS;  //RS = 0 //delay_us(1);   //延时10usCLE_RW;  //RW = 0 //delay_us(4);   //延时40usGpio_data(x);  //端口置入数据//delay_us(4);   //延时40usLcd_En_Toggle();  //发使能脉冲//delay_us(1);   //延时100usLcd_Busy(); //测忙}
//向液晶里面写入数据  时序:RS=H,RW=L,Data0-Data7=指令码,E=高脉冲
void Lcd_Write_Data( unsigned char x) //向液晶里面写入数据 
{ Lcd_Busy(); //测忙//delay_us(1);   //延时10usSET_RS;   //RS = 1 //delay_us(1);   //延时10usCLE_RW;   //RW = 0//delay_us(4);   //延时40usGpio_data(x);//delay_us(4);   //延时40usLcd_En_Toggle();  //发使能脉冲//delay_us(1);   //延时100usLcd_Busy(); //测忙} void Lcd_SetXY(unsigned char x,unsigned char y)   //字符初始位置设定,x表示列,y表示行 
{ unsigned char addr; if(y==0) addr=0x80+x; else if(y==1)addr=0xC0+x; Lcd_Write_Command(addr,1) ; 
} 
/******************************************************/void Lcd_Puts(unsigned char x,unsigned char y, unsigned char *string) //向1602写一个字符串 
{ //unsigned char i=0;Lcd_SetXY(x,y); while(*string) { Lcd_Write_Data(*string); string++; } 
}void Lcd_1Put(unsigned char x,unsigned char y, unsigned char Data0)
{Lcd_SetXY(x,y); Lcd_Write_Data(Data0); 
}

硬件设计

使用元器件:

单片机:STM32F103;

添加图片注释,不超过 140 字(可选)

流程图:

添加图片注释,不超过 140 字(可选)

设计资料

01原理图

本系统原理图采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件Keil5 MDK版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计报告

一万四千字设计报告,具体如下!

添加图片注释,不超过 140 字(可选)

04设计资料

全部资料包括程序(含注释)、AD原理图、结构框图、设计报告、流程图、实物图等。具体内容如下,全网最全! !

添加图片注释,不超过 140 字(可选)

点赞分享一起学习成长。

相关文章:

  • 使用 C/C++的OpenCV 裁剪 MP4 视频
  • SQL进阶之旅 Day 29:NoSQL结合使用策略
  • 重启杀手--误操作梳理
  • CHI协议验证中的异常及边界验证
  • Vue 动态设置当前页面标题和图标
  • 【狂飙AGI】第3课:大模型时代前沿技术
  • 【新能源汽车技术全景解析:构建智能出行新生态】
  • 力扣:基本计算器
  • Nodejs特训专栏-基础篇:1. Node.js环境搭建与项目初始化详细指南
  • Vue3+vite 路由实现
  • Django框架认证系统默认在登录成功后尝试重定向到/accounts/profile/
  • 埃隆·马斯克宣布特斯拉Robotaxi自动驾驶出租车服务将于6月22日在奥斯汀“试运行”启动
  • 网络层协议:IP
  • 医疗集团级“人-机-料-法-环”全流程质控的医疗数据质控方案分析
  • 在QtCreator中使用GitHubCopilot
  • 如何确定某个路由器的路由表?(计算机网络)
  • vue 如何配置使用 env文件
  • 没有宝塔面板的服务器上的WordPress网站打包下载到本地?
  • CSS 基础选择器 文字控制属性 综合案例
  • python打卡day52
  • 网站关键词seo怎么做/常见的微信营销方式有哪些
  • 网站建设面对的问题/企业网站制作模板
  • 网站建设案例基本流程图/客户引流推广方案
  • 做博彩的网站赚钱吗/适合seo的建站系统
  • 电子工程网注册/小红书seo是什么意思
  • 国家企业信用信息没有网站怎么做/seo优化网站的手段