主程序 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上的中斷標志位
}
|