zoukankan      html  css  js  c++  java
  • 嵌入式系统——使用GPIO固件库综合编程(通过按键控制LED灯与蜂鸣器的状态)

    led.h

    #ifndef LED_H
    #define LED_H
    
    #include "stm32f4xx.h"
    
    typedef enum LED_ID_T{
    	LED_D1 = 1,
    	LED_D2,
    	LED_D3,
    	LED_D4
    } LED_ID;
    
    void led_init(void);
    void led_one_on(LED_ID num);
    void led_one_off(LED_ID num);
    void delay(int num);
    void led_loop(void);
    
    #endif
    
    

    led.c

    #include "LED.h"
    #include "systick.h"
    #define Total_time 0x2000000
    
    void led_init(){
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF, ENABLE);
    	
    	GPIO_InitTypeDef p;
    	p.GPIO_Mode = GPIO_Mode_OUT;
    	p.GPIO_OType = GPIO_OType_PP;
    	p.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
    	p.GPIO_PuPd = GPIO_PuPd_NOPULL;
    	p.GPIO_Speed = 	GPIO_Speed_50MHz;
    	GPIO_Init(GPIOF, &p);
    	p.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;
    	GPIO_Init(GPIOE, &p);
    	
    	GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
    	GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
    }
    
    void led_one_on(LED_ID led_now){
    	if(led_now == 1){
    		GPIO_ResetBits(GPIOF, GPIO_Pin_9);
    		GPIO_SetBits(GPIOF, GPIO_Pin_10);
    		GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
    	}
    	else if(led_now == 2){
    		GPIO_ResetBits(GPIOF, GPIO_Pin_10);
    		GPIO_SetBits(GPIOF, GPIO_Pin_9);
    		GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
    	}
    	else if(led_now == 3){
    		GPIO_ResetBits(GPIOE, GPIO_Pin_13);
    		GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
    		GPIO_SetBits(GPIOE, GPIO_Pin_14);
    	}
    	else if(led_now == 4){
    		GPIO_ResetBits(GPIOE, GPIO_Pin_14);
    		GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
    		GPIO_SetBits(GPIOE, GPIO_Pin_13);
    	}
    }
    
    void led_one_off(LED_ID led_now){
    	if(led_now == 1){
    		GPIO_SetBits(GPIOF, GPIO_Pin_9);
    	}
    	else if(led_now == 2){
    		GPIO_SetBits(GPIOF, GPIO_Pin_10);
    	}
    	else if(led_now == 3){
    		GPIO_SetBits(GPIOE, GPIO_Pin_13);
    	}
    	else if(led_now == 4){
    		GPIO_SetBits(GPIOE, GPIO_Pin_14);
    	}
    }
    
    
    void delay(int num){
    	while(num--);
    }
    
    void led_loop(){
    	LED_ID led_now = LED_D1;
    	for (led_now = LED_D1;led_now <= LED_D4;led_now++){
    		led_one_on(led_now);
    		delay(Total_time);
    		//Delay_ms(2000);
    	}
    }
    
    
    
    

    key.h

    #ifndef KEY_H
    #define KEY_H
    
    #include "stm32f4xx.h"
    #include "beep.h"
    #include "LED.h"
    
    void key_init();
    void key_check();
    #endif
    
    
    

    key.c

    #include "key.h"
    int tmp0 = 0;
    
    void key_init(){
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE);
    	GPIO_InitTypeDef P;
    	P.GPIO_Pin= GPIO_Pin_0;
    	P.GPIO_Mode = GPIO_Mode_IN;
    	P.GPIO_Speed = GPIO_Speed_50MHz;
    		//P.GPIO_OType = GPIO_OType_PP;
    	P.GPIO_PuPd = GPIO_PuPd_NOPULL;	
    	GPIO_Init(GPIOA,&P); //初始化key0
    	P.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
    	GPIO_Init(GPIOE,&P); //初始化key1,key2,key3
    }
    
    void key_check(){
    	if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)){//key0被按下
    		//flag1 ? led_one_on(LED_D1) : led_one_off(LED_D1); flag1 ^= 1;
    		//GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
    		tmp0 = 1;
    		//delay(5500);
    	}
    	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)){//key1被按下
    		//flag2 ? led_one_on(LED_D2) : led_one_off(LED_D2); flag2 ^= 1;
    		GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
    		delay(5500);
    	}
    	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)){//key2被按下
    		GPIO_ToggleBits(GPIOE, GPIO_Pin_13);
    		delay(5500);
    	}
    	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)){//key3被按下
    		GPIO_ToggleBits(GPIOE, GPIO_Pin_14);
    		delay(5500);
    		GPIO_SetBits(GPIOF, GPIO_Pin_8);//置1,蜂鸣器响起
    		delay(0x666666);
    		GPIO_ResetBits(GPIOF, GPIO_Pin_8);//置0
    	}
    }
    
    
    

    beep.h

    #ifndef BEEP_H
    #define BEEP_H
    
    #include "stm32f4xx.h"
    #include "systick.h"
    
    void beep_init(int f);
    void music_fun();
    
    #endif
    

    beep.c

    #include "beep.h"
    void beep_init(int f){
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
    	
    	GPIO_InitTypeDef P;
    	P.GPIO_Pin= GPIO_Pin_8;
    	P.GPIO_Mode = GPIO_Mode_OUT;
    	P.GPIO_Speed = GPIO_Speed_50MHz;
    	P.GPIO_PuPd = GPIO_PuPd_NOPULL;
    	GPIO_Init(GPIOF,&P); //初始化BEEP
    	GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_TIM13);
    	GPIO_ResetBits(GPIOF, GPIO_Pin_8);//初始化置0
    }
    

    main.c

    led_init();//初始化LED
      key_init();//初始化key
      beep_init();//初始化蜂鸣器
    while (1)
      {
      	key_check();//等待key响应
      	
      }
    
    你将不再是道具,而是成为人如其名的人
  • 相关阅读:
    Django之模板层
    Django之视图层
    Django路由系统
    Django request对象与ORM简介
    浏览器不能访问bing
    SQL问题:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value
    IDEA用Maven创建SpringMVC项目和配置
    离线安装pyinstaller
    flink1.11-报错问题
    maven的pom文件报红
  • 原文地址:https://www.cnblogs.com/wsl-lld/p/14825541.html
Copyright © 2011-2022 走看看