嵌入式系统期末大作业

上传人:西****梢 文档编号:356960256 上传时间:2023-07-18 格式:DOCX 页数:23 大小:1.24MB
返回 下载 相关 举报
嵌入式系统期末大作业_第1页
第1页 / 共23页
嵌入式系统期末大作业_第2页
第2页 / 共23页
嵌入式系统期末大作业_第3页
第3页 / 共23页
嵌入式系统期末大作业_第4页
第4页 / 共23页
嵌入式系统期末大作业_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《嵌入式系统期末大作业》由会员分享,可在线阅读,更多相关《嵌入式系统期末大作业(23页珍藏版)》请在金锄头文库上搜索。

1、2021-12-29桂林理工大学嵌入式系统期末大作业-基于STM32的温湿度监控 嵌入式系统的设计与实现学号:31920520512姓名:专业班级:计算机科学与技术同组姓名:目录基于STM32的温湿度监控设计与实现11. DHT11简介12.系统硬件设计22.1. DHT11电路图22.2. LED电路图22.3. KEY电路图32.4.引脚分配表43.系统软件设计43.1.系统流程图43.2.代码清单53.2.1. LED代码53.2.2. KEY代码63.2.3. DHT11代码83.3.C/OS-II移植113.4. main.c代码清单144. 系统测试185. 总结与展望20基于ST

2、M32的温湿度监控设计与实现1. DHT11简介DHT11是广州奥松有限公司生产的一款湿温度一体化的数字传感器,该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接,通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口就能实现,传感器内部湿度和温度数据一次性传给单片机,数据采用 校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA,其性能指标和特性如下: 工作电压范围:3.5V-5.5V。 湿度测量范围:2090RH。 工作

3、电流:平均0.5mA。 温度测量范围:050。 与TTL兼容(5V)。 温度分辨率:18位。 采样周期:1S。 单总线结构。 湿度分辨率:1RH8位。DHT11的系统结构框图如下2.系统硬件设计2.1. DHT11电路图DHT11数字湿温度传感器连接方法极为简单。第一引脚接电源,第三引脚接地,数据端为第二引脚,可直接接单片机的I/O口,本次实验的接口为b14口。2.2. LED电路图2.3. KEY电路图2.4.引脚分配表引脚名称注释1VDD供电35.5VDC2DATA串行数据,单总线3GND接地,电源负极3.系统软件设计3.1.系统流程图3.2.代码清单3.2.1. LED代码Led.c代码

4、:#include led.h#include stm32f10x.hvoid LED_Init(void) GPIO_InitTypeDef GPIO_InitTypeStructer;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);GPIO_InitTypeStructer.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitTypeStructer.GPIO_Pin=GPIO_Pin_8;GPIO_InitTypeStructer.GPIO_Speed=GPIO_Spee

5、d_50MHz;GPIO_Init(GPIOA,&GPIO_InitTypeStructer);LED0=1;GPIO_InitTypeStructer.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitTypeStructer.GPIO_Pin=GPIO_Pin_2;GPIO_InitTypeStructer.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitTypeStructer);LED1=1;Led.h代码:#ifndef _LED_H#define _LED_H#include sys.hvoid LE

6、D_Init(void);#define LED0 PAout(8)#define LED1 PDout(2)#endif3.2.2. KEY代码Key.c代码:#include stm32f10x.h#include key.h#include sys.h #include delay.hvoid KEY_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_

7、Pin = GPIO_Pin_5;/KEY0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /设置成上拉输入 GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;/KEY1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /设置成上拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;/WK_

8、UPGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; /设置成下拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure);/mode:0,不支持连续按;1,支持连续按;/0,没有任何按键按下/1,KEY0按下/2,KEY1按下/3,KEY2按下 /4,WK_UP按下 /注意此函数有响应优先级,KEY0KEY1KEY2WK_UPu8 KEY_Scan(u8 mode) static u8 key_up=1;/按键松开标志if(mode=1)key_up=1; /支持连按 if(key_up&(KEY0=0|KEY1=0|WK_U

9、P=1)delay_ms(10);/去抖动 key_up=0;if(KEY0=0)return KEY0_PRES;else if(KEY1=0)return KEY1_PRES;else if(WK_UP=1)return WKUP_PRES;else if(KEY0=1&KEY1=1&WK_UP=0)key_up=1; return 0;/ 无按键按下Key.h代码:#ifndef _KEY_H#define _KEY_H#include sys.h #define KEY0 PCin(5)#define KEY1 PAin(15)#define WK_UP PAin(0)#define

10、KEY0_PRES 1/KEY0按下#define KEY1_PRES 2/KEY1按下#define WKUP_PRES 3/WK_UP按下void KEY_Init(void);u8 KEY_Scan(u8);#endif3.2.3. DHT11代码Dht11.c代码:#include dht11.h#include delay.h /复位DHT11void DHT11_Rst(void) DHT11_IO_OUT(); /SET OUTPUT DHT11_DQ_OUT=0; /拉低DQ delay_ms(20); /拉低至少18ms DHT11_DQ_OUT=1; /DQ=1 delay

11、_us(30); /主机拉高2040us/等待DHT11的回应/返回1:未检测到DHT11的存在/返回0:存在u8 DHT11_Check(void) u8 retry=0;DHT11_IO_IN();/SET INPUT while (DHT11_DQ_IN&retry=100)return 1;else retry=0; while (!DHT11_DQ_IN&retry=100)return 1; return 0;/从DHT11读取一个位/返回值:1/0u8 DHT11_Read_Bit(void) u8 retry=0;while(DHT11_DQ_IN&retry100)/等待变为

12、低电平retry+;delay_us(1);retry=0;while(!DHT11_DQ_IN&retry100)/等待变高电平retry+;delay_us(1);delay_us(40);/等待40usif(DHT11_DQ_IN)return 1;else return 0; /从DHT11读取一个字节/返回值:读到的数据u8 DHT11_Read_Byte(void) u8 i,dat; dat=0;for (i=0;i8;i+) dat=1; dat|=DHT11_Read_Bit(); return dat;/从DHT11读取一次数据/temp:温度值(范围:050)/humi:湿度值(范围:20%90%)/返回值:0,正常;1,读取失败u8 DHT11_Read_Data(u8 *temp,u8 *humi) u8 buf5;u8 i;DHT11_Rst();if(DHT11_Check()=0)for(i=0;i5;i+)/读取40位数据bufi=DHT11_Read_Byte();if(buf0+buf1+buf2+buf3)=buf4)*humi=buf0;*temp=buf2;else return 1;return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号