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

【STM32】按鍵控制LED亮滅實(shí)驗(yàn)——GPIO、LED、KEY、SYS

這篇具有很好參考價(jià)值的文章主要介紹了【STM32】按鍵控制LED亮滅實(shí)驗(yàn)——GPIO、LED、KEY、SYS。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

按鍵控制LED亮滅實(shí)驗(yàn)

實(shí)驗(yàn)?zāi)康?/h3>

無(wú)鎖存時(shí):當(dāng)按下獨(dú)立按鈕時(shí)LED亮,松開(kāi)LED滅。
鎖存時(shí):當(dāng)按下獨(dú)立按鈕時(shí)LED亮,松開(kāi)LED仍亮,再按下獨(dú)立按鈕時(shí)LED熄滅。

實(shí)驗(yàn)過(guò)程

硬件部分

stm32一個(gè)按鍵控制led燈亮滅,stm32,單片機(jī),嵌入式硬件

軟件部分

1、引入頭文件

#include "stm32f10x.h" //STM32頭文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h" 

2、主函數(shù)
首先時(shí)鐘、led、按鍵初始化

int main (void)//主程序
{   u8 a; //定義變量
	//初始化程序
	RCC_Configuration(); //時(shí)鐘設(shè)置 修改需要去sys.c內(nèi)修改
	LED_Init();//LED初始化 LED連接哪個(gè)IO口、輸入輸出等修改需要去led.c內(nèi)修改

	KEY_Init();//按鍵初始化 按鍵連接哪個(gè)IO口、輸入輸出等修改需要去key.c內(nèi)修

	//主循環(huán)
	while(1){

		//示例1:無(wú)鎖存
		if(GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平 KEYPORT定義IO口組GPIOA或GPIOB,KEY1定義IO口如GPIO_Pin_0等,修改在key.h里修改
			GPIO_ResetBits(LEDPORT,LED1); //LED燈都為低電平(0) (LEDPORT定義IO口組GPIOA或GPIOB,LED1定義IO口如GPIO_Pin_0等,修改在led.h里修改
		}else{	
        	GPIO_SetBits(LEDPORT,LED1); //LED燈都為高電平(1) 
		}

		示例2:無(wú)鎖存
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(!GPIO_ReadInputDataBit(KEYPORT,KEY1))); //引腳輸出狀態(tài)取反     GPIO_ReadInputDataBit(KEYPORT,KEY1)讀key1電平,讀出輸出狀態(tài)

		示例3:有鎖存
	if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
			delay_ms(20); //延時(shí)去抖動(dòng)
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按鍵松開(kāi) 
			}
	}

		//示例4:有鎖存
//		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
//			delay_ms(20); //延時(shí)20ms去抖動(dòng)
//			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
//				//在2個(gè)LED上顯示二進(jìn)制加法
//				a++; //變量加1
//				if(a>3){ //當(dāng)變量大于3時(shí)清0
//					a=0; 
//				}
//				GPIO_Write(LEDPORT,a); //直接數(shù)值操作將變量值寫(xiě)入LED(LED在GPIOB組的PB0和PB1上)
//				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按鍵松開(kāi) 
//			}
//		}


	}
}

鎖存時(shí):當(dāng)按下獨(dú)立按鈕時(shí)LED亮,松開(kāi)LED仍亮,再按下獨(dú)立按鈕時(shí)LED熄滅。常用類(lèi)似電燈開(kāi)關(guān)。
程序:
1、讀取IO口的電平
2、延時(shí)去抖動(dòng)
3、讀取IO口電平
4、如果為高電平則進(jìn)入循環(huán),燈常亮,直至按鍵再次按下轉(zhuǎn)換電平,燈熄滅。

if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
	  	     delay_ms(20); //延時(shí)去抖動(dòng)
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //讀按鍵接口的電平
				GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按鍵松開(kāi) 
			}

GPIO_WriteBit 對(duì)單個(gè)IO口置0或1

GPIO_WriteBit(GPIOB,GPIO_Pin_3 , 0);

GPIO_SetBits 對(duì)多個(gè)IO口置0或1

GPIO_SetBits(GPIOD,GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_7);

區(qū)別
一個(gè)只能單個(gè)引腳操作
一個(gè)可對(duì)多個(gè)引腳操作
————————————————————————————————————————————————
STM32引腳輸出狀態(tài)取反方法,學(xué)習(xí)原子板時(shí),原碼LED0,LED1,用位帶操作取反狀態(tài),不習(xí)慣,從別的圖書(shū)中找到用庫(kù)函數(shù)取反方法,摘錄如下:
使用的是PB5,PE5,這兩個(gè)分別連一個(gè)LED燈。

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
GPIO_WriteBit(GPIOE,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_5)))

簡(jiǎn)釋?zhuān)?br> GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5),是輸出狀態(tài);
GPIO_WriteBit(),設(shè)置引腳值庫(kù)函數(shù)
————————————————————————————————————————————————文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713905.html

到了這里,關(guān)于【STM32】按鍵控制LED亮滅實(shí)驗(yàn)——GPIO、LED、KEY、SYS的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包