东莞网站开发定制,动漫设计专业学校,设计网络培训,移动门户网站建设特点设置按键中断#xff0c;按键1按下#xff0c;LED亮#xff0c;再按一次#xff0c;灭
按键2按下#xff0c;蜂鸣器响。再按一次#xff0c;不响
按键3按下#xff0c;风扇转#xff0c;再按一次#xff0c;风扇停
main.c
#include uart1.h
#include …设置按键中断按键1按下LED亮再按一次灭
按键2按下蜂鸣器响。再按一次不响
按键3按下风扇转再按一次风扇停
main.c
#include uart1.h
#include key_it.h
int main()
{uart4_init();//串口初始化//中断初始化key_it_config();key3_it_config();gpio_start();while(1){//保证主程序不结束}return 0;
}do_irp.c
#include key_it.h
#include uart1.hextern void printf(const char *fmt, ...);
unsigned int i 0;
unsigned int num10,num20,num30;
void do_irq(void)
{int irqno;//保存中断号irqno GICC-IAR0X3FF;switch(irqno){case 99://key1//按键1中断处理printf(KEY1 INT\n);//灯亮if(num1 0){//PF10GPIOF-ODR | (0x110);//PE10 PE8GPIOE-ODR | (0x58);num1;}//灯灭else if(num1 0){//PF10GPIOF-ODR ~(0x110);//PE10 PE8GPIOE-ODR ~(0x58);num1 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x13);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x19);break;case 97://key2//按键2中断处理printf(KEY2 INT\n);//蜂鸣器转if(num2 0){//PB6GPIOB-ODR | (0x16);num2;}//蜂鸣器停else if(num2 0){//PB6GPIOB-ODR ~(0x16);num2 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x11);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x17);break;case 98://key3//按键3中断处理printf(KEY3 INT\n);//风扇转if(num3 0){//PE9GPIOE-ODR | (0x19);num3;}//风扇停else if(num3 0){//PE9GPIOE-ODR ~(0x19);num3 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x12);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x18);break;}//清除处理完的中断号GICC_EOIRGICC-EOIRirqno;
}key_it.c
#include key_it.h
#include uart1.hextern void printf(const char *fmt, ...);
unsigned int i 0;
unsigned int num10,num20,num30;
void do_irq(void)
{int irqno;//保存中断号irqno GICC-IAR0X3FF;switch(irqno){case 99://key1//按键1中断处理printf(KEY1 INT\n);//灯亮if(num1 0){//PF10GPIOF-ODR | (0x110);//PE10 PE8GPIOE-ODR | (0x58);num1;}//灯灭else if(num1 0){//PF10GPIOF-ODR ~(0x110);//PE10 PE8GPIOE-ODR ~(0x58);num1 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x13);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x19);break;case 97://key2//按键2中断处理printf(KEY2 INT\n);//蜂鸣器转if(num2 0){//PB6GPIOB-ODR | (0x16);num2;}//蜂鸣器停else if(num2 0){//PB6GPIOB-ODR ~(0x16);num2 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x11);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x17);break;case 98://key3//按键3中断处理printf(KEY3 INT\n);//风扇转if(num3 0){//PE9GPIOE-ODR | (0x19);num3;}//风扇停else if(num3 0){//PE9GPIOE-ODR ~(0x19);num3 0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x12);//清除中断触发标志位EXTI_FRR1EXTI-FPR1 | (0x18);break;}//清除处理完的中断号GICC_EOIRGICC-EOIRirqno;
}