要求:實現按鍵反轉
完整**如下:
#include "stm32f10x.h"
#define delay_time 0x3fffff
#define key_on 0
#define key_off 1
void delay(__io uint32_t ncount)
u8 key_scan(gpio_typedef* gpiox,u16 gpio_pin)
else
return key_off;
}else
return key_off;
}int main(void)
}}
分步分析**:
1.延時裝置
作用:消抖
void delay(__io uint32_t ncount)
2.檢測按鍵的狀態
利用while函式形成乙個死迴圈,不停呼叫key_scan函式,掃瞄按鍵是否被按下。
值得注意的是,這裡的key_on利用巨集定義表示0,key_off利用巨集定義表示1.
u8 key_scan(gpio_typedef* gpiox,u16 gpio_pin)
else
return key_off;
}else
return key_off;
}
3.main函式中的**分析
這裡是點亮led燈的相關**
gpio_inittypedef gpio_initstructure; /*定義乙個gpio_inittypedef型別的結構體*/
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob, enable); /*開啟gpio的外設時鐘*/
rcc_apb2periphclockcmd(rcc_apb2periph_gpiod, enable);
gpio_initstructure.gpio_pin = gpio_pin_3|gpio_pin_6|gpio_pin_5; /*選擇一控制的gpio引*/
gpio_initstructure.gpio_mode = gpio_mode_out_pp; /*設定引腳模式為通用推挽輸出*/
gpio_initstructure.gpio_speed = gpio_speed_50mhz; /*設定引腳速率為50mhz*/
gpio_init(gpiob,&gpio_initstructure); /*呼叫庫函式,初始化gpioc*/
gpio_init(gpiod, &gpio_initstructure);
4.點亮led1
gpio_setbits(gpiob, gpio_pin_5); /*點亮led1*/
5.開啟按鍵的時鐘及相關引數的設定
rcc_apb2periphclockcmd(rcc_apb2periph_gpioc, enable); /*開啟gpioc的時鐘*/
gpio_initstructure.gpio_pin = gpio_pin_2|gpio_pin_3|gpio_pin_5;
gpio_initstructure.gpio_mode = gpio_mode_ipu;
gpio_initstructure.gpio_speed = gpio_speed_10mhz;
gpio_init(gpioc, &gpio_initstructure);
6.檢查按鍵是否被按下+實現反轉
while(1)
}}
反轉實現是讀取當前的電平,然後用1減去讀出的電平資料狀態,相當於獲取乙個與當前輸出相反的狀態,再把這個相反的狀態通過函式寫入,從而實現了輸出狀態取反的功能。 STM32F4學習筆記之GPIO輸入,按鍵檢測
說明 1.當按鍵沒按下時,pc13通過4.7k電阻接到地,此時為低電平,當按鍵按下時,pc13接到3.3v的vcc,此時電平為高,可以通過將i o埠配置為輸入狀態,通過讀取i o電平的高低狀態就可以知道按鍵的狀態。pa0同理。2.電容c62,c63是硬體消抖作用,但是還有軟體消抖,即配置乙個延時函式...
STM32F4教程 第二節 GPIO之按鍵
you can t judge a tree by its bark.人不可貌相 按鍵庫函式開發 理解按鍵輸入原理圖 獲取按鍵輸入步驟 gpio key按鍵實現例程 key.c main.c 按鍵庫開發要新增庫檔案 stm32f4xx gpio.c 按鍵s1連線pa0,當按鍵s1按下時,pa0為低電...
部件舉例之磁頭上崗記(硬碟構造再揭秘之二)
強求每家硬碟廠商都走垂直整合之路不現實,但盡可能地掌握一些關鍵部件的技術卻很有必要。特別是在碟片儲存密度越來越高 磁頭尺寸越來越小,以至一度因遭遇技術瓶頸而被迫放緩單碟容量提公升速度的今天,缺乏碟片和磁頭技術儲備的硬碟廠商將會在新產品的推出上處於不利地位。邁拓 maxtor 在2001年9月將mmc...