[mw_shl_code=c,true]void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);//使能PORTA,PORTC时钟
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PC2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PA12
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA12
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;//PA13 14
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置成推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA13 14
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEY0_PRES,KEY0按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下
//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1;
PAout(14)=0;
PAout(13)=1;
// PAout(12)=1;
if(key_up&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==0)
{
delay_ms(10);
key_up=0;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==0)
return 1;
}else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==1)key_up=1;
return 0;// 无按键按下
}
#include "stm32f10x.h"
#include "pwm.h"
#include "led.h"
#include "sys.h"
#include "key.h"
#include "delay.h"
//TIM1_PWM_Init(u16 arr,u16 psc);
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{ u8 t=0;
// u16 led0pwmval=0;
// u8 dir=1;
// delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
// TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
// TIM_SetCompare1(TIM1,300);
// TIM_SetCompare4(TIM1,300);
while(1)
{
t=KEY_Scan(0);
switch(t)
{
case 1:
PCout(2)=1;
break;
default:
delay_ms(10);
}
}
}
各位大神,程序的目的是PA14一直输出低电平给按键一端,用PA12检测按键另一端的电平,如果按键按下由PC2输出高电平,可是程序一直输出不了高电平,求解各位[/mw_shl_code]
|