野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15338|回复: 6

按键实验

[复制链接]
发表于 2015-10-21 18:12:59 | 显示全部楼层 |阅读模式
火哥,我在外部中断服务函数里实现了按键一触发中断就加1的变量,如何在main函数里使用这个变量?
回复

使用道具 举报

发表于 2015-10-21 21:32:44 | 显示全部楼层
使用extern 关键字
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-21 21:44:27 | 显示全部楼层
首先谢谢你的指导
下面是我写的外部中断服务函数
void EXTI0_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTI Line中断
        {
                Delayms(0x0ffff0);
                if(EXTI_GetITStatus(EXTI_Line0) != RESET)
                {
                // LED1 取反               
        //        LED1_TOGGLE;
            flag++;
                if(flag == 3)
                   flag = 0;
                   }
                   while(EXTI_GetITStatus(EXTI_Line0) == RESET);
                   Delayms(0x0ffff0);  
                EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断标志位
        }  
}
void Delayms(__IO u32 nCount)
{
        for(;nCount>0;nCount--);
}
这里是主函数的代码:
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_exti.h"

#define CLI()      __set_PRIMASK(1)                /* 关闭总中断 */  
#define SEI() __set_PRIMASK(0)                                /* 开放总中断 */

extern unsigned char flag;

void Delay(__IO u32 nCount);

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{       
        /* config the led */
       
        LED_GPIO_Config();
        LED1_ON;
       
        CLI();
        SEI();
       
        /* exti line config */
        EXTI_PA0_Config();

        /* wait interrupt */
        while(1)                           
        {
          if(flag == 0)
          {
                for(;;)
                        {
                          LED1(ON);
                        //LED2(ON);LED3(ON);
                        Delay(0x0fffff);
                        LED1(OFF);
                        //LED2(OFF);LED3(OFF);
                        }
                }
                else if(flag == 1)
                {
                        for(;;)
                        {
                                LED2(ON);
                                Delay(0x0fffff);
                                LED2(OFF);
                        }
                }
        }
}
void Delay(__IO u32 nCount)
{
        for(;nCount>0;nCount--);
}
为什么实现不了按键触发LED不同的显示方式?错在哪里了?
回复 支持 反对

使用道具 举报

发表于 2015-10-22 12:43:37 | 显示全部楼层
GDOUZjy 发表于 2015-10-21 21:44
首先谢谢你的指导
下面是我写的外部中断服务函数
void EXTI0_IRQHandler(void)

用switch语句试一试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-22 19:58:54 | 显示全部楼层
可以了,非常感谢您的指导
回复 支持 反对

使用道具 举报

发表于 2015-11-23 19:33:53 | 显示全部楼层
GDOUZjy 发表于 2015-10-22 19:58
可以了,非常感谢您的指导

请问用switch语句该怎么改呀
回复 支持 反对

使用道具 举报

发表于 2015-12-12 09:07:54 | 显示全部楼层
干得漂亮,我也遇到这个问题过来学学!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-11 06:06 , Processed in 0.039823 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表