程序代碼
/*實現按鍵點亮紅燈,熄滅紅燈轉換,即按一下亮,再按一下滅*/
#include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_exti.h" #include "led.h" #include "key1.h" void key1(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//時鍾外設使能,因為按鍵的管腳在GPIOA的外設下,所以是配置GPIOA GPIO_InitTypeDef gpio; //定義結構體變量 gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; //配置GPIO管腳工作狀態為浮空輸入 gpio.GPIO_Pin = GPIO_Pin_0; //選擇GPIO的第0個引腳 gpio.GPIO_Speed = GPIO_Speed_50MHz; //設置管腳的速率為50MHz GPIO_Init(GPIOA,&gpio); //GPIO初始化 //點亮紅燈,此函數在LED.H文件里頭 RED_ON //定義一個記錄按鍵之前狀態的變量 pre char pre =0; while(1) { //把GPIOA_pin_0管腳的值讀取出來,也就是按鍵的狀態值,賦給states int states = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0); //如果按鍵按下,且按鍵之前的狀態值是松開的,實際上是為了避免按鍵一直按着,不能准確的判斷出LED的狀態 if(states == 0 && pre == 1) { //讀取GPIOB_pin_5管腳的狀態數據,如果它是低電平,即紅燈是點亮的 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5) == 0) { //熄滅紅燈 RED_OFF }else { //否則,亮紅燈 RED_ON } } //把當前的按鍵狀態賦給pre,作為下一次的之前狀態 pre = states; } }