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

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

這篇具有很好參考價(jià)值的文章主要介紹了STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

單片機(jī)型號(hào):STM32F103C8T6
開發(fā)環(huán)境:Keil5

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤


二、GPIO的8種工作模式

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

4種輸入模式

  • 上拉輸入模式:在默認(rèn)狀態(tài)下(GPIO引腳無輸入),讀取得的GPIO引腳數(shù)據(jù)為1,高電平(與Vdd相連的為上拉電阻);
  • 下拉輸入模式:在默認(rèn)狀態(tài)下(GPIO引腳無輸入),讀取得的GPIO引腳數(shù)據(jù)為0,低電平(與Vss相連的為下拉電阻);
  • 浮空輸入模式:在芯片內(nèi)部既沒有上拉電阻,也沒有下拉電阻,經(jīng)由觸發(fā)器輸入。配置成這個(gè)模式直接用電壓表測(cè)量其引腳為1點(diǎn)幾伏,這是個(gè)不確定值。由于其輸入阻抗較大,一般把這種模式用于標(biāo)準(zhǔn)的通信協(xié)議I2C、USART的接收端;
  • 模擬輸入模式:關(guān)閉了斯密特觸發(fā)器,不接上、下拉電阻,經(jīng)由另一線路吧電壓信號(hào)傳送到片上外設(shè)模塊。如傳送至ADC模塊,由ADC采集電壓信號(hào),所以使用ADC外設(shè)的時(shí)候,必須設(shè)置為模擬輸入模式;

4中輸出模式

  • 推挽輸出模式:線路經(jīng)過一個(gè)由P-MOS管和N-MOS管組成的單元電路。在輸出高電平時(shí),P-MOS管導(dǎo)通;低電平時(shí),N-MOS管導(dǎo)通。兩個(gè)管子輪流導(dǎo)通,一個(gè)負(fù)責(zé)灌電流,一個(gè)負(fù)責(zé)拉電流,使其負(fù)載能力和開關(guān)速度都比普通的方式有很大的提高。普通推挽輸出模式一般應(yīng)用在輸出電平為0和3.3伏的場(chǎng)合
  • 開漏輸出模式:如果我們控制輸出為0,低電平,則使N-MOS管導(dǎo)通,使輸出接地;如果我們控制輸出為1(無法直接輸出高電平),則既不輸出高電平,也不輸出低電平,為高阻態(tài);為正常使用時(shí)必須在外部接上一個(gè)上拉電阻。它具有“線與”特效,即很多個(gè)開漏模式引腳連接到一起時(shí),只有當(dāng)所有引腳都輸出高阻態(tài),才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接電源的電壓。若其中一個(gè)引腳為低電平,那線路就相當(dāng)于短路解讀,使得整條線路都為低電平,0伏;普通開漏輸出模式一般應(yīng)用在電平不匹配的場(chǎng)合,如需要輸出5伏的高電平,就需要在外部接一個(gè)上拉電阻,電源為5伏,把GPIO設(shè)置為開漏模式,當(dāng)輸出高阻態(tài)時(shí),由上拉電阻和電源向外輸出5伏的電平;
  • 復(fù)用推挽輸出模式:
  • 復(fù)用開漏輸出模式:

對(duì)相應(yīng)的復(fù)用模式,則是根據(jù)GPIO的復(fù)用功能來選擇的,例如GPIO的引腳用作串口的輸出,則使用復(fù)用推挽輸出模式;如果用在IC、SMBUS這些需要線與功能的復(fù)合場(chǎng)所,就使用復(fù)用開漏輸出模式;

注意:在使用任何一種開漏模式時(shí),都需要接上拉電阻;


三、按鍵原理

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤
如上圖,按鈕一端接地,一端接GPIO引腳,這條路其實(shí)是一個(gè)斷路;控制按鈕時(shí)我們通常會(huì)將GPIO引腳設(shè)置為上拉輸入模式,上拉輸入模式默認(rèn)為高電平,當(dāng)按鈕沒有按下的時(shí)候,這個(gè)引腳讀到的一直是高電平;當(dāng)按鈕被按下的時(shí)候,引腳會(huì)被強(qiáng)行拉低,此時(shí)引腳讀到的為低電平,那說明按鍵已經(jīng)被按下;


四、單個(gè)按鈕

