解释这段代码void int1_serve(void) interrupt 2 //键盘消抖 { if(key4==0) { delayms(10); if(key4==0) { if(display_xianshi==0) { light_h++; delayms(10); }else if(display_xianshi!=0) { light_l++; delayms(10); } } } } void int0_serve(void) interrupt 0//键盘消抖 { if(key5==0) { delayms(10); if(key5==0) { if(display_xianshi==0) { light_h--; }else if(display_xianshi!=0) { light_l--; } } } }
时间: 2024-04-26 20:24:02 浏览: 185
这段代码是关于键盘消抖的中断服务程序。其中,void int1_serve(void)是外部中断1的中断服务程序,用于检测键盘上的一个按键(假设为key4),并根据当前的显示状态(display_xianshi)来控制灯的亮度(light_h或light_l)。void int0_serve(void)是外部中断0的中断服务程序,用于检测键盘上的另一个按键(假设为key5),并同样根据当前的显示状态来控制灯的亮度。在按下按键后,程序会进行10ms的延时,以消除按键抖动的影响,然后再次检测按键状态,如果按键仍然被按下,则根据当前的显示状态来调整灯的亮度值。
相关问题
#pragma vector = PORT2_VECTOR __interrupt void P2_ISR(void) { uint16_t a; if(P2IFG & BIT1) //判断是否是P2.1产生的中断 { P2IFG &= ~BIT1; if((P2IN&BIT1)==0) { for(a=0;a<=1000;a++); //按键消抖 if((P2IN&BIT1) == 0) { m=125; } } } P2IFG &= ~BIT1; } #pragma vector = PORT1_VECTOR __interrupt void P1_ISR(void) { uint16_t a; if(P1IFG & BIT1) //判断是否是P1.1产生的中断 { P1IFG &= ~BIT1; if((P1IN&BIT1) == 0) { for(a=0;a<=1000;a++); //按键消抖 if((P1IN&BIT1) == 0) { m=500; } } } P1IFG &= ~BIT1; } void main (void) { Key_Init(); int i; int DUTY_CYCLE = 0; //Stop WDT WDT_A_hold(WDT_A_BASE); //P2.0 as PWM output GPIO_setAsPeripheralModuleFunctionOutputPin( GPIO_PORT_P2, GPIO_PIN0 );
这段代码是在处理P2.1和P1.1按键的中断函数。具体地,当P2.1或P1.1按键被按下时,会触发对应的中断,并在中断服务函数中进行按键消抖操作,然后将一个全局变量m的值分别设置为125和500。在main函数中,会先调用Key_Init函数进行按键的初始化,然后停止看门狗定时器,并将P2.0口设置为PWM输出模式。
阅读全文