按键程序理解

发布时间:2024-08-12  

按键局部程序分析


u8 KEY_Scan(u8 mode)

    static u8 key_up=1;//按键按松开标志

    if(mode)key_up=1; //支持连按

    if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))

    {

        delay_ms(10);//去抖动

        key_up=0;

        if(KEY0==0)return KEY0_PRES;

        else if(KEY1==0)return KEY1_PRES;

        else if(WK_UP==1)return WKUP_PRES;

    }    

    else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;

    return 0;// 无按键按下

}


当 mode 为 0 的时候,

KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候就不合适了。

 

当 mode 为 1 的时候,

KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。

 

t=KEY_Scan(0);  //得到键值

        switch(t)

        { 

            case KEY0_PRES:

                 LED0=!LED0;

                 break;

            case KEY1_PRES:

                 LED1=!LED1;

                 break;

            case WKUP_PRES: 

                 LED0=!LED0;

                 LED1=!LED1;

                 break;

            default:

                 delay_ms(10);

        } 


第一个程序的return值回传到switch的case。

 

void KEY_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能 PORTA,PORTC 时钟

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

    //关闭 jtag,使能 SWD,可以用 SWD 模式调试

    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA15

    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

    GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 GPIOC5

    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 设置成输入,默认下拉 

    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIOA.0

}


这调用了:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);这个函数,用于禁止 JTAG,开启 SWD,因为 PA15 占用了 JTAG 的一个 IO,所以要禁止 JTAG,从而让 PA15 用作普通 IO输入。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    按键控制串口发送数据的STM32实例;按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。 开发板用的是STM32F03ZET6芯片。 主函数main.c代码......
    仿真用的一个串口接口,这个仿真电路要实现与计算机通信功能需要用到其他两个软件,一个是虚拟串口驱动软件,另外一个是串口助手软件,这两个软件在网上都很容易找到。我使用的是Virtual Serial Port Driver和丁丁串口助手......
    灯不断闪烁,5 秒钟后进入待机模式,此时 D1 指示灯熄灭。当按下 K_UP 按键或复位按键时,待机模式被唤醒,系统重新运行,同时串口打印提示信息。如果想在串口调试助手上看到输出信息,可以打开“串口调试助手......
    后进入待机模式,此时 D1 指示灯熄灭。当按下 K_UP 按键或复位按键时,待机模式被唤醒,系统重新运行,同时串口打印提示信息。如果想在串口调试助手上看到输出信息,可以打开“串口调试助手”,首先勾选下标号 1 DTR......
    预估GCP、AWS服务器建设年增25~30%,成推动全球服务器需求关键助力|TrendForce集邦咨询;TrendForce集邦咨询:预估GCP、AWS服务器建设年增25~30%,成推动全球服务器需求关键助......
    工程。使用ST提供的STM32CubeIDE进行编译调试。有关配置就不截图了。 另外,我还配置了1个按键并开启相应外部中断。每发生按键事件时,F429USB设备向PC主机发送一段打招呼的字符串,并通过串口助手......
    STM32调试步骤(2024-02-03)
    延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02......
    STM32学习日志——电容触摸按键实验;这次的代码很有意思,可以学到很多编程的思想。 首先,电容触摸按键是基于模电的RC充放电电路,一开始:R+=v1,R-=0,I1=V1/R;充电过程中:R......
    延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来,这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J......
    习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>