国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32第三課:按鍵控制LED燈,光敏傳感器控制蜂鳴器

這篇具有很好參考價值的文章主要介紹了STM32第三課:按鍵控制LED燈,光敏傳感器控制蜂鳴器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:按鍵控制LED燈

????????STM32的第三課,我們來學(xué)習(xí)如何使用按鍵來控制LED燈的亮滅。上一節(jié)課我們通過代碼控制了LED的狀態(tài),但是還是處于一種較為低級的方式控制LED燈,缺少交互性,用按鍵進行控制屬于更高的一個層次。然后我們將學(xué)習(xí)通過光敏傳感器控制蜂鳴器的通斷,讓我們的學(xué)習(xí)之路更加有趣、精彩。

1.1 初始化函數(shù)代碼的編寫?

? ? ? ? 首先編寫LED小燈的初始化函數(shù)代碼,用于初始化將要控制LED小燈的I/O口。

? ? ? ? 首先,在工程文件中先創(chuàng)建一個名為Hardware的文件夾,用于存放我們將要配置的系統(tǒng)文件。

? ? ? ? ?同樣,在魔術(shù)棒里面,配置Hardware文件夾的頭文件路徑,用于使用自己編寫的頭文件驅(qū)動程序。此處再演示一下如何進行配置。

? ? ? ? 第一步:先在工程文件中創(chuàng)建名為Hardware的文件夾。stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

第二步,在三個小箱子里面添加名為Hardware的文件,用于存放編寫的驅(qū)動代碼。?

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

????????然后右鍵左側(cè)剛添加的Hardware文件夾,選擇添加新文件到Hardwarestm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)?????????然后依次選擇.c文件,名稱填LED,點Add再選擇下面的.h文件,名稱也填LED,點Add,這樣我們就在Hardware文件夾里面創(chuàng)建了兩個配置驅(qū)動的文件了。

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

?????????同時按照同樣的思路,再創(chuàng)建一個Key.c和Key.h的兩個驅(qū)動文件放在Hardware文件夾里,用于配置按鍵的驅(qū)動。

????????在魔術(shù)棒里添加上Hardware的頭文件地址即可。stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

? ? ? ? 在驅(qū)動文件LED.c文件里,主要編寫驅(qū)動文件的函數(shù),用于在主函數(shù)main.c文件里面直接引用。把所有想實現(xiàn)的功能都編寫成函數(shù)有利于代碼的檢查和移植。LED.h文件主要編寫對外引用函數(shù)的代碼,這就是.c文件和.h文件的主要區(qū)別。

? ? ? ? ? 在驅(qū)動文件LED.c文件里,首先編寫初始化函數(shù)的代碼,然后再編寫相關(guān)功能的代碼,比如說LED_ON\LED_OFF、LED_Turn,分別代表LED燈的亮滅和電位翻轉(zhuǎn)。詳細(xì)代碼見如下所示:

LED.c

#include "stm32f10x.h"

void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
}

void LED1_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}



void LED1_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

void LED1_Turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1) == 0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_1);
	}
	else
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_1);
	}
}

void LED2_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}

void LED2_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_2);
}

void LED2_Turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) == 0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_2);
	}
	else
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_2);
	}
}

????????LED.h文件里主要放置LED.c文件中的函數(shù)對外引用,直接把函數(shù)的名稱拿過來即可。但是LED.h文件首先要寫上防止重復(fù)引用的函數(shù),都是一個套路,所有的.h文件里面都要寫。詳細(xì)代碼如下:

LED.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED1_Turn(void);
void LED2_Turn(void);

#endif

這樣一來LED小燈的驅(qū)動代碼就寫好了。

然后我們再來配置按鍵的驅(qū)動代碼LED.c和LED.h的代碼內(nèi)容。

LED.c代碼也是需要我們編寫相關(guān)功能的驅(qū)動代碼函數(shù),首先編寫初始化函數(shù),結(jié)構(gòu)和上文LED.c的初始化函數(shù)大同小異,只有引腳端口號不一樣而已。然后編寫按鍵的數(shù)據(jù)讀取函數(shù),在這里我們使用GPIO_ReadInputDataBit函數(shù),可以直接讀取某一個引腳的電位值。按鍵需要延時20微秒用于防抖,詳細(xì)代碼如下:

Key.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
}

uint8_t Key_GetNum(void)
{
	uint8_t KeyNum = 0;
	
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0);
		Delay_ms(20);
		
		KeyNum = 1;
	}
	
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0)
	{
		Delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0);
		Delay_ms(20);
		
		KeyNum = 2;
	}
	
	
	return KeyNum;
}

