久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6448|回復: 0
打印 上一主題 下一主題
收起左側(cè)

奮斗stm32開發(fā)板學習日記4—GPIO按鍵實驗

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85148 發(fā)表于 2015-7-9 01:06 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
                  這期教程重點講GPIO的按鍵實驗。
準備材料
  • 帶有按鍵的Stm32開發(fā)板一塊
  • Stm32庫函數(shù)參考,
按鍵實驗和點燈實驗其實差不多, GPIO點燈是向led的pin腳輸出高低電平, 而按鍵則是向pin口輸入高低電平。 對于按鍵有兩種輸入模式可以選擇, 一,采用上拉輸入模式,二,采用浮動浮空輸入模式,上拉輸入模式在沒有按鍵按下的時候是默認是高電平。正好符合這個要求。電路原理圖如圖所示:

本實驗采用了GPIO與RCC片上外設,因此要添加stm32f10x_gpio.h stm32f10x_rcc.h到工程模板中。
關鍵代碼
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#define ON 1
#define OFF 0
#define KEY_ON 0
#define KEY_OFF 1
void Key_GPIO_Config()     //按鍵初始化
{
GPIO_InitTypeDef GPIO_InitStructrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IPU;    //使用上拉輸入
GPIO_Init(GPIOC, &GPIO_InitStructrue);
}
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,   uint16_t GPIO_Pin)    //鍵盤掃描函數(shù)
{
      if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)   //讀取電平狀態(tài)
{
     Delay(0x7ffff);
     if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)
{
         return KEY_ON;
}
    return KEY_OFF;
}
      else
{
     return KEY_OFF;
}
}
int main()
{
Led_GPIO_Config();  // led初始化
Key_GPIO_Config();   // 按鍵初始化
GPIO_SetBits(GPIOB, GPIO_Pin_5);  //點亮led燈
while(1)
{
if(Key_Scan(GPIOC, GPIO_Pin_5) == KEY_ON)   //鍵盤掃描函數(shù)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))));    //led狀態(tài)反轉(zhuǎn)
}
}
return 0;
}
代碼分析
首先從main函數(shù)開始,Led_GPIO_Config該函數(shù)是初始化按鍵要點亮熄滅的led燈,Key_GPIO_Config函數(shù)為初始化按鍵的 GPIO口,這里要注意輸入模式為上拉輸入,接著進入鍵盤掃描函數(shù)Key_Scan, 不斷掃描該按鍵對應的pin口, 判斷其電平是否有變化。
進入該函數(shù)里面用了GPIO_ReadInputDataBit該函數(shù)來讀取pin口電平狀態(tài)。打開stm32庫函數(shù)參考手冊,

可以看到, 該函數(shù)的的返回值即為輸入端口額管腳值。注意:在按鍵中,必須要有一個防抖動的檢測。判斷按鍵是否真的被按下了。 如果真的被按下,則使led狀態(tài)反轉(zhuǎn)。
接下來我們來分析下這條語句GPIO_WriteBit(GPIOB, (BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)))); 最外層GPIO_WriteBit函數(shù)功能如圖所示,

功能為設置或清除該端口值, 還有要注意第三個參數(shù)的類型, BitAction 在代碼中追蹤下,

便可知道,這個是個枚舉類型, 這條語句的具體意思就讀取PB5的當前輸出電平,然后再用1減去讀取電平的數(shù)據(jù)狀態(tài), 相當于與當前的輸出的狀態(tài)相反。給開發(fā)板供電DC5V, 插上J-Link,將編譯好的程序下載到開發(fā)板, LED1亮,按下按鍵時, LED1熄滅。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲激情一区二区三区 | 精品99爱视频在线观看 | 成人在线免费 | 日韩精品 电影一区 亚洲 | 久久五月婷 | 在线不卡一区 | 色网站在线免费观看 | 羞视频在线观看 | 欧美日一区二区 | 亚洲欧美日韩在线一区二区 | 全免费a级毛片免费看视频免费下 | 成人午夜免费福利视频 | 成人在线一区二区 | 在线看av的网址 | 91精品国产色综合久久 | 免费一区 | 国产精品免费av | 久久男人 | 色一情一乱一伦一区二区三区 | 不卡的av在线 | 天天色av | 欧美精三区欧美精三区 | 日韩国产免费观看 | 日韩欧美在线一区 | 精品中文字幕在线 | 欧美日韩成人在线观看 | 久久国产精品一区二区三区 | 真人毛片 | 欧美一级在线视频 | 日本欧美国产在线观看 | 在线免费观看视频黄 | 亚洲狠狠 | 在线视频日韩 | 我我色综合 | 中文字幕一区二区三区四区五区 | 午夜在线免费观看视频 | 农夫在线精品视频免费观看 | 美女视频h | 天天操天天操 | 国产在线看片 | 黄色片在线免费看 |