主程序 time,time2,time3由TIM1定时器提供时钟,Sys提供延时函数,TIM3提供PWM(两路)
void EXTI4_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line4)!=RESET)//不等于低电平就是1,按下的时候就不为1了
{
Delay_ms(10);
if(Menu==1)
{
Menu=2;
}else if(Menu==2)
{
Menu=1;
}
EXTI_ClearITPendingBit(EXTI_Line4); //清理标志位
}
}
void EXTI9_5_IRQHandler(void)
{
char keytemp=0x55;
/*keytemp&0X0F 表示只取末尾四位为有效值*/
/*0x0F 表示采样四次IO为高电平 表示IO状态稳定在高电平*/
/*0x00 表示采样四次IO为低电平 表示IO状态稳定在低电平*/
while(((keytemp&0X0F)!=0x0F)&&((keytemp&0X0F)!=0x00))
{
/*间隔1us后采集*/
Delay_us(1);
/*按键缓存器左移一位*/
keytemp<<=1;
/*当脉冲脚为高时 或称为A相*/
if(knob1_clk== 1)
{
/*按键缓存器末尾补1*/
keytemp |= 0x01;
}
}
if(Menu==2)
{
if(knob1_clk==1)
{
if(knob1_dt==1)
{
Mode_Sv=Mode_Sv+5; /*A上升沿时 B为高 顺时针*/
}
else
{
Mode_Sv=Mode_Sv-5; /*A上升沿时 B为低 逆时针*/
}
}else{
if(knob1_dt==0)
{
Mode_Sv=Mode_Sv+5; /*A下降沿时 B为低 顺时针*/
}
else
{
Mode_Sv=Mode_Sv-5; /*A下降沿时 B为高 逆时针*/
}
}
}
EXTI_ClearITPendingBit(EXTI_Line6); //清除LINE6上的中断标志位
}
|