Key.h?

#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x.h"                  // Device header


void Key_Init(void);
uint8_t Key_GetNum(void);

#endif

這樣一來,初始化驅(qū)動文件就配置好了。

1.2 電路接線方法

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

1.3 主體代碼演示?

?首先我們要配置好頭文件,延時函數(shù)Delay.h也要配置上,這一點在我上一篇文章中有講到。然后初始化LED和Key,再循環(huán)函數(shù)里面編寫相關(guān)代碼即可。代碼如下:

main.c

#include "stm32f10x.h"
#include "LED.h"
#include "Delay.h"
#include "KEY.h"


uint8_t KeyNum;

int main(void)
{
	LED_Init();
	Key_Init();
	
	
	while(1)
	{
		//************按鍵控制LED
		KeyNum = Key_GetNum();
		
		if(KeyNum == 1)
		{
			LED1_Turn();
		}
		if(KeyNum == 2)
		{
			LED2_Turn();
		}
		
	}
	
}

1.4 實操效果展示

?stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

二:光敏電阻控制蜂鳴器?

?????????光敏電阻是采用半導(dǎo)體材料制作,利用內(nèi)光電效應(yīng)工作的光電元件。它在光線的作用下其阻值往往變小,這種現(xiàn) 象稱為光導(dǎo)效應(yīng),因此,光敏電阻又稱光導(dǎo)管。

2.1 光敏電阻傳感器

?2.1.1 產(chǎn)品特性

?????????光敏電阻模塊一般用來檢測周圍環(huán)境的光線的亮度,觸發(fā)單片機或繼電器模塊等。使用寬電壓LM393比較器,信號干凈,波形好,驅(qū)動能力強,超過15mA。配可調(diào)電位器可調(diào)節(jié)檢測光線亮度。設(shè)有固定螺栓孔M3,方便安裝。

2.1.2 工作原理?

????????光敏電阻是用硫化隔或硒化隔等半導(dǎo)體材料制成的特殊電阻器,其工作原理是基于內(nèi)光電效應(yīng)。隨著光照強度的升高,電阻值迅速降低,由于光照產(chǎn)生的載流子都參與導(dǎo)電,在外加電場的作用下作漂移運動,電子奔向電源的正極,空穴奔向電源的負(fù)極,從而使光敏電阻器的阻值迅速下降。其在無光照時,幾乎呈高阻狀態(tài),暗電阻很大。

2.1.3 產(chǎn)品參數(shù)?

?????????工作電壓:DC3.3-5V
????????光敏電阻型號:5516

?2.1.4 使用說明

?????????數(shù)字量DO輸出端可以直接驅(qū)動本店繼電器模塊,由此可以組成一個光控開關(guān)。模擬量A0可以和AD模塊相連,通過AD轉(zhuǎn)換,可以獲得環(huán)境光強的數(shù)值。當(dāng)環(huán)境光線亮度達(dá)不到設(shè)定閩值時,DO端輸出高電平,當(dāng)外界環(huán)境光線亮度超過設(shè)定閩值時,DO端輸出低電平。檢測亮度可以通過電位器進行調(diào)節(jié),順時針調(diào)電位器,檢測亮度增加;逆時針調(diào)電位器,檢測亮度減少。stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

2.2 初始化驅(qū)動代碼的編寫?

?????????首先創(chuàng)建有關(guān)于蜂鳴器的Buzzer.c和Buzzer.h的兩個驅(qū)動文件,再創(chuàng)建有關(guān)于光敏傳感器的LightSensor.c和LightSensor.h的兩個驅(qū)動文件,按照上文的方法分別添加到Hardware文件中。

????????Buzzer.c文件主要編寫實現(xiàn)蜂鳴器響起來的代碼函數(shù),類型和上文類似,這里不再贅述。直接給出Buzzer.c和Buzzer.h的代碼。

Buzzer.c

#include "stm32f10x.h"                  // Device header

void Buzzer_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_12);
}

void Buzzer_ON(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}



void Buzzer_OFF(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_12);
}

void Buzzer_Turn(void)
{
	if (GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12) == 0)
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_12);
	}
	else
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
	}
}

Buzzer.h

#ifndef __Buzzer_H
#define __Buzzer_H

void Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);
void Buzzer_Turn(void);



#endif

