STM32笔记(3) 按键驱动
-- #include "key.h"
-- #define KEY1 (GPIOA->IDR & (0X1<<0))
-- #define KEY2 (GPIOC->IDR & (0X1<<4))
-- #define KEY3 (GPIOC->IDR & (0X1<<5))
-- #define KEY4 (GPIOC->IDR & (0X1<<6))
void KEY_Config(void)//key1 按键
{
//1.开启时钟
RCC->APB2ENR &= ~(1<<2);//清零
RCC->APB2ENR |= (1<<2);//致1
RCC->APB2ENR &= ~(1<<4);//清零 PC4
RCC->APB2ENR |= (1<<4);//致1
//2.配置io 0100
GPIOA->CRL &= ~(0xf<<0);//将0-3置零
GPIOA->CRL |=(0x4<<0);
GPIOC->CRL &= ~(0xf<<16);//将0-3置零
GPIOC->CRL |=(0x4<<16);
GPIOC->CRL &= ~(0xf<<20);//将0-3置零
GPIOC->CRL |=(0x4<<20);
GPIOC->CRL &= ~(0xf<<24);//将0-3置零
GPIOC->CRL |=(0x4<<24);
}
uint8_t Get_KeyVal(void) //uint8_t 无符号整型数据
{
uint8_t val=0;
if(KEY1)//按下得到高电平
{
Delay_ms(20);//按键消抖
if(KEY1)
{
while(KEY1){}//等待按键抬起
val=1;
}
}
if(!KEY2)
{
Delay_ms(20);//按键消抖
if(!KEY2)
{
while(!KEY2){}//等待按键抬起
val=2;
}
}
if(!KEY3)
{
Delay_ms(20);//按键消抖
if(!KEY3)
{
while(!KEY3){}//等待按键抬起
val=3;
}
return val;
}
if(!KEY4)
{
Delay_ms(20);//按键消抖
if(!KEY4)
{
while(!KEY4){}//等待按键抬起
val=4;
}
}
return val;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)