设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3645|回复: 4
打印 上一主题 下一主题

关于GPIO

[复制链接]

1

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
跳转到指定楼层
楼主
wwqdwz 发表于 2015-8-29 16:17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
库函数版中____实验三:按键查询。我把主函数中的KEY2改成KEY1就不正常了,好像没有消抖,按一下LED会来回跳。改KEY3没事。请问是怎么回事,请高手指点,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
沙发
admin 发表于 2015-8-31 09:08:26 | 只看该作者
代码贴出来看看
回复 支持 反对

使用道具 举报

1

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
板凳
 楼主| wwqdwz 发表于 2015-9-1 08:53:50 | 只看该作者
//主程序
#include "stm8s.h"
#include "stm8s_clk.h"
#include "led.h"
#include "key.h"


int main(void)
{
//SystemClock_Init(HSE_Clock);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
KEY_Init();
LED1_Close();
LED2_Open();

while(1)

{
if( KEY_Down(KEY2_PORT,KEY2_PIN)==0)//我只把这里的KEY2改成了KEY1就不行,改成KEY3就可以。
{
LED1_Toggle();
LED2_Toggle();
}
}
}


//按键驱动
#include "stm8s.h"
#include "stm8s_clk.h"
#include "led.h"
#include "key.h"


int main(void)
{
//SystemClock_Init(HSE_Clock);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
KEY_Init();
LED1_Close();
LED2_Open();

while(1)

{
if( KEY_Down(KEY2_PORT,KEY2_PIN)==0)
{
LED1_Toggle();
LED2_Toggle();
}
}
}


//led驱动

#include "led.h"

void LED_Init(void)
{
   GPIO_Init(LED1_PORT,LED1_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );//定义LED的管脚的模式
   GPIO_Init(LED2_PORT,LED2_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );
   GPIO_Init(LED3_PORT,LED3_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );
}

void LED1_Open(void)
{
GPIO_WriteLow(LED1_PORT,LED1_PIN);//输入低电平
}
void LED1_Close(void)
{
GPIO_WriteHigh(LED1_PORT,LED1_PIN);//输入低电平
}

void LED2_Open(void)
{
GPIO_WriteLow(LED2_PORT,LED2_PIN);//输入低电平
}
void LED2_Close(void)
{
GPIO_WriteHigh(LED2_PORT,LED2_PIN);//输入低电平
}

void LED3_Open(void)
{
GPIO_WriteLow(LED3_PORT,LED3_PIN);//输入低电平
}
void LED3_Close(void)
{
GPIO_WriteHigh(LED3_PORT,LED3_PIN);//输入低电平
}

void LED1_Toggle(void)
{
GPIO_WriteReverse(LED1_PORT,LED1_PIN);
}

void LED2_Toggle(void)
{
GPIO_WriteReverse(LED2_PORT,LED2_PIN);
}
void LED3_Toggle(void)
{
GPIO_WriteReverse(LED3_PORT,LED3_PIN);
}
回复 支持 反对

使用道具 举报

1

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
地板
 楼主| wwqdwz 发表于 2015-9-1 09:51:33 | 只看该作者
//刚才按键发错了
#include "key.h"


void KEY_Init(void)
{  GPIO_Init(KEY1_PORT,KEY1_PIN,GPIO_MODE_IN_PU_NO_IT );//定义key的管脚的模式
   GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT );
   GPIO_Init(KEY3_PORT,KEY3_PIN,GPIO_MODE_IN_PU_NO_IT );
        }
       
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;
}
回复 支持 反对

使用道具 举报

1

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
5#
 楼主| wwqdwz 发表于 2015-9-1 11:20:40 | 只看该作者
问题解决了,是按键问题,换了一个就好了。
回复 支持 反对

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-5-3 13:02 , Processed in 0.165827 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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