野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13098|回复: 5

新手求大神指教

[复制链接]
发表于 2016-12-9 09:32:20 | 显示全部楼层 |阅读模式
学了几节课 写个led程序,老是亮灭太没意思,我又重新引了6个脚,搞了3个按钮3个led按钮,想按第一个按钮3个灯泡流水灯,按第二个按钮 三个灯同时延时1秒闪烁,按第三个按钮三个灯依次灭掉,按钮不用中断,试了好多次都不行,,求教思路  !检测按钮状态程序到底放哪里面合适?这个是用if 还是while循环啊啊????   

主题推荐

回复

使用道具 举报

 楼主| 发表于 2016-12-9 09:35:27 | 显示全部楼层
在线等!!!!!完全没思路,,我把按钮检测的写了个子函数,然后检测如果是key1下去a=0,key2按下去 a=1,key3按下去,a=2,然后用if 判断a的值,去执行子程序,可是子程序只跑一次,如果子程序里用while的话 他又出不来,求解求解
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:51:04 | 显示全部楼层
梦玉阿梦玉 发表于 2016-12-9 09:35
在线等!!!!!完全没思路,,我把按钮检测的写了个子函数,然后检测如果是key1下去a=0,key2按下去 a=1 ...

你可以参考我们的按键的程序,我们的按键程序是按键1按下 做相应的动作,这个动作随便你想做什么,按键2按下也是随便你做什么动作。你的区别仅仅是多了一个按键,就多一个if语句而已。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-9 10:06:38 | 显示全部楼层
fire 发表于 2016-12-9 09:51
你可以参考我们的按键的程序,我们的按键程序是按键1按下 做相应的动作,这个动作随便你想做什么,按键2 ...

我就说看了做的哇,可是我是按了以后想让他一直在那跑,我现在是if后面加了一个while语句,他进入某个if后就出不来了,一直在里面跑么
回复 支持 反对

使用道具 举报

发表于 2016-12-9 10:31:22 | 显示全部楼层
梦玉阿梦玉 发表于 2016-12-9 10:06
我就说看了做的哇,可是我是按了以后想让他一直在那跑,我现在是if后面加了一个while语句,他进入某个if ...
  1. int main(void)
  2. {
  3.         while(1)
  4.   {
  5.                  if( KE1 = ON )
  6.                          a = 1;
  7.                  else if( KE2 = ON )
  8.                          a = 2;
  9.                  else if( KE3 = ON )
  10.                          a = 3;
  11.                  
  12.                  switch(a)
  13.                  {
  14.                          case 1:
  15.                                  LED1_ON;
  16.                            LED2_ON;
  17.                            LED3_ON;
  18.                            DelayMS(500);
  19.                                   LED1_OFF;
  20.                            LED2_OFF;
  21.                            LED3_OFF;
  22.                            DelayMS(500);
  23.                          break;

  24.                          case 2:
  25.                                   LED1_ON;
  26.                            LED2_ON;
  27.                            LED3_ON;
  28.                            DelayMS(1000);
  29.                                   LED1_OFF;
  30.                            LED2_OFF;
  31.                            LED3_OFF;
  32.                            DelayMS(1000);
  33.                          break;
  34.                          
  35.                          case 3:
  36.                                   LED1_OFF;
  37.                            LED2_OFF;
  38.                            LED3_OFF;
  39.                          break;
  40.                          
  41.                          default:
  42.                                  // 默认情况你想干嘛
  43.                          break;
  44.                  }
  45.         }
  46. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-9 14:34:37 | 显示全部楼层

#include "stm32f10x.h"
#include "xl_led.h"
#include "delay.h"
#include "key.h"

  uint16_t a=4;
//void keyzt(void);
int main(void)
{       
           LED_GPIO_Config();
           key_Config();
         
         while( 1 )
  {
    /*Delay_us(1000000);
                LED_FZ ;
                Delay_us(1000000);
                LED_FZ1 ;
          GPIO_ResetBits(GPIOC,GPIO_Pin_13);
          Delay_us(1120000);
          GPIO_SetBits(GPIOC,GPIO_Pin_13);
                GPIO_ResetBits(LED_A,LED_6);
          Delay_us(1120000);
          GPIO_SetBits(LED_A,LED_6);
                GPIO_ResetBits(LED_A,LED_7);
                Delay_us(1130000);
                GPIO_SetBits(LED_A,LED_7);
                GPIO_ResetBits(LED_B,LED_8);
                Delay_us(1120000);
                GPIO_SetBits(LED_B,LED_8);
                       
                GPIO_ResetBits(GPIOC,GPIO_Pin_13);
                if (key_jc(GPIOA,GPIO_Pin_2)==1)
                {
                        LED_FZ2 ;
      a=0;                                                               
                }
                else         if (key_jc(GPIOB,GPIO_Pin_1)==1)
                {               
                  LED_FZ;
                  a=1;
                }
                else         if (key_jc(GPIOA,GPIO_Pin_5)==1)
                {
                          LED_FZ1;                a=2;
                }
                */
                     keyzt();
       
                                 switch(a)
                                {
                                          // keyzt();
                                case 1:
                                  LED_FZ2 ;
                      Delay_us(900000);
                                        LED_FZ ;
                       Delay_us(900000);
                                        LED_FZ1 ;
                      Delay_us(900000);
                                break;
                               
                                case 2:
                                  LED_FZ2 ;          
                                        LED_FZ ;          
                                        LED_FZ1 ;
                      Delay_us(1000000);
                                break;
                               
                                case 0:
                                  LED_FZ2 ;
                                        //LED_FZ ;
                                        LED_FZ1 ;
                      Delay_us(900000);
                                break ;
                                }
                }
        }
我是这样写的,可是发现在第一个case 1的时候 要按好几次按钮才可以进case 2或者case 0,有时候一次可以进有时候好几次都不行,是不是因为延时时间太长了?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:23 , Processed in 0.028275 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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