OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2644|回复: 1

按键输入问题,程序功能总是不能实现,是哪出问题了

[复制链接]

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2020-4-2
在线时间
94 小时
发表于 2020-4-6 22:19:44 | 显示全部楼层 |阅读模式
4金钱
源程序:
#include "stm32f10x.h"
#include "key.h"
#include "beep.h"
#include "led.h"

int main(void)
{
        LED_init();
        BEEP_init();
        KEY_init();
        BEEP=0;
        LED0=0;
        LED1=0;
        while(1)
        {
                switch(KEY_scan())
                {
                    case 1: BEEP=!BEEP;  break;      
                    case 2: LED1=!LED1;  break;
                    case 3: LED0=!LED0;    LED1=!LED1;  break;
                    default:break;      
                }
                delay_ms(10);      
        }   
}

按键程序:

#include "key.h"


void KEY_init(void)
{
        GPIO_InitTypeDef  temp1,temp2;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA,ENABLE);
        temp1.GPIO_Mode=GPIO_Mode_IPU;
      temp1.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4;
        temp1.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOE,&temp1);
   
        temp2.GPIO_Mode=GPIO_Mode_IPD;
      temp2.GPIO_Pin=GPIO_Pin_0;
        temp2.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&temp2);
   
}

u8  KEY_scan()
{
        static u8  key_flag=1;
        u8  num;
        if(key_flag==1&&(KEY1==1||KEY2==0||KEY3==0))
        {
                delay_ms(10);
                key_flag=0;
                if(KEY1==1)
                {
                        num=1;
                        return num;
                }
                if(KEY2==0)
                {
                        num=2;
                        return num;
                }
                if(KEY3==0)
                {
                        num=3;
                        return num;
                }
        }
        else if(KEY1==0&&KEY2==1&&KEY3==1)
        {
                key_flag=1;   
        }
        return 0;
}



按键输入头文件:
#ifndef  __KEY_H
#define  __KEY_H
#include "sys.h"
#include "delay.h"

typedef  unsigned char  u8;
typedef  unsigned int  u32;
#define  KEY1  PAin(0)
#define  KEY2  PEin(3)
#define  KEY3  PEin(4)
void  KEY_init(void);
u8  KEY_scan(void);
void delay_init(void);
#endif

是逻辑问题还是,还是少了什么东西   求解答    先感谢大佬


最佳答案

查看完整内容[请看2#楼]

试试按键的句柄用一个,然后参照我们的按键例程对比一下
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

203

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2934
金钱
2934
注册时间
2019-8-16
在线时间
316 小时
发表于 2020-4-6 22:19:45 | 显示全部楼层
试试按键的句柄用一个,然后参照我们的按键例程对比一下
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 21:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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