按鍵控制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ò)程
硬件部分
軟件部分
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燈。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-713905.html
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)!