2021物联网国赛Lora模块通用库开发——A卷
1:声明全局变量和导入本次所使用到的包
#include "hal_oled.h"
int Stat_key=0; //记录按键次数
2:定义按键
注:新大陆Lora开发板当中只有三个按键,位置不能写错
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)
3:声明一个函数用于对按键进行实时扫描
void Scanf_key()
{
if(KEY2==0) //当按键2被按时
{
HAL_Delay(1); //按键消抖
if(KEY2==0) //再次确认按键被按下时
{
OLED_ShowString(120,2*Stat_key,(uint8_t *)" "); //当"<"往下移动时原来的位置使用空格代替
Stat_key--; //KEY2按下每次减1
if(Stat_key==-1) //防止屏幕溢出
{
Stat_key=2;
}
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<");
while(KEY2==0);
}
}
if(KEY3==0)
{
HAL_Delay(1);
if(KEY3==0)
{
OLED_ShowString(120,2*Stat_key,(uint8_t *)" ");
Stat_key++; //KEY3按下每次加一
if(Stat_key==3)
{
Stat_key=0;
}
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<");
while(KEY3==0);
}
}
}
注:1:Lora模块的OLED屏的行数分别是0 2 4 6如果小于0或者大于6时显示会出现错误
2:2*Stat_key因为一个字符在OLED屏当中占据两个字符 当KEY3按下时Start_key会从一开始的0变成1 所以"<“会从第0行出现在第 二行 而之前第0行的”<"由于空格来进行代替。
4:main函数
int main( void )
{
Init();
OLED_Init(); //初始化OLED屏
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<"); //初始位置在第0行
while( 1 )
{
Scanf_key(); //调用按键扫描函数
OLED_ShowString(0,0,(uint8_t *)"Number");
OLED_ShowString(0,2,(uint8_t *)"NBIOT");
OLED_ShowString(0,4,(uint8_t *)"C51");
}
}
5:全部代码
/**
******************************************************************************
* 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 "hal_oled.h"
int Stat_key=0;
/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
// 开发板平台初始化
BoardInitMcu();
BoardInitPeriph();
keys_init();//按键初始化
setTimer2Callback(Time2Handler);
Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
}
/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void KeyDownHandler(void) {
}
/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
for (int delay = 0; delay < 30; delay++) {
HAL_Delay(10);
}
}
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)
#define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)
void Scanf_key()
{
if(KEY2==0)
{
HAL_Delay(1);
if(KEY2==0)
{
OLED_ShowString(120,2*Stat_key,(uint8_t *)" ");
Stat_key--;
if(Stat_key==-1)
{
Stat_key=2;
}
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<");
while(KEY2==0);
}
}
if(KEY3==0)
{
HAL_Delay(1);
if(KEY3==0)
{
OLED_ShowString(120,2*Stat_key,(uint8_t *)" ");
Stat_key++;
if(Stat_key==3)
{
Stat_key=0;
}
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<");
while(KEY3==0);
}
}
}
/**
* Main application entry point.
*/
int main( void )
{
Init();
OLED_Init();
OLED_ShowString(120,2*Stat_key,(uint8_t *)"<");
while( 1 )
{
Scanf_key();
OLED_ShowString(0,0,(uint8_t *)"Number");
OLED_ShowString(0,2,(uint8_t *)"NBIOT");
OLED_ShowString(0,4,(uint8_t *)"C51");
}
}