历史上的今天
返回首页

历史上的今天

今天是:2024年09月17日(星期二)

2019年09月17日 | STM8学习笔记----按键中断

2019-09-17 来源:eefocus

根据青风STM8开发板,编写key_exti.h头文件如下:


#ifndef  __KEY_EXTI_H

#define  __KEY_EXTI_H

#include "stm8s.h"


#define KEY1_PIN        GPIO_PIN_0 

#define KEY2_PIN        GPIO_PIN_4

#define KEY3_PIN        GPIO_PIN_3 

#define KEY1_PORT       GPIOI

#define KEY2_PORT       GPIOE

#define KEY3_PORT       GPIOE


BitStatus KEY_Down(GPIO_TypeDef* GPIOx,GPIO_Pin_TypeDef  GPIO_Pin);  //用于判断哪个按键被按下

void EXIT_KEY_Init(void);


#endif




再编写key_exti.c文件如下:


#include "key_exti.h"

#include "stm8s_gpio.h"

#include "stm8s_exti.h"



void EXIT_KEY_Init(void)

{

   GPIO_Init(KEY1_PORT,KEY1_PIN,GPIO_MODE_IN_PU_NO_IT );//key1管脚没有中断功能

   GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_IT );/key2、key3管脚初始化为上拉输入带中断功能

   GPIO_Init(KEY3_PORT,KEY3_PIN,GPIO_MODE_IN_PU_IT );

   EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);//设置外部中断触发方式为下降沿触发

}


void Delay(uint32_t temp)

{

  for(; temp!= 0; temp--);


BitStatus KEY_Down(GPIO_TypeDef* GPIOx,GPIO_Pin_TypeDef  GPIO_Pin)

 /*检测是否有按键按下 */

    if( GPIO_ReadInputPin(GPIOx,GPIO_Pin) == 0 ) 

 {   

  /*延时消抖*/

  Delay(10000); 

  if(GPIO_ReadInputPin(GPIOx,GPIO_Pin)==0)  

{  

/*等待按键释放 */

while(GPIO_ReadInputPin(GPIOx,GPIO_Pin)==0);   

return 0; 

}

else

return 1;

 }

else

return 1;

}




主函数如下:


#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

#include "key_exti.h" 


int main(void)

        CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  //设置系统时钟

LED_Init();

LED1_Close();

        LED2_Close();

        LED3_Close();    //初始化LED灯

/*config key*/

EXIT_KEY_Init();  //初始化外部中断按键

        __enable_interrupt();    //使能外部中断

while(1)

{

}

}




最后,在stm8s_interrupt.c文件中编写中断处理函数如下:


#pragma vector=9

__interrupt void EXTI_PORTE_IRQHandler(void)

{

   if (KEY_Down(KEY2_PORT,KEY2_PIN)==0)

   {

     LED2_Toggle(); Delay(100000);

     LED2_Toggle(); Delay(100000);

     LED2_Toggle(); Delay(100000);

     LED2_Toggle(); Delay(100000);

     LED2_Toggle(); Delay(100000);

   }

   

   if (KEY_Down(KEY3_PORT,KEY3_PIN)==0)

   {

     LED3_Toggle(); Delay(100000);

     LED3_Toggle(); Delay(100000);

     LED3_Toggle(); Delay(100000);

     LED3_Toggle(); Delay(100000);

     LED3_Toggle(); Delay(100000);

   }

}




青风的源码不能识别那个按键被按下,经过我的改写可以识别不同的按键,key2按键按下则led2闪烁5次,key3按键按下则led3闪烁5次。

推荐阅读

史海拾趣

Cambridge Electronic Industries Ltd公司的发展小趣事

在激烈的市场竞争中,CEI深知品质管理的重要性。公司建立了完善的质量管理体系,从原材料采购到产品制造、检验、包装等各个环节都进行严格把关。同时,CEI还注重持续改进和优化生产流程,提高生产效率和产品质量。这些措施使得CEI的产品在市场上具有更高的竞争力和口碑。

Deutron Electronics Corp公司的发展小趣事

Deutron Electronics Corp深知研发和创新对于公司发展的重要性。因此,公司始终保持着对研发的高投入,不断引进和培养人才。公司建立了完善的研发体系,鼓励员工参与创新活动,并为他们提供了充足的资源和支持。这些措施使得Deutron Electronics Corp在研发方面取得了显著成果,为公司的发展提供了源源不断的动力。

E-T-A Circuit Breakers公司的发展小趣事

