STM32F103C8Z6按鍵掃描程序IO讀取


IO輸入的姿勢

對於IO輸入采用與IO輸出類似的姿勢

  • 1 使能時鍾
  • 2 初始化IO口
    • 2.1 定義一個初始化結構體
    • 2.2 選擇要初始化的IO口
    • 2.3 配置IO口的輸入模式
    • 2.4 調用IO口初始化函數
  • 3 讀取IO口
    GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
//配置輸入io口的示例
void LED_GPIO_Config(void)	
{
	GPIO_InitTypeDef GPIO_InitStructure;//定義一個初始化結構體
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能時鍾
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//選擇要初始化的IO口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//配置IO口的輸入模式
	GPIO_Init(GPIOA,&GPIO_InitStructure);//調用IO口初始化函數
}

關於IO輸入的模式 參考

我不太懂

  • 1 模擬輸入模式:此模式是將I/O口上的信號作為模擬信號直接輸到STM32內部的ADC上,進行采樣轉換。
  • 2 上拉輸入模式:沒有輸入信號的時候默認輸入高電平(因為有弱上拉)等同於在IO上接一個上拉電阻,當IO沒有任何連接,即懸空,那么此時我們讀該IO的電平就是高電平
  • 3 下拉輸入模式:沒有輸入信號的時候默認輸入低電平(因為有弱下拉)等同於在IO上接一個下拉電阻,當IO沒有任何連接,即懸空,那么此時我們讀該IO的電平就是低電平
  • 4 浮空輸入模式:好似浮在空中,上面用繩子一拉就上去了,下面用繩子一拉就沉下去了,輸入什么信號才是什么信號,對於浮空輸入要保證有明確的輸入信號
//這是一個與主題沒什么關系的延時函數
void Delay(__IO u32 Count)
{
  for(; Count != 0; Count--);
} 

//按鍵處理函數
//返回按鍵值
//mode:0,不支持連續按;1,支持連續按;
//0,沒有任何按鍵按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 
//4,KEY3按下 WK_UP
//注意此函數有響應優先級,KEY0>KEY1>KEY2>KEY3!!
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按鍵按松開標志
	if(mode)key_up=1;  //支持連按		  
	if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
	{
		delay_ms(10);//去抖動 
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(KEY2==0)return KEY2_PRES;
		else if(WK_UP==1)return WKUP_PRES;
	}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; 	    
 	return 0;// 無按鍵按下
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM