Discuz! Board
标题:
关于GPIO
[打印本页]
作者:
wwqdwz
时间:
2015-8-29 16:17
标题:
关于GPIO
库函数版中____实验三:按键查询。我把主函数中的KEY2改成KEY1就不正常了,好像没有消抖,按一下LED会来回跳。改KEY3没事。请问是怎么回事,请高手指点,谢谢!
作者:
admin
时间:
2015-8-31 09:08
代码贴出来看看
作者:
wwqdwz
时间:
2015-9-1 08:53
//主程序
#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);
}
作者:
wwqdwz
时间:
2015-9-1 09:51
//刚才按键发错了
#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;
}
作者:
wwqdwz
时间:
2015-9-1 11:20
问题解决了,是按键问题,换了一个就好了。
欢迎光临 Discuz! Board (http://qfv8.com/)
Powered by Discuz! X3