当前位置: 首页 > 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 字(可选)

点赞分享一起学习成长。

http://www.xdnf.cn/news/1001773.html

相关文章:

  • Unity-通过Transform类学习迭代器模式
  • 数据集-目标检测系列- 孔雀 数据集 peacock >> DataBall
  • FFmpeg 压缩视频文件
  • 力扣HOT100之技巧:136. 只出现一次的数字
  • C#调用C++ 结构体方法
  • GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • LSTM助力迁移学习!深度学习架构性能提升,准确率达到99.91%!
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • 用于在多个远程计算机上求解的 Ansoft RSM 设置 - Windows
  • 实战案例-FPGA的JESD204B IP核配置详解
  • 【springboot组件开发】三方中间件自定义自动装载(rabbitmq/rocketmq/cmq)
  • 记录一次jenkins slave因为本地安装多个java版本导致的问题
  • stm32f103 标准库移植rt-thread nano
  • 学习笔记整理之状态图与状态图搜索
  • Windows 提权工具(“Potato“ 系列)用法指南
  • 火线、零线、地线 基础知识
  • 实现图片懒加载
  • 大话软工笔记—架构的概要设计
  • 【AS32系列MCU调试教程】基础配置:Eclipse项目与工具链的优化
  • SD-WAN优化云应用与多云架构访问的关键策略
  • 408考研逐题详解:2009年第39题
  • 深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • Kratos 与Golang Cms的关系
  • 深度学习环境搭建(pycharm+yolov5)
  • 【AWS入门】IAM多重身份验证(MFA)简介
  • 深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案
  • OpenAI API:LLM编程的事实标准(上)