? ? ? ? 關(guān)于LightSensor.c和LightSensor.h的兩個驅(qū)動文件的話,在LightSensor.c文件中內(nèi)容與上文類似,不過有關(guān)代碼部分我們只需要傳回光敏傳感器引腳的值就行。代碼如下:

LightSensor.c

#include "stm32f10x.h"                  // Device header

void LightSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_13);
}

uint8_t LightSensor_Get(void)
{
	return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}

LightSensor.h

#ifndef __LIGHT_SENSOR_
#define __LIGHT_SENSOR_

void LightSensor_Init(void);
uint8_t LightSensor_Get(void);

#endif

如此一來,我們驅(qū)動文件基本上配置好了,下面只要完善主函數(shù)main.c中的代碼即可。

2.3 電路接線方法

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

2.4 主體代碼演示?

? ? ? ? ?相關(guān)的頭文件是必須要包含的,比如#include "stm32f10x.h"、#include "Delay.h",還有剛剛配置好的#include "Buzzer.h"、#include "LightSensor.h"等頭文件。

? ? ? ? 緊接著初始化Buzzer和LightSensor函數(shù)。

? ? ? ? 在while循環(huán)函數(shù)中,接收光敏傳感器返回的引腳電位數(shù)值,進行 if 判斷。代碼如下所示:

#include "stm32f10x.h"
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"


int main(void)
{
	Buzzer_Init();
	LightSensor_Init();
	
	
	while(1)
	{
		
		if (LightSensor_Get() == 1)
		{
			Buzzer_ON();
		}
		else
		{
			Buzzer_OFF();
		}
		
	}
	
}

2.5 實操效果演示?

stm32第三課:按鍵控制led燈,光敏傳感器控制蜂鳴器,stm32,嵌入式硬件,單片機,學(xué)習(xí)

與君共勉??,關(guān)注我,持續(xù)更新中~?文章來源地址http://www.zghlxwxcb.cn/news/detail-861481.html