我們已經(jīng)知道了按鈕的工作原理,按照下圖連接好元器件
STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤
按鈕左側(cè)始終是高電位(PC0與之相連也是高電位),按鈕右側(cè)始終是低電位,當(dāng)按鈕按下時(shí),PC0引腳會(huì)被強(qiáng)行拉低,此時(shí)引腳讀到的為低電平;

檢測(cè)到低電平時(shí),翻轉(zhuǎn)引腳PC10的電平為低電位,從而實(shí)現(xiàn)按下按鈕,小燈亮;松開按鈕,小燈滅;

效果展示

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

詳細(xì)代碼
led.h

#ifndef __LED_H
#define __LED_H

#include "stm32f10x.h"

void LED_GPIO_Config(void);

#endif		

led.c

#include "led.h"

void LED_GPIO_Config(void)
{
	//定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//開啟GPIOC的外設(shè)時(shí)鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	//選擇要控制的GPIO引腳
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	//設(shè)置引腳模式為上拉輸入模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	//設(shè)置引腳速率為50MHz
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	//調(diào)用庫(kù)函數(shù),初始化GPIOC
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	
	//選擇要控制的GPIO引腳
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	//設(shè)置引腳模式為推挽輸出模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	//設(shè)置引腳速率為50MHz
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	//調(diào)用庫(kù)函數(shù),初始化GPIOC
	GPIO_Init(GPIOC,&GPIO_InitStructure);
}

main.c

#include "stm32f10x.h"
#include "led.h"

GPIO_InitTypeDef GPIO_InitStructure;
void Delay(int m,int n)	//延時(shí)函數(shù)
{
	int i,j;
	for(i=0;i<m;i++) {
		for(j=0;j<n;j++);
	}
}

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

	LED_GPIO_Config();	//初始化GPIO
	
	while (1)
	{
		uint8_t flag = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0);
		if(flag == 0) {
			//按鈕按下,置低電位,小燈亮
			GPIO_ResetBits(GPIOC,GPIO_Pin_10);
		}else {
			//按鈕松開,置高電位,小燈滅
			GPIO_SetBits(GPIOC,GPIO_Pin_10);
		}
		Delay(100,100);	//延時(shí)消抖
	}//while(1)
}

五、按鈕鍵盤

鍵盤由多行多列按鈕組成,程序設(shè)計(jì)通常采用逐行逐列進(jìn)行掃描,4*4的矩陣鍵盤一共需要8個(gè)GPIO引腳,將控制行的引腳設(shè)置成輸出模式,控制列的引腳設(shè)置成上拉輸入模式;

先掃描第一行,那么就將PD0~PD2輸出高電平,PD3輸出低電平,記為0xF7;控制列的引腳為輸入引腳,將其和0xF7相與,如果哪一位為0,那么就證明哪一個(gè)被按下;
STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤
2、代碼

接線:4*4矩陣鍵盤,行從上至下依此接B5、B6、B7、B8;列從左至右依此接A1、A2、A3、A4;
按鍵從左至右,從上至下,依此編號(hào)為1、2、3、… 、16

STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

Key.h

#ifndef __KEY_H
#define __KEY_H

#include "stm32f10x.h"

void delay_us(uint32_t delay_us);
void delay_ms(uint16_t delay_ms);

void KEY_GPIO_Config(void);
int scan(void);

#endif

Key.c

#include "Key.h"

void KEY_GPIO_Config(void)
{
	//定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//開啟GPIOA、GPIOB的外設(shè)時(shí)鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
	
	///控制行
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	///讀取列
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
}

