hc32l13x ch455h 4x5矩阵键盘,数码管驱动,按键使用gpio,数码管使用PB12,PB13gpio引脚控制,具体实现代码
时间: 2023-10-21 07:05:17 浏览: 90
以下是基于HC32L13X的CH455H 4x5矩阵键盘和数码管驱动的具体实现代码:
```c
#include "hc32l13x.h"
#define KEY_PORT GpioPortC
#define KEY_PIN_START GpioPin0
#define KEY_PIN_END GpioPin7
#define DIG_PORT GpioPortB
#define DIG_PIN1 GpioPin12
#define DIG_PIN2 GpioPin13
#define DELAY_TIME 1000
uint8_t key_table[4][5] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 0},
{'A', 'B', 'C', 'D', 'E'},
{'F', 'G', 'H', 'I', 'J'}
};
uint8_t get_key(void)
{
uint8_t i, j;
uint8_t key_code = 0xFF;
for (i = 0; i < 4; i++)
{
Gpio_WriteOutput(KEY_PORT, KEY_PIN_START << i, PinState_Reset);
for (j = 0; j < 5; j++)
{
if (Gpio_GetInput(KEY_PORT, KEY_PIN_START << j) == PinState_Reset)
{
key_code = key_table[i][j];
break;
}
}
Gpio_WriteOutput(KEY_PORT, KEY_PIN_START << i, PinState_Set);
if (key_code != 0xFF)
{
break;
}
}
return key_code;
}
void delay(uint32_t time)
{
uint32_t i;
for (i = 0; i < time; i++);
}
void display_digit(uint8_t digit)
{
switch (digit)
{
case 0:
Gpio_WriteOutput(DIG_PORT, DIG_PIN1, PinState_Reset);
Gpio_WriteOutput(DIG_PORT, DIG_PIN2, PinState_Set);
break;
case 1:
Gpio_WriteOutput(DIG_PORT, DIG_PIN1, PinState_Set);
Gpio_WriteOutput(DIG_PORT, DIG_PIN2, PinState_Reset);
break;
default:
break;
}
}
int main(void)
{
uint8_t key_code = 0xFF;
uint8_t digit = 0;
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_InitIO(KEY_PORT, KEY_PIN_START, KEY_PIN_END, GpioDirIn);
Gpio_InitIO(DIG_PORT, DIG_PIN1 | DIG_PIN2, GpioDirOut);
while (1)
{
key_code = get_key();
if (key_code != 0xFF)
{
delay(DELAY_TIME);
while (get_key() != 0xFF);
// do something with key_code
}
display_digit(digit++);
if (digit > 1)
{
digit = 0;
}
delay(DELAY_TIME);
}
}
```
上述代码中,`get_key()`函数用于扫描矩阵键盘并返回当前按下的键码;`display_digit()`函数用于控制数码管显示数字0或1;`delay()`函数用于延时一段时间。在`main()`函数中,程序通过轮询的方式不断扫描矩阵键盘并显示数字0或1。
需要注意的是,以上代码仅为基本示例,具体实现可能需要根据具体需求进行修改。同时,还需要根据具体硬件连接情况进行引脚配置。
阅读全文