touchGFX综合学习七、touchGFX使用实体按键(正点原子H750开发版)

一、touchGFX工程搭建

1、touchGFX界面搭建

放置一个box作为背景,使用实体按键更改背景颜色。
在这里插入图片描述

2、touchGFX interactions添加

红色框内填写的是实体按键返回值哦。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码修改

1、实现按键初始化和扫描函数

按键返回值要和touchgfx designer interactions里面设置的一样哦,
我的工程返回值为:

#define KEY0_PRES 	'0'  	//KEY0���º󷵻�ֵ
#define KEY1_PRES	'1'	//KEY1���º󷵻�ֵ
#define KEY2_PRES	'2'	//KEY2���º󷵻�ֵ
#define WKUP_PRES   '3'	//WKUP���º󷵻�ֵ

在这里插入图片描述
key.c

#include "key.h"
#include "delay.h"

//?????????????
void key_init(void)
{
    GPIO_InitTypeDef GPIO_Initure;

	__HAL_RCC_GPIOA_CLK_ENABLE();           //????GPIOA???
    __HAL_RCC_GPIOC_CLK_ENABLE();           //????GPIOC???
    __HAL_RCC_GPIOH_CLK_ENABLE();           //????GPIOH???

    GPIO_Initure.Pin=GPIO_PIN_0;            //PA0
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //????
    GPIO_Initure.Pull=GPIO_PULLDOWN;        //????
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;     //????
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
    
    GPIO_Initure.Pin=GPIO_PIN_13;           //PC13
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //????
    GPIO_Initure.Pull=GPIO_PULLUP;          //????
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;     //????
    HAL_GPIO_Init(GPIOC,&GPIO_Initure);
    
    GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3; //PH2,3
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);
}

//????????????
//????????
//mode:0,???????????;1,?????????;
//0??????κ????????
//1??WKUP???? WK_UP
//?????????????????,KEY0>KEY1>KEY2>WK_UP!!
u8 key_scan(u8 mode)
{
    static u8 key_up=1;     //??????????
    if(mode==1)key_up=1;    //???????
    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
    {
        key_up=0;
        if(KEY0==0)       return KEY0_PRES;
        else if(KEY1==0)  return KEY1_PRES;
        else if(KEY2==0)  return KEY2_PRES;
        else if(WK_UP==1) return WKUP_PRES;          
    }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
    return 0;   //?????????
}

key.h

#ifndef _KEY_H
#define _KEY_H
#include "sys.h"
#ifdef __cplusplus
extern "C"
{
#endif

#define KEY0        HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3)  //KEY0����PH3
#define KEY1        HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2)  //KEY1����PH2
#define KEY2        HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) //KEY2����PC13
#define WK_UP       HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)  //WKUP����PA0

#define KEY0_PRES 	'0'  	//KEY0���º󷵻�ֵ
#define KEY1_PRES	'1'	//KEY1���º󷵻�ֵ
#define KEY2_PRES	'2'	//KEY2���º󷵻�ֵ
#define WKUP_PRES   '3'	//WKUP���º󷵻�ֵ

void key_init(void);  //����IO��ʼ������
u8 key_scan(u8 mode); //����ɨ�躯��

#ifdef __cplusplus
}
#endif
#endif

2、添加一个KeyController类

KeyController类要继承ButtonController类。在ButtonController中有两个纯虚函数,子类必须实现

在这里插入图片描述
KeyController.hpp

#ifndef _KEYCONTROLLER_T_
#define _KEYCONTROLLER_T_


#include <platform/driver/button/ButtonController.hpp>


namespace touchgfx
{
class KeyController : public ButtonController
{
public:
	KeyController();
	virtual ~KeyController();
	
	virtual void init();
	virtual bool sample(uint8_t& key);		
	
};
}
#endif

KeyController.cpp

#include "KeyController.hpp"
#include "key.h"

using namespace touchgfx;

KeyController::KeyController()
{
	
}
KeyController::~KeyController()
{
	
}
		
void KeyController::init()
{
	key_init();
}
bool KeyController::sample(uint8_t& key)
{
	uint8_t keyValue = key_scan(0);
	if(keyValue !=0)
	{
		key = keyValue;
		
		return true;
	}
	
	return false;
}	


3、将新添加的类赋值为系统

打开TouchGFXHAL.cpp文件新建一个KeyController对象

static touchgfx::KeyController keyController;

然后在void TouchGFXHAL::initialize()里面这个对象赋值给系统,记得调用初始化函数

	keyController.init();
	setButtonController(&keyController);

在这里插入图片描述


#include <TouchGFXHAL.hpp>
#include <KeyController.hpp>

static touchgfx::KeyController keyController;
/* USER CODE BEGIN TouchGFXHAL.cpp */

using namespace touchgfx;

void TouchGFXHAL::initialize()
{
    // Calling parent implementation of initialize().
    //
    // To overwrite the generated implementation, omit call to parent function
    // and implemented needed functionality here.
    // Please note, HAL::initialize() must be called to initialize the framework.

    TouchGFXGeneratedHAL::initialize();
	
	uint32_t frameSize = DISPLAY_HEIGHT*DISPLAY_WIDTH*3;
	setFrameBufferStartAddresses((void *)(0xC0000000),(void *)(0xC0000000+frameSize),(void *)(0xC0000000+frameSize*2));
	setFrameRateCompensation(true);
	
	keyController.init();
	setButtonController(&keyController);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰搞电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值