标签:HAL PIN 温湿度 NB IOT GPIOB init GPIO void
最终效果及试题
所用文件
代码参考
main.c部分代码参考
/**
******************************************************************************
* File Name : main.c
* Description : Main program body
******************************************************************************
*/
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "adc_reader.h"
#include "sht3x.h"
int huxi = 0, key3IsPressed = 0, key4IsPressed = 0;
/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
// 开发板平台初始化
BoardInitMcu();
BoardInitPeriph();
keys_init();//按键初始化
setTimer2Callback(Time2Handler);
Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
}
/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void KeyDownHandler(void) {
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 0){
huxi = !huxi;
HAL_Delay(10);
key3IsPressed = 0;
key4IsPressed = 0;
while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 0);
}
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0){
huxi = 0;
HAL_Delay(10);
key3IsPressed = 1;
key4IsPressed = 0;
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0);
}
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == 0){
huxi = 0;
HAL_Delay(10);
key3IsPressed = 0;
key4IsPressed = 4;
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == 0);
}
}
/**
对GPIO引脚的初始化
key2-4引脚分别为PC_13,PB_1,PB_5
led2 -> PB_8
**/
void GPIOInit(){
//HAL_GPIO_Init
GPIO_InitTypeDef init;
//PC_13的配置
init.Pin = GPIO_PIN_13;
init.Mode = GPIO_MODE_INPUT;
init.Pull = GPIO_NOPULL;
init.Speed = GPIO_SPEED_FREQ_HIGH;
//GPIO_InitTypeDef *取的是地址可以用&符号取
HAL_GPIO_Init(GPIOC, &init);
//开启使能
__HAL_RCC_GPIOC_CLK_ENABLE();
//PB_1的配置
init.Pin = GPIO_PIN_1;
//GPIO_InitTypeDef *取的是地址可以用&符号取
HAL_GPIO_Init(GPIOB, &init);
//开启使能
__HAL_RCC_GPIOB_CLK_ENABLE();
//PB_5的配置
init.Pin = GPIO_PIN_5;
//GPIO_InitTypeDef *取的是地址可以用&符号取
HAL_GPIO_Init(GPIOB, &init);
//开启使能
__HAL_RCC_GPIOB_CLK_ENABLE();
//PB_8的配置
init.Pin = GPIO_PIN_8;
init.Mode = GPIO_MODE_OUTPUT_PP;
//GPIO_InitTypeDef *取的是地址可以用&符号取
HAL_GPIO_Init(GPIOB, &init);
//开启使能
__HAL_RCC_GPIOB_CLK_ENABLE();
}
void ShowTemHumInfo(){
float t, h;
call_sht11(&t, &h);
//温度
OLED_ShowNum(104,2,t,2,16);
if(t < 10){
//清空后面无用数字
OLED_ShowString(112, 2, (unsigned char *)"");
}
//湿度
OLED_ShowNum(80,4,h,2,16);
if(h < 10){
//清空后面无用数字
OLED_ShowString(88, 4, (unsigned char *)"");
}
//其实如果你已经确定传感数值长度为2的话可以不用考虑极端情况
}
void Delay_US(int i){
while(i--){
for(int j = 10; j > 0; j--);
}
}
/**
* Main application entry point.
*/
int main( void )
{
Init();
OLED_Init();
SHTXX_Init();
GPIOInit();
/**量程 温度-10~60°C
湿度 0-100%RH **/
OLED_ShowString(8, 2, (unsigned char *)"Temperature:");
OLED_ShowString(8, 4, (unsigned char *)"Humidity:");
while( 1 )
{
KeyDownHandler();
ShowTemHumInfo();
if(huxi){
for(int i = 0; i < 500; i++){
if(i % 100 == 0) KeyDownHandler();
Delay_US(i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
Delay_US(500 - i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
KeyDownHandler();
for(int i = 0; i < 500; i++){
if(i % 100 == 0) KeyDownHandler();
Delay_US(i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
Delay_US(500 - i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
}
}
else if(key3IsPressed) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
else if(key4IsPressed) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
}
}
标签:HAL,PIN,温湿度,NB,IOT,GPIOB,init,GPIO,void 来源: https://www.cnblogs.com/godshadow/p/16394629.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。