購物網(wǎng)站模塊例子洗發(fā)水營銷推廣軟文800字
設(shè)置按鍵中斷,按鍵1按下,LED亮,再按一次,滅
按鍵2按下,蜂鳴器響。再按一次,不響
按鍵3按下,風(fēng)扇轉(zhuǎn),再按一次,風(fēng)扇停
main.c
#include "uart1.h"
#include "key_it.h"
int main()
{uart4_init();//串口初始化//中斷初始化key_it_config();key3_it_config();gpio_start();while(1){//保證主程序不結(jié)束}return 0;
}
do_irp.c
#include "key_it.h"
#include "uart1.h"extern void printf(const char *fmt, ...);
unsigned int i = 0;
unsigned int num1=0,num2=0,num3=0;
void do_irq(void)
{int irqno;//保存中斷號irqno = GICC->IAR&0X3FF;switch(irqno){case 99://key1//按鍵1中斷處理printf("KEY1 INT\n");//燈亮if(num1 == 0){//PF10GPIOF->ODR |= (0x1<<10);//PE10 PE8GPIOE->ODR |= (0x5<<8);num1++;}//燈滅else if(num1 > 0){//PF10GPIOF->ODR &= ~(0x1<<10);//PE10 PE8GPIOE->ODR &= ~(0x5<<8);num1 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按鍵2中斷處理printf("KEY2 INT\n");//蜂鳴器轉(zhuǎn)if(num2 == 0){//PB6GPIOB->ODR |= (0x1<<6);num2++;}//蜂鳴器停else if(num2 > 0){//PB6GPIOB->ODR &= ~(0x1<<6);num2 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按鍵3中斷處理printf("KEY3 INT\n");//風(fēng)扇轉(zhuǎn)if(num3 == 0){//PE9GPIOE->ODR |= (0x1<<9);num3++;}//風(fēng)扇停else if(num3 > 0){//PE9GPIOE->ODR &= ~(0x1<<9);num3 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<8);break;}//清除處理完的中斷號GICC_EOIRGICC->EOIR=irqno;
}
key_it.c
#include "key_it.h"
#include "uart1.h"extern void printf(const char *fmt, ...);
unsigned int i = 0;
unsigned int num1=0,num2=0,num3=0;
void do_irq(void)
{int irqno;//保存中斷號irqno = GICC->IAR&0X3FF;switch(irqno){case 99://key1//按鍵1中斷處理printf("KEY1 INT\n");//燈亮if(num1 == 0){//PF10GPIOF->ODR |= (0x1<<10);//PE10 PE8GPIOE->ODR |= (0x5<<8);num1++;}//燈滅else if(num1 > 0){//PF10GPIOF->ODR &= ~(0x1<<10);//PE10 PE8GPIOE->ODR &= ~(0x5<<8);num1 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按鍵2中斷處理printf("KEY2 INT\n");//蜂鳴器轉(zhuǎn)if(num2 == 0){//PB6GPIOB->ODR |= (0x1<<6);num2++;}//蜂鳴器停else if(num2 > 0){//PB6GPIOB->ODR &= ~(0x1<<6);num2 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按鍵3中斷處理printf("KEY3 INT\n");//風(fēng)扇轉(zhuǎn)if(num3 == 0){//PE9GPIOE->ODR |= (0x1<<9);num3++;}//風(fēng)扇停else if(num3 > 0){//PE9GPIOE->ODR &= ~(0x1<<9);num3 = 0;}//清除掛起中斷標志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中斷觸發(fā)標志位EXTI_FRR1EXTI->FPR1 |= (0x1<<8);break;}//清除處理完的中斷號GICC_EOIRGICC->EOIR=irqno;
}