本项目介绍如何使用STM32单片机通过外部按键控制,实现矩阵键盘输入并驱动数码管显示,适用于嵌入式系统开发学习。
在STM32程序设计中使用外部中断实现主函数的切换功能如下:
```c
int key_can(void); // 按键扫描函数声明
void GPIO_Configuration(void); // 初始化按键IO口
// 全局变量声明,作用:在整个代码文件中的所有函数里都可以访问这个变量
int cheak = 0; // 矩阵键盘按下的标志位
int main(void) {
u8 code[10] = {0xf3, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
u8 ss[] = {1,2,3,A,4,5,6,B,7,8,9,C,*,0,#,D}; // 定义一个u8型数组
u8 cod[14] = {0x06, 0x5b, 0x4f, 0x3f, 0x66, 0x6d, 0x7d, 0x3f, 0x07,
0x7f, 0x6f, 0x3f, 0x3f, 0x3f};
u8 t = 0;
int j;
delay_init(); // 延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置NVIC中断分组为抢占优先级2,响应优先级2
uart_init(115200); // 串口初始化设置波特率为115200
LED_Init(); // 初始化与LED连接的硬件接口
EXTIX_Init();
GPIO_Configuration(); // 初始化外部中断输入
LED0 = 0; // 先点亮红灯
while (1) {
if(a == 1) { // 按键KEY1,消抖
for(j=9; j>=0; --j){
if(b != 1){
GPIO_Write(GPIOB, code[j]);
delay_ms(1000);
}
}
}
if(b == 1) { // 按键KEY0
printf(请按键 \n);
t = key_can(); // 获取按下的某个键的返回值,并赋给t
if (cheak){ // 如果非零,则执行if内的语句;如果为0,不执行if对应语句;
printf(\n\rkey=:%c \n\r, ss[t]);
GPIO_Write(GPIOB, cod[t]);
cheak = 0;
}
}
}
}
```
以上代码片段展示了如何在STM32微控制器中使用外部中断来处理按键事件,并通过这些事件切换主函数的执行流程。