E-T-A公司自1948年由Jakob Ellenberger和Harald A. Poensgen创立以来,一直由该家族掌管。尽管公司已经发展成为一个国际性的企业,但家族第二代和第三代领导人仍然保持着对公司的掌控和管理。他们秉承了家族的创业精神和价值观,坚持以客户为中心,以技术创新为驱动,不断推动公司向前发展。在家族传承的推动下,E-T-A公司得以保持其独特的企业文化和核心竞争力,在电子行业中持续领跑。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

随着技术的不断进步,圜达实业不断投入研发,成功推出了一系列具有创新性和竞争力的产品,如旋转开关、滑动开关等。这些产品不仅满足了市场的需求,还为公司赢得了良好的口碑。此外,公司还获得了TS 16949及ISO-14001认证,进一步提升了产品品质和竞争力。

Holy Stone公司的发展小趣事

经过多年的发展,Holy Stone成为国内少数涵盖主、被动双通路并拥有制造工厂的多元化公司。公司不仅代理多家国际知名半导体零组件,还通过自主研发和生产,为客户提供完整的解决方案及多样性零组件。这一双通路战略使得Holy Stone能够在激烈的市场竞争中保持领先地位,并成功实现全球布局。公司的产品广泛应用于消费电子、汽车电子等多个领域,满足了全球客户的多样化需求。

虹冠电子(Champion)公司的发展小趣事

随着电竞产业的快速发展,虹冠电子敏锐地捕捉到了这一市场的巨大潜力。公司投入大量资源研发电竞电源供应器产品,凭借其卓越的性能和稳定性,迅速在电竞领域树立了良好的品牌形象。同时,虹冠电子还积极与电竞行业内的知名企业和赛事组织合作,共同推动电竞产业的繁荣发展。

问答坊 | AI 解惑

专业人员教授如何测试MP3音质

前言 随着市场的发展,现在的MP3播放器品种越来越多,价钱也越来越实惠。也越来越多的MP3进入了用户的口袋。可以说是MP3随身听丰富了个人的世界,能随时随地随心所欲地欣赏美妙音乐。作为随身听,MP3的最终目的是还原真实的音乐。作为音响爱好者, ...…

查看全部问答>

低频数字式相位测量仪

本帖最后由 paulhyde 于 2014-9-15 08:57 编辑 低频数字式相位测量仪  …

查看全部问答>

看到一个好玩的:屁强度探测器

探测的依据是    声音  温度  浓度 …

查看全部问答>

有人熟悉NTFS格式么?

最近做一个项目,需要支持移动硬盘,移动硬盘大部分都是NTFS的格式,但是目前维护的FAT文件系统不支持, 有没人熟悉NTFS的,可以请教下…

查看全部问答>

wince中分割窗体

用vs2005开发wince sdi程序,发现没有CSplitterWnd这个类,应该如何实现分割窗体呢?…

查看全部问答>

windows xp 与 windows ce 嵌入式系统的usb通信

现有一个条形码识别掌机, 掌机系统为 windows ce.net 6.0, 有usb接口。 将掌机usb接口直接与windows vista电脑相接,不需要任何操作就可以实现通信。 但将掌机与windows xp相接,用了很多方法都不行,比如安装一个activesync 4.5,在连接 ...…

查看全部问答>

USB接口主,从控制器有什么不同?

可用于主控制的接口有CH375,SL811,还有吗?用于从控制的就多了,如PDIUSBD12,还有MCU内置,如C8051F340就内置USB控制器. 这写USB从控制器能用作主控制器吗?谢谢!…

查看全部问答>

不知道为什么uart无法使用

库文件完全一样,示例代码能运行,但是即使把示例代码完全复制到自己的工程中都不能输出正确的结果。复制到自己的项目中后,完全相同的代码但是编译后的大小要比demo工程直接编译的大一点点。一直到不到哪里出了问题。有人遇到过吗?或者给点查错的 ...…

查看全部问答>

武林学习LM3S811(五)中断按键

参考周立功的实例,实现按键中断翻转LED的功能。为的下次触摸芯片驱动做准备。 工程:…

查看全部问答>

新一代FPGA设计学习工具:Robei

美国Robei公司开发了一套全新的FPGA设计仿真工具,现在在教育界和工业界引起巨大的反响。 下面是这个软件的简单介绍: Robei FPGA仿真软件是一款世界上最小的FPGA仿真工具。该软件具备先进的图形化设计工具,代码修改,Verilog编译仿真和波形分析 ...…

查看全部问答>