久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: SMT32單片機的按鍵中斷控制LED燈亮滅的問題 [打印本頁]

作者: zhanghu29    時間: 2019-4-3 15:22
標題: SMT32單片機的按鍵中斷控制LED燈亮滅的問題
使4個按鍵中斷來控制兩個LED的亮滅。
led1 連接     PA(0)      一直閃爍提示系統(tǒng)正常工作
led2 連接     PA(1)
led3 連接      PA(2)

K_UP        連接    PB(0)  按一下控制led2 亮
K_DOWN  連接    PB(1)  按一下控制led2 滅
K_LEFT    連接     PB(2)   按一下控制led3 亮
K_RIGHT  連接    PB(3)   按一下控制led3 滅



編寫的程序編譯后沒有錯誤和警告。下載在開發(fā)板后,led1一直閃爍提示系統(tǒng)正常工作,按一下K_UP鍵led2亮,再按一下K_DOWN鍵led2滅。但是按K_LEFT和K_RIGHT沒反應(yīng),無法控制led3的亮滅。請那位高手幫忙看下下面程序有什么問題?





MAIN.C

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "key.h"
#include "exti.h"

int main()
{
        u8 i=0;
        SysTick_Init(72);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        LED_Init();
  KEY_Init();
        My_EXTI_Init();
        
        while(1)
        {
               
                i++;
                if(i%20==0)
                {
                        led1=!led1;
                }
                delay_ms(10);
        }
        
}


EXTI.C
#include "exti.h"
#include "Systick.h"
#include "led.h"
#include "key.h"



void My_EXTI_Init()
{
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;


        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1)
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource2)
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource3)




        NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        


        NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=2
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        


        NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;


        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        
        EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2|EXTI_Line3;
        EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&EXTI_InitStructure);
        
}





void EXTI0_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line0)==1)
        {
                delay_ms(10);
                if(K_UP==0)
                {
                        led2=1;
                }
               
        }
        EXTI_ClearITPendingBit(EXTI_Line0);
}





void EXTI1_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line1)==1)
        {
                delay_ms(10);
                if(K_DOWN==0)
                {
                        led2=0;
                }
               
        }
        EXTI_ClearITPendingBit(EXTI_Line1);
}



void EXTI2_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line2)==1)
        {
                delay_ms(10);
                if(K_LEFT==0)
                {
                        led3=1;
                }
               
        }
        EXTI_ClearITPendingBit(EXTI_Line2);
}





void EXTI3_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line3)==1)
        {
                delay_ms(10);
                if(K_RIGHT==0)
                {
                        led3=0;
                }
               
        }
        EXTI_ClearITPendingBit(EXTI_Line3);
}


EXTI.H
#ifndef _exti_H
#define _exti_H

#include "system.h"



void My_EXTI_Init(void);

#endif


LED.C
#include "led.h"
#include "system.h"

void LED_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
        
}

LED.H
#ifndef _led_H
#define _led_H


#include "system.h"


void LED_Init(void);


#define led1 PAout(0)
#define led2 PAout(1)
#define led3 PAout(2)


#endif


KEY.C
#include "key.h"
#include "SysTick.h"


void KEY_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        
        
}

u8 KEY_Scan(u8 mode)
{
        static u8 key=1;
        if(key==1&&(K_UP==0||K_DOWN==0||K_LEFT==0||K_RIGHT==0))
        {
                delay_ms(10);
                key=0;
                if(K_UP==0)
                {
                        return KEY_UP;
                }
                else if(K_DOWN==0)
                {
                        return KEY_DOWN;
                }
                else if(K_LEFT==0)
                {
                        return KEY_LEFT;
                }
                else if(K_RIGHT==0)
                {
                        return KEY_RIGHT;
                }
        }
        else if(K_UP==1&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)
        {
                key=1;
        }
        if(mode==1)
        {
                key=1;
        }
        return 0;
}

KEY.H
#ifndef _key_H
#define _key_H

#include "system.h"

void KEY_Init(void);
u8 KEY_Scan(u8 mode);

#define K_UP    PBin(0)
#define K_DOWN  PBin(1)
#define K_LEFT  PBin(2)
#define K_RIGHT PBin(3)

#define KEY_UP                 1
#define KEY_DOWN         2
#define KEY_LEFT         3
#define KEY_RIGHT 4

#endif






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91久久久久久 | 亚洲国产精品va在线看黑人 | 视频一区二区三区中文字幕 | 亚洲一区二区久久 | 日韩成人在线网址 | 欧美成人视屏 | 我要看一级片 | 一区欧美 | 久久9精品 | 亚洲精品99久久久久久 | 久久97精品 | 日韩精品一区二区三区在线观看 | 久久久国产一区二区三区四区小说 | 天天综合网91 | 亚洲人在线观看视频 | 欧美13videosex性极品 | 亚洲精选一区二区 | 麻豆精品一区二区三区在线观看 | 毛片在线免费 | 亚洲国产一区二区在线 | 在线视频日韩 | 亚洲图片视频一区 | 欧美在线一区二区三区 | 国产无套一区二区三区久久 | 91精品国产欧美一区二区 | 一级黄色片日本 | 欧美黄色免费网站 | 国产精品一区二区三区久久 | 成人亚洲视频 | 色综合一区二区 | 99国产精品久久久 | 免费在线一区二区三区 | 成人a免费 | 一级黄色片免费在线观看 | 久久岛国| 精品国产一区二区三区久久 | 亚洲精品性视频 | 在线国产一区 | 成人午夜影院 | 人人干人人干人人 | 久久99久久 |