赞
踩
本设计由STM32单片机+指示灯电路+风扇控制电路+温湿度传感器电路+lcd1602液晶显示电路+蓝牙模块电路+按键电路+电源电路组成。
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装。
具体参数为:
Cortex-M3是ARM公司推出的基于ARMv7架构的MCU内核,ST公司在此内核的基础上完成了USART、DMA、GPIO等外围电路的设计。
STM32单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。
单片机最小系统原理图如下图所示:
实物图:
LCD1602是一种字母数字液晶显示模块,可以显示16个字符和2行文本,因此被命名为LCD1602。它通常用于各种电子项目,特别是基于微控制器系统。该模块包含一个驱动电路,简化了与微控制器或其他数字信号源的接口过程,因此成为业余爱好者和工程师的流行选择。LCD1602由+5V DC供电,可以使用并行或串行通信协议与微控制器通信。它可以显示字母数字字符、符号和图标,并可用于许多应用,包括显示传感器数据、消息和菜单。
LCD1602采用标准的16脚接口,具体定义如下:
电路设计
LCD1602模块实物图:
风扇控制电路使用NPN三极管对风扇进行控制
三极管8050是非常常见的NPN型晶体三极管,在各种放大电路中经常看到它,主要由硅制成,应用范围很广,主要用于高频放大。也可用作开关电路。一般由硅制成。
电路图如下:
8050三极管实物图
5V风扇模块实物图:
HC-05蓝牙串口模块是一种基于蓝牙2.0协议的串口通信模块,它的数据传输速率高达2Mbps,能够满足绝大部分实际应用。它主要通过串口通信的方式,实现了与各种单片机(如STM32、Arduino等)以及其他蓝牙设备的通信。相对于传统串口通信,使用HC-05蓝牙模块可以实现无线传输,有效地解决了传输距离等问题。
HC-05蓝牙模块由两部分组成:蓝牙串口模块和底板电路板。蓝牙串口模块是实际完成数据传输的核心部分,而底板电路板主要负责提供稳定的电源以及与单片机的连接。HC-05蓝牙模块既可以作为主机,也可以作为从机。
hc05蓝牙模块实物图:
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
TIM3_Int_Init(499,7199);//50ms
FengShanInit(); //初始化与LED连接的硬件接口
Beep_Init(); //蜂鸣器初始化
KEY_Init(); //按键初始化
LedInit(); //LED初始化
Lcd_GPIO_init(); //1602接口初始化
Lcd_Init();
fengshan = 1; //上电风扇转一下
PowerLed = 0;
WarnLed = 0;
BUZZER_ON //蜂鸣器上电响一下
delay_ms(200);
BUZZER_OFF
void Lcd_GPIO_init(void) { GPIO_InitTypeDef GPIO_InitStructure; //声明结构体 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~DB15 GPIO_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); }
/** * @brief 读取40bit数据 * @param none. * @retval 1 读取成功,0读取失败. */ int DHT11_ReadData(void) { unsigned int cout = 1; unsigned int T_H, T_L, H_H, H_L, Check; //设置为IO口输出模式 DHT_Set_Output(); //1、MCU开始起始信号 DHT_ResetBit(); delay_ms(25); //拉低至少18ms DHT_SetBit(); delay_us(20); //拉高20~40us //设置为IO口输入模式 DHT_Set_Input(); //2、读取DH21响应 if(DHT_ReadBit() == Bit_RESET) { //等待80us的低电平 cout = 1; while(!DHT_ReadBit() && cout++); //等待80us的高电平 cout = 1; while(DHT_ReadBit() && cout++); //读取8bit的湿度整数数据 H_H = DH21_ReadByte(); //读取8bit的湿度小数数据 H_L = DH21_ReadByte(); //读取8bit的温度整数数据 T_H = DH21_ReadByte(); //读取8bit的温度小数数据 T_L = DH21_ReadByte(); //读取8bit的校验和 Check = DH21_ReadByte(); if(Check == (H_H + H_L + T_H + T_L)) { DHT11.Hum_H = H_H; DHT11.Hum_L = H_L; DHT11.Tem_H = T_H; DHT11.Tem_L = T_L; return 1; } else { return 0; } } return 0; }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。