到了這里,關(guān)于STM32第三課:按鍵控制LED燈,光敏傳感器控制蜂鳴器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 單片機設(shè)計:stm32遠(yuǎn)程水位檢測灌溉系統(tǒng)(水泵+電機驅(qū)動+OLED顯示屏+水位傳感器+防水式ds18b20+光敏傳感器+按鍵+WiFi+手機app)

    單片機設(shè)計:stm32遠(yuǎn)程水位檢測灌溉系統(tǒng)(水泵+電機驅(qū)動+OLED顯示屏+水位傳感器+防水式ds18b20+光敏傳感器+按鍵+WiFi+手機app)

    單片機設(shè)計:stm32遠(yuǎn)程水位檢測灌溉系統(tǒng)(水泵+電機驅(qū)動+OLED顯示屏+水位傳感器+防水式ds18b20+光敏傳感器+按鍵+WiFi+手機app) 一、主要功能:? ? 1.水位傳感器檢測水的高度、光敏傳感器檢測周圍光照強度、ds18b20檢測水溫 2.0LED、手機app顯示當(dāng)前數(shù)據(jù)以及閾值 3.手機app遠(yuǎn)程調(diào)節(jié)閾值,

    2024年02月05日
    瀏覽(40)
  • DIY_實現(xiàn)光敏電阻傳感器簡單控制LED

    DIY_實現(xiàn)光敏電阻傳感器簡單控制LED

    模塊接線圖: 1、VCC 接電源正極 3.3-5V 2、GND 接電源負(fù)極 3、DO TTL 開關(guān)信號輸出 4、AO 模擬信號輸出 模塊特色: 1、工作電壓3.3V-5V 2、使用寬電壓LM393比較器 3、設(shè)有固定螺栓孔,方便安裝 4、采用靈敏型光敏電阻傳感器 5、小板PCB尺寸:3.2cm x 1.4cm 6、配可調(diào)電位器可調(diào)節(jié)檢測光

    2024年02月02日
    瀏覽(23)
  • STM32-光敏傳感器實驗

    STM32-光敏傳感器實驗

    光敏傳感器的主要是光敏二極管,核心是PN結(jié),利用了光電效應(yīng),對光強很敏感,有單向?qū)щ娦裕ぷ鲿r需要加反向電壓。光照越強,等效電阻越小。 實驗要求通過ADC3通道6(PF8)采集光敏二極管的電壓,然后轉(zhuǎn)換為0~100的光纖強度值并顯示在液晶屏上。 由下圖可知對于的通

    2024年02月05日
    瀏覽(25)
  • STM32F4_光敏傳感器

    STM32F4_光敏傳感器

    目錄 1. 什么是光敏傳感器、光敏電阻 2. 硬件分析 3. 實驗程序 3.1 main.c 3.2 ADC3.c 3.3 ADC3.h 3.4 Lightsensor.c 3.5 Lightsensor.h 光敏傳感器 也稱為光電傳感器。是利用光電器件把光信號轉(zhuǎn)換成電信號的一種傳感器。它的敏感波長在可見光波長附近,包括紅外線波長和紫外線波長。光傳感

    2024年02月05日
    瀏覽(28)
  • STM32學(xué)習(xí)記錄——光敏傳感器的使用

    STM32學(xué)習(xí)記錄——光敏傳感器的使用

    文章目錄 前言 一、學(xué)習(xí)目的 二、模塊介紹 三、代碼記錄 總結(jié) ? ? ? ?只做 學(xué)習(xí)記錄 ,記錄自己如何從零學(xué)會使用一個模塊,僅僅只是會用,缺乏專業(yè)知識。如果需要了解更多原理,可以從我推薦的技術(shù)大佬的文章中獲取。 ? ? ? ?我的學(xué)習(xí)目的就是通過STM32的ADC功能,學(xué)

    2024年02月07日
    瀏覽(55)
  • STM32_ADC————ADC+DMA多路數(shù)據(jù)傳輸,看門狗中斷,傳感器控制LED

    STM32_ADC————ADC+DMA多路數(shù)據(jù)傳輸,看門狗中斷,傳感器控制LED

    一:介紹ADC與DMA的基本情況與初始化 二:利用ADC+DMA+看門狗中斷+傳感器控制LED燈代碼 三:總結(jié)實驗過程中碰到的錯誤與問題 通過DMA轉(zhuǎn)運ADC的數(shù)據(jù),設(shè)置ADC的中斷看門狗閾值,當(dāng)光敏傳感器的ADC采樣值在看門狗高低閾值中間,不觸發(fā)中斷,如果超過看門狗的高低閾值就會觸發(fā)

    2024年02月04日
    瀏覽(28)
  • Stm32_標(biāo)準(zhǔn)庫_11_ADC_光敏&熱敏傳感器_測數(shù)值

    Stm32_標(biāo)準(zhǔn)庫_11_ADC_光敏&熱敏傳感器_測數(shù)值

    在測量光敏傳感器數(shù)值得基礎(chǔ)上手動將通道改成熱敏傳感器通道即可 由于溫度傳感器的測量范圍是-20 ~ 105攝氏度,所以輸出溫度得考慮帶上符號這就需要在原有輸出光照強度代碼的基礎(chǔ)上新添加幾個函數(shù) 函數(shù)1: 在獲取模擬電壓函數(shù)最開始寫入通道函數(shù)方便接入GPIO_1或GPIO_

    2024年02月19日
    瀏覽(24)
  • Stm32_標(biāo)準(zhǔn)庫_8_ADC_光敏傳感器_測量具體光照強度

    Stm32_標(biāo)準(zhǔn)庫_8_ADC_光敏傳感器_測量具體光照強度

    ADC簡介 測量方式 采用二分法比較數(shù)據(jù) IO通道 ADC基本結(jié)構(gòu)及配置路線 獲取數(shù)字變量需要用到用到光敏電阻的AO口,AO端口接在PA0引腳即可 測得的模擬數(shù)據(jù)與實際光照強度之間的關(guān)系為 代碼: 完整樸素代碼: 效果: 此代碼的不足之處在于每次寫入數(shù)字都會提前占據(jù)固定位置,

    2024年02月04日
    瀏覽(25)
  • STM32——震動傳感器點亮LED燈

    STM32——震動傳感器點亮LED燈

    若產(chǎn)品不震動,模塊上的 DO 口輸出高電平; 若產(chǎn)品震動,模塊上的 DO 口輸出低電平,D0-LED綠色指示燈亮。 需求:當(dāng)震動傳感器接收到震動信號時,使用中斷的方式點亮led1。 1、打開cubeMX a.在SYS中選擇調(diào)試方式為串行線調(diào)試。 b.在RCC(復(fù)位和時鐘控制)中選擇?HSE(高速時鐘)

    2024年02月04日
    瀏覽(21)
  • STM32按鍵控制LED

    1.利用模塊化編程對LED 2.設(shè)置LED的幾種狀態(tài)(亮,滅,和利用按鍵反轉(zhuǎn)電平) 3.按鍵 (1)按鍵初始化 (2)如果按鍵按下做什么(這里是控制LED) 4,主函數(shù)

    2024年02月12日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包