<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      3-4 ~ 3-5 GPIO輸入

      視頻選集(8/50)[3-4] 按鍵控制LED&光敏傳感器控制蜂鳴器

      0. GPIO讀取-庫(kù)函數(shù)

      /**
        * @brief  讀取指定 輸入GPIO 的數(shù)據(jù)值
        * @param  GPIOx: 指定GPIO
        * @retval GPIO輸入數(shù)據(jù)值
        */
      uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
      
      /**
        * @brief  讀取指定 輸出GPIO 的數(shù)據(jù)值
        * @param  GPIOx: 指定GPIO
        * @retval GPIO輸出數(shù)據(jù)值
        */
      uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
      
      /**
        * @brief  讀取指定的輸入端口
        * @param  GPIOx: 選擇GPIO
        * @param  GPIO_Pin: 指定端口
        * @retval 指定端口的輸入電平
        */
      uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      
      /**
        * @brief  讀取指定的輸出端口
        * @param  GPIOx: 選擇GPIO
        * @param  GPIO_Pin: 指定端口
        * @retval 指定端口的輸出電平
        */
      uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
      

      1. 按鍵控制LED

      1.1器件

      • STM32最小系統(tǒng)板
      • ST-LINK V2下載器
      • LED*2
      • 按鍵*2

      1.2 實(shí)現(xiàn)目標(biāo)

      • 在LED1熄滅的情況下,按下key1,LED1亮起;在LED1點(diǎn)亮的情況下,按下key1,LED1熄滅;
      • 在LED2熄滅的情況下,按下key2,LED2亮起;在LED2點(diǎn)亮的情況下,按下key2,LED2熄滅;

      1.3 配置工程文件

      注.模塊化編程更加便于管理和移植

      • 創(chuàng)建Hardware文件夾,用來(lái)存放硬件驅(qū)動(dòng),將LED.h、LED.c、Key.h、Key.c放在該文件夾下

      1.4 接線圖

      注.我沒有按照?qǐng)D中的IO口來(lái)接LED和按鍵,具體看程序代碼

      3-4 按鍵控制LED

      1.5 程序

      main.c文件如下:

      #include "stm32f10x.h"                  // Device header
      #include "LED.h"
      #include "Key.h"
      
      /*------------------------------主函數(shù)------------------------------*/
      int main(void)
      {
      	/*-----變量聲明和初始化-----*/
      	uint8_t key_flag = 0;
      	
      	/*-----硬件初始化-----*/
      	LED_Init();
      	Key_Init();
      	
      	/*-----輸出控制-----*/
      	while(1){
      		key_flag = Key_Read();
      		LED_Turn(key_flag);
      		key_flag = 0; // 清除標(biāo)志位
      	}
      }
      
      

      LED.c文件如下:

      #include "stm32f10x.h"                  // Device header
      
      /*------------------------------LED初始化函數(shù)(低電平有效)------------------------------
      	@LED1 A1
      	@LED2 A6
      */
      void LED_Init(void)
      {
      	/*-----變量聲明-----*/
      	GPIO_InitTypeDef GPIO_InitStruct; // 定義包含配置參數(shù)的結(jié)構(gòu)體變量
      	
      	/*-----時(shí)鐘使能-----*/
      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 開啟GPIOA的時(shí)鐘
      	
      	/*-----端口配置-----*/
      	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽輸出
      	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
      	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
      	GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的所有端口
      	
      	/*-----初始化熄滅-----*/
      	GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_6); // A1, A6端口輸出高電平
      }
      
      
      /*------------------------------LED翻轉(zhuǎn)函數(shù)------------------------------
      	@brief 使指定LED控制引腳的輸出電平翻轉(zhuǎn),從而控制LED的亮滅
      	@param  LED_no: 選擇LED。該參數(shù)可以是以下值
      		@arg 1: LED1
      		@arg 2: LED2
      */
      void LED_Turn(uint8_t LED_no)
      {	
      	/*-----變量聲明和初始化-----*/
      	uint8_t temp_state = 0; // 存儲(chǔ)讀取到的電平值
      	uint16_t temp_pin = 0; // 存儲(chǔ)引腳地址
      	
      	/*-----輸出控制-----*/
      	if(LED_no == 1){
      		temp_pin = GPIO_Pin_1;
      	}
      	if(LED_no == 2){
      		temp_pin = GPIO_Pin_6;
      	}
      	
      	temp_state = GPIO_ReadOutputDataBit(GPIOA, temp_pin); // 讀取
      	if(temp_state){
      		GPIO_ResetBits(GPIOA, temp_pin); // 高電平置反
      	}else{
      		GPIO_SetBits(GPIOA, temp_pin); // 低電平置反
      	}
      }
      
      

      LED.h文件如下:

      #ifndef __LED_H
      #define __LED_H
      
      void LED_Init(void);
      void LED_Turn(uint8_t LED_no);
      
      #endif
      
      

      Key.c文件如下:

      #include "stm32f10x.h"                  // Device header
      #include "Delay.h"
      
      /*------------------------------按鍵初始化函數(shù)(低電平有效)------------------------------
      	@key1 B0
      	@key2 B1
      */
      void Key_Init(void)
      {
      	/*-----變量聲明-----*/
      	GPIO_InitTypeDef GPIO_InitStruct; // 定義包含配置參數(shù)的結(jié)構(gòu)體變量
      	
      	/*-----時(shí)鐘使能-----*/
      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟GPIOB的時(shí)鐘
      	
      	/*-----端口配置-----*/
      	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入:懸空時(shí)默認(rèn)高電平
      	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
      	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
      	GPIO_Init(GPIOB, &GPIO_InitStruct); 
      }
      
      
      /*------------------------------按鍵讀取函數(shù)------------------------------
      	@brief 通過參數(shù)傳遞按鍵狀態(tài)數(shù)組
      */
      uint8_t Key_Read(void)
      {
      	if(!(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))){ // 【key1被按下】
      		Delay_ms(20); // 按下按鍵消抖
      		while(!(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))); // 未松開時(shí)阻塞
      		Delay_ms(20); // 松開按鍵消抖
      		return 1;
      	}
      	if(!(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))){ // 【key2被按下】
      		Delay_ms(20); // 按下按鍵消抖
      		while(!(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))); // 未松開時(shí)阻塞
      		Delay_ms(20); // 松開按鍵消抖
      		return 2;
      	}
      	return 0;
      }
      
      

      Key.h文件如下:

      #ifndef __KEY_H
      #define __KEY_H
      
      
      void Key_Init(void);
      uint8_t Key_Read(void);
      
      #endif
      
      

      2. 光敏控制蜂鳴器報(bào)警

      2.1 器件

      • STM32最小系統(tǒng)板
      • ST-LINK V2下載器
      • 蜂鳴器
      • 光敏傳感器

      2.2 實(shí)現(xiàn)目標(biāo)

      • 光線正常,蜂鳴器不報(bào)警
      • 光線被遮擋,蜂鳴器報(bào)警

      2.3 接線圖

      注.我沒有按照?qǐng)D中的IO口來(lái)接線,具體看程序代碼

      3-5 光敏傳感器控制蜂鳴器

      2.4 程序

      main.c文件如下:

      #include "stm32f10x.h"                  // Device header
      #include "Sensor_Light.h"
      #include "Buzzer.h"
      
      /*------------------------------主函數(shù)------------------------------*/
      int main(void)
      {
      	/*-----變量聲明-----*/
      	uint8_t sensor_light_state;
      	
      	/*-----硬件初始化-----*/
      	Sensor_Light_Init();
      	Buzzer_Init();
      	
      	/*-----輸出控制-----*/
      	while(1){
      		sensor_light_state = Sensor_Light_Read();
      		if(!sensor_light_state){ // 光線正常,輸出低電平:蜂鳴器不發(fā)聲,DO-LED亮
      			Buzzer_Control(OFF);
      		}		
      		if(sensor_light_state){ // 光線被遮擋,輸出高電平:蜂鳴器響,DO-LED滅
      			Buzzer_Control(ON);
      		}		
      	}
      }
      
      

      Sensor_Light.c文件如下:

      #include "stm32f10x.h"                  // Device header
      
      /*------------------------------光敏傳感器初始化函數(shù)------------------------------
      	@DO A1
      */
      void Sensor_Light_Init(void)
      {
      	/*-----變量聲明-----*/
      	GPIO_InitTypeDef GPIO_InitStruct; // 定義包含配置參數(shù)的結(jié)構(gòu)體變量
      	
      	/*-----時(shí)鐘使能-----*/
      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 開啟GPIOA的時(shí)鐘
      	
      	/*-----端口配置-----*/
      	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入:懸空時(shí)默認(rèn)高電平
      	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
      	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
      	GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化A1端口
      }
      
      
      
      /*------------------------------讀取光敏傳感器當(dāng)前輸出電平函數(shù)------------------------------
      	@return 0/1
      */
      uint8_t Sensor_Light_Read(void)
      {	
      	return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1); // 返回讀取值
      }
      
      

      Sensor_Light.h文件如下:

      #ifndef __SENSOR_LIGHT_H
      #define __SENSOR_LIGHT_H
      
      void Sensor_Light_Init(void);
      uint8_t Sensor_Light_Read(void);
      
      #endif
      
      

      Buzzer.c文件如下:

      #include "stm32f10x.h"                  // Device header
      #include "Buzzer.h"
      
      /*------------------------------蜂鳴器初始化函數(shù)(低電平有效)------------------------------
      	@I/O:B0
      */
      void Buzzer_Init(void)
      {
      	/*-----變量聲明-----*/
      	GPIO_InitTypeDef GPIO_InitStruct; // 定義包含配置參數(shù)的結(jié)構(gòu)體變量
      	
      	/*-----時(shí)鐘使能-----*/
      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟GPIOB的時(shí)鐘
      	
      	/*-----端口配置-----*/
      	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出,默認(rèn)低電平
      	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
      	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
      	GPIO_Init(GPIOB, &GPIO_InitStruct); // 初始化B0端口
      	
      	/*-----初始化-----*/
      	GPIO_SetBits(GPIOB, GPIO_Pin_0); // 輸出高電平
      }
      
      
      /*------------------------------蜂鳴器控制函數(shù)------------------------------
      	@brief 控制蜂鳴器的開/關(guān)
      	@param buzzer_state: 選擇狀態(tài)。該參數(shù)可以是以下值
      		@arg 1: ON
      		@arg 2: OFF
      */
      void Buzzer_Control(BuzzerState_TypeDef buzzer_state)
      {
      	GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)buzzer_state);
      }
      
      

      Buzzer.h文件如下:

      #ifndef __BUZZER_H
      #define __BUZZER_H
      
      typedef enum
      { 
        ON = 0,
        OFF = 1
      }BuzzerState_TypeDef;
      
      void Buzzer_Init(void);
      void Buzzer_Control(BuzzerState_TypeDef buzzer_state);
      
      #endif
      
      
      posted @ 2025-08-07 14:35  LI,Yi-han  閱讀(11)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲成av人在线播放无码| 成人乱人伦精品小说| 国产精品区一区第一页| 欧美日本在线一区二区三区| 人妻少妇邻居少妇好多水在线 | 特黄大片又粗又大又暴| 91久久夜色精品国产网站| 亚洲一区二区国产av| 日韩精品一区二区蜜臀av| 东京热一精品无码av| 漂亮的保姆hd完整版免费韩国| 国产无套护士在线观看| 亚洲香蕉免费有线视频| 欧美亚洲综合久久偷偷人人| 日韩精品人妻av一区二区三区| 99国精品午夜福利视频不卡99| 中文字幕亚洲一区二区va在线| 国产成人午夜在线视频极速观看| 国产成人啪精品视频免费APP| 亚洲中文无码av在线| 中文字幕av一区二区| 无码日韩做暖暖大全免费不卡| 制服丝袜美腿一区二区| 国产91色在线精品三级| 麻花传媒在线观看免费| 国产成人拍国产亚洲精品| 国产91午夜福利精品| 夜夜夜高潮夜夜爽夜夜爰爰| 国产高清在线精品一区| 日韩av中文字幕有码| 四房播色综合久久婷婷| 国产成AV人片久青草影院| 高清有码国产一区二区| 国产片av在线观看国语| 亚洲婷婷综合色高清在线| 四虎成人在线观看免费| 国产蜜臀av在线一区二区| 国产免费又黄又爽又色毛| 99久久99久久久精品久久| 久久婷婷五月综合97色直播| 性色av免费观看|