} else {
key2_up_cnt = 0;
}
//KEY3
new_status = HAL\_GPIO\_ReadPin(KEY3_GPIO, KEY3_GPIO_PIN);
if((key3_status == KEY_UP) && (new_status == KEY_DOWN)) {
key3_down_cnt++;
if(key3_down_cnt >= DEBOUNCE_CNT) {
is_key3_down = 1;
key3_status = KEY_DOWN;
}
} else {
key3_down_cnt = 0;
}
if((key3_status == KEY_DOWN) && (new_status == KEY_UP)) {
key3_up_cnt++;
if(key3_up_cnt >= DEBOUNCE_CNT) {
is_key3_down = 0;
key3_status = KEY_UP;;
}
} else {
key3_up_cnt = 0;
}
//KEY4
new_status = HAL\_GPIO\_ReadPin(KEY4_GPIO, KEY4_GPIO_PIN);
if((key4_status == KEY_UP) && (new_status == KEY_DOWN)) {
key4_down_cnt++;
if(key4_down_cnt >= DEBOUNCE_CNT) {
is_key4_down = 1;
key4_status = KEY_DOWN;
}
} else {
key4_down_cnt = 0;
}
if((key4_status == KEY_DOWN) && (new_status == KEY_UP)) {
key4_up_cnt++;
if(key4_up_cnt >= DEBOUNCE_CNT) {
is_key4_down = 0;
key4_status = KEY_UP;;
}
} else {
key4_up_cnt = 0;
}
}
关于resetKeyx()
实现功能:用于清楚按键标志位
源代码:
void resetKeyx(void){
is_keyx_down = 0;
}
注意:在调用完isKeyxPressed()时一定要调用resetKeyx()用于清楚对应按键的标志位不然按键无法复用
实现案例
实现功能:按键2按下灯实现亮灭效果
#include <string.h>
#include “board.h”
#include “hal_key.h”
#include “tim-board.h”
#include “timer_handles.h”
void Init() {
BoardInitMcu();
BoardInitPeriph();
keys_init();//按键初始化
setTimer2Callback(Time2Handler);
Tim2McuInit(1);
}
void Scan_Key()
{
if(isKey2Pressed())
{
GpioToggle(&Led1);
resetKey2();
}
}
int main( void )
{
Init();
while( 1 )
{
Scan_Key();
}
}
### 三、关于OLED屏函数解析
重点函数()
导入#incldue “hal_oled.h”
OLED_Init(); //OLED屏初始化
OLED_Clear(); //清屏函数
OLED_Clear_Page(uint8_t page) //清除行
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr);
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
//显示num的len个字节的16进制值值
//x,y :起点坐标
//len :字节个数
//size:字体大小
//num:数值(0~4294967295);
void OLED_ShowHex(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
//显示一个字符号串
//x,y :起点坐标
//要显示的字符串
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr);
//显示汉字
//x,y :起点坐标
//输入oledfont.h下的Hzk数组的第几位,Hzk数组取模了一些开发当中常用到的字符可以对照写入
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);
//显示汉字
//x,y :起点坐标
//取模好的字符数组名
void OLED_ShowCHineseArray(uint8_t x,uint8_t y,char arr[32]);
//显示图片
//x,y :起点坐标
//width:图片的宽度 height:图片的高度
//取模好的图片数组
void OLED_DrawBMP(unsigned char x, unsigned char y,unsigned char width, unsigned char hight,unsigned char BMP[])
使用案例
#include <string.h>
#include “board.h”
#include “hal_key.h”