历史上的今天
今天是: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次。
史海拾趣
|
前言 随着市场的发展,现在的MP3播放器品种越来越多,价钱也越来越实惠。也越来越多的MP3进入了用户的口袋。可以说是MP3随身听丰富了个人的世界,能随时随地随心所欲地欣赏美妙音乐。作为随身听,MP3的最终目的是还原真实的音乐。作为音响爱好者, ...… 查看全部问答> |
|
windows xp 与 windows ce 嵌入式系统的usb通信 现有一个条形码识别掌机, 掌机系统为 windows ce.net 6.0, 有usb接口。 将掌机usb接口直接与windows vista电脑相接,不需要任何操作就可以实现通信。 但将掌机与windows xp相接,用了很多方法都不行,比如安装一个activesync 4.5,在连接 ...… 查看全部问答> |
|
可用于主控制的接口有CH375,SL811,还有吗?用于从控制的就多了,如PDIUSBD12,还有MCU内置,如C8051F340就内置USB控制器. 这写USB从控制器能用作主控制器吗?谢谢!… 查看全部问答> |
|
库文件完全一样,示例代码能运行,但是即使把示例代码完全复制到自己的工程中都不能输出正确的结果。复制到自己的项目中后,完全相同的代码但是编译后的大小要比demo工程直接编译的大一点点。一直到不到哪里出了问题。有人遇到过吗?或者给点查错的 ...… 查看全部问答> |
|
美国Robei公司开发了一套全新的FPGA设计仿真工具,现在在教育界和工业界引起巨大的反响。 下面是这个软件的简单介绍: Robei FPGA仿真软件是一款世界上最小的FPGA仿真工具。该软件具备先进的图形化设计工具,代码修改,Verilog编译仿真和波形分析 ...… 查看全部问答> |