int scan(void)
{
	uint8_t flag = 1;
	
	//掃描第一行
	GPIO_ResetBits(GPIOB,GPIO_Pin_5);
	GPIO_SetBits(GPIOB,GPIO_Pin_6);
	GPIO_SetBits(GPIOB,GPIO_Pin_7);
	GPIO_SetBits(GPIOB,GPIO_Pin_8);
	
	//掃描第一列
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
		if(flag == 0) {
			flag = 1;
			return 1;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
		if(flag == 0) {
			flag = 1;
			return 2;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
		if(flag == 0) {
			flag = 1;
			return 3;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
		if(flag == 0) {
			flag = 1;
			return 4;
		}
	}
	
	//掃描第二行
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
	GPIO_ResetBits(GPIOB,GPIO_Pin_6);
	GPIO_SetBits(GPIOB,GPIO_Pin_7);
	GPIO_SetBits(GPIOB,GPIO_Pin_8);
	
	//掃描第二列
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
		if(flag == 0) {
			flag = 1;
			return 5;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
		if(flag == 0) {
			flag = 1;
			return 6;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
		if(flag == 0) {
			flag = 1;
			return 7;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
		if(flag == 0) {
			flag = 1;
			return 8;
		}
	}
	
	//掃描第三行
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
	GPIO_SetBits(GPIOB,GPIO_Pin_6);
	GPIO_ResetBits(GPIOB,GPIO_Pin_7);
	GPIO_SetBits(GPIOB,GPIO_Pin_8);
	
	//掃描第三列
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
		if(flag == 0) {
			flag = 1;
			return 9;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
		if(flag == 0) {
			flag = 1;
			return 10;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
		if(flag == 0) {
			flag = 1;
			return 11;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
		if(flag == 0) {
			flag = 1;
			return 12;
		}
	}
	
	//掃描第四行
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
	GPIO_SetBits(GPIOB,GPIO_Pin_6);
	GPIO_ResetBits(GPIOB,GPIO_Pin_7);
	GPIO_SetBits(GPIOB,GPIO_Pin_8);
	
	//掃描第四列
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);
		if(flag == 0) {
			flag = 1;
			return 13;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
		if(flag == 0) {
			flag = 1;
			return 14;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);
		if(flag == 0) {
			flag = 1;
			return 15;
		}
	}
	flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
	if(flag == 0) {
		delay_ms(200);
		flag = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4);
		if(flag == 0) {
			flag = 1;
			return 16;
		}
	}
	
	return -1;
}
  • STM32用GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)讀取GPIO引腳的電平(配置為輸入模式);
  • 一般檢測(cè)到低電平后延時(shí)一會(huì)再次檢測(cè),是常見的消抖手段,防止誤觸;
    STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤

main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-498514.html

#include "stm32f10x.h"
#include "Key.h"

int main(void)
{
	KEY_GPIO_Config();
	while(1)
	{
		switch(scan())
		{
			case 1:
				break;
			case 2:
				break;
			case 3:
				break;
			case 4:
				break;
			case 5:
				break;
			case 6:
				break;
			case 7:
				break;
			case 8:
				break;
			case 9:
				break;
			case 10:
				break;
			case 11:
				break;
			case 12:
				break;
			case 13:
				break;
			case 14:
				break;
			case 15:
				break;
			case 16:
				break;
		}
		
	}
	
}

到了這里,關(guān)于STM32單片機(jī)學(xué)習(xí)3--STM32控制鍵盤的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Proteus仿真】【STM32單片機(jī)】智能窗簾控制系統(tǒng)設(shè)計(jì)

    【Proteus仿真】【STM32單片機(jī)】智能窗簾控制系統(tǒng)設(shè)計(jì)

    本項(xiàng)目使用Proteus8仿真STM32單片機(jī)控制器,使用LCD1602顯示模塊、按鍵模塊、HC05藍(lán)牙、DHT11溫濕度、PCF8591 ADC模塊、光線傳感器、28BYJ48步進(jìn)電機(jī)等。 主要功能: 系統(tǒng)運(yùn)行后,LCD1602顯示溫濕度和光線強(qiáng)度值和系統(tǒng)模式狀態(tài)。 系統(tǒng)模式以自動(dòng)模式運(yùn)行,當(dāng)按下K4鍵切換為手動(dòng)模式

    2023年04月24日
    瀏覽(23)
  • 【STM32單片機(jī)】STM32控制SG90舵機(jī)的PWM部分參數(shù)的設(shè)置解答

    【STM32單片機(jī)】STM32控制SG90舵機(jī)的PWM部分參數(shù)的設(shè)置解答

    我們要知道,SG90舵機(jī)接收的PWM信號(hào)的參數(shù):f=50Hz,T=1/f,所以周期為20ms。 當(dāng)高電平的脈寬在0.5ms-2.5ms之間時(shí)舵機(jī)就可以對(duì)應(yīng)旋轉(zhuǎn)到不同的角度。 換句話說,我們要用單片機(jī)產(chǎn)生一個(gè) 周期(20ms) 的PWM波,然后獲得對(duì)應(yīng)這些時(shí)長(zhǎng)(分別是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高電

    2024年02月13日
    瀏覽(24)
  • 【Proteus仿真】【STM32單片機(jī)】交通燈控制系統(tǒng)設(shè)計(jì)

    【Proteus仿真】【STM32單片機(jī)】交通燈控制系統(tǒng)設(shè)計(jì)

    本項(xiàng)目使用Proteus8仿真STM32單片機(jī)控制器,使用數(shù)碼管、按鍵、交通信號(hào)燈模塊等。 系統(tǒng)運(yùn)行后,交通燈系統(tǒng)開始運(yùn)行,數(shù)碼管顯示初始時(shí)間,默認(rèn)南北綠燈5S,東西紅燈8S,綠燈過后南北黃燈3秒;然后切換東西綠燈5S,南北紅燈8S,綠燈過后南北黃燈3秒;如此循環(huán)。 可使用

    2024年02月11日
    瀏覽(21)
  • STM32單片機(jī)語(yǔ)音識(shí)別臺(tái)燈控制系統(tǒng)人檢測(cè)亮度調(diào)節(jié)
  • stm32單片機(jī)開關(guān)控制LED燈(中斷方式)(proteus電路圖)

    stm32單片機(jī)開關(guān)控制LED燈(中斷方式)(proteus電路圖)

    ? 補(bǔ)充一點(diǎn):拼多多上面LED額定電流20mA,額定電壓2V,額定電阻100歐姆,后邊這個(gè)是STM32 如果只是用面包板做實(shí)驗(yàn),輸入輸出都不是很多,就直接用灌電流的方式把LED直接接到STM32了,即使是設(shè)計(jì)產(chǎn)品,如果能夠直接接,那么肯定也是不會(huì)浪費(fèi)錢去買額外的原件的,所以只有

    2024年02月11日
    瀏覽(28)
  • 單片機(jī)畢設(shè) STM32智能飲水機(jī)控制系統(tǒng)(源碼+硬件+論文)

    單片機(jī)畢設(shè) STM32智能飲水機(jī)控制系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月11日
    瀏覽(19)
  • 【Proteus仿真】【STM32單片機(jī)】蔬菜大棚溫濕度控制系統(tǒng)設(shè)計(jì)

    【Proteus仿真】【STM32單片機(jī)】蔬菜大棚溫濕度控制系統(tǒng)設(shè)計(jì)

    本項(xiàng)目使用Proteus8仿真STM32單片機(jī)控制器,使用LCD1602液晶、DHT11溫濕度、蜂鳴器、按鍵、LED、繼電器、電機(jī)模塊等。 主要功能: 系統(tǒng)運(yùn)行后,LCD1602顯示DHT11溫濕度采集值, 當(dāng)按下K3鍵進(jìn)入閾值設(shè)置,第一次進(jìn)入溫度上限, 第二次進(jìn)入溫度下限,第三次進(jìn)入濕度上限, 第四次

    2023年04月08日
    瀏覽(11)
  • JDY-31藍(lán)牙模塊遠(yuǎn)程控制STM32F103單片機(jī)

    JDY-31藍(lán)牙模塊遠(yuǎn)程控制STM32F103單片機(jī)

    ? ?手機(jī)app通過藍(lán)牙模塊發(fā)送指令實(shí)時(shí)控制單片機(jī)的外設(shè)功能,比如發(fā)送衣柜開關(guān)門指令(舵機(jī)旋轉(zhuǎn)),衣架上升降落(步進(jìn)電機(jī)正轉(zhuǎn)反轉(zhuǎn)),遠(yuǎn)程開啟去污除濕功能(繼電器控制打開關(guān)閉小風(fēng)扇+加熱片)。 本次例子:手機(jī)APP連接藍(lán)牙模塊遠(yuǎn)程控制SG90舵機(jī)正轉(zhuǎn)(0-180°)和反

    2024年02月01日
    瀏覽(33)
  • stm32F103單片機(jī)pwm控制伺服驅(qū)動(dòng)器進(jìn)而控制步進(jìn)電機(jī)

    stm32F103單片機(jī)pwm控制伺服驅(qū)動(dòng)器進(jìn)而控制步進(jìn)電機(jī)

    1.需要一臺(tái)步進(jìn)電機(jī),私服驅(qū)動(dòng)器,stm32單片機(jī);先按照說明文檔,連接好硬件相關(guān)線路,對(duì)應(yīng)好sign+,sign-,puls+,puls-線路,其中sign只是個(gè)io口拉高拉低操作,puls是pwm波形輸出口,雖然有兩根線,但只是需要控制一個(gè)IO口輸出波形即可; 采用主從模式,TIM1為主定時(shí)器,tim3未從定

    2024年02月04日
    瀏覽(22)
  • STM32單片機(jī)直流電機(jī)PID速度控制正反轉(zhuǎn)控制(霍爾磁鐵測(cè)速)LCD1602

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包