關於STM32F103型號的矩陣按鍵的程式書寫
最近參加電子大賽要寫一個矩陣按鍵,剛開始寫了好長時間換了好幾個矩陣按鍵都不好使,但是 我感覺我的程式和原理都沒有錯,除錯了好久也沒有發現問題在哪?我按照我自己的思路把程式重寫了一遍bug消失了,程式很好的執行。程式貼出來,紀念一下。
#include "keypad.h" #include "stm32f10x.h" #include "delay.h" /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /*本檔案是矩陣按鍵功能檔案,使用方法是:直接調KEYPAD_Scan函式得到一個返回值*/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ //函式名:KEYPad_Init1 //引數:無 //功能:行檢測初始化 //返回值;無 void KEYPad_Init1(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//開啟時鐘,使能GPIOB時鐘 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入 B0-B3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉輸入 B4-B7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF, &GPIO_InitStructure); } //函式名:KEYPad_Init2 //引數:無 //功能:列檢測初始化 //返回值:無 void KEYPad_Init2(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//開啟時鐘,使能GPIOB時鐘 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉輸入 B0-B3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入 B4-B7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOF, &GPIO_InitStructure); } //函式名:掃描函式 //入口引數:無 //返回值:鍵值 //功能:矩陣按鍵掃描,返回一個鍵值 u16 KEYPAD_Scan() { static u16 keyvalue = 0; u32 readvalue = 0; KEYPad_Init1(); readvalue = GPIO_ReadInputData(GPIOF); readvalue &= 0x00ff; //return readvalue; if(readvalue != 0x000f) { delay_ms(8);//消抖10ms if(readvalue != 0x000f) { readvalue = GPIO_ReadInputData(GPIOF);//再次讀取狀態 readvalue &= 0x00ff; //return readvalue; switch(readvalue) { case (0x001f):keyvalue = 0;break; case (0x002f):keyvalue = 1;break; case (0x004f):keyvalue = 2;break; case (0x008f):keyvalue = 3;break; } //return readvalue; KEYPad_Init2(); delay_ms(5); readvalue = GPIO_ReadInputData(GPIOF);//再次讀取狀態 readvalue |= 0x00f0; readvalue &= 0x00ff; //return readvalue; switch(readvalue) { case (0x00f1):keyvalue += 0;break; case (0x00f2):keyvalue += 4;break; case (0x00f4):keyvalue += 8;break; case (0x00f8):keyvalue += 12;break; } while(readvalue != 0x00f0)//檢測按鍵鬆開 { readvalue = GPIO_ReadInputData(GPIOF);//再次讀取狀態 readvalue |= 0x00f0; readvalue &= 0x00ff; } //return readvalue; } } return keyvalue; }
相關推薦
關於STM32F103型號的矩陣按鍵的程式書寫
最近參加電子大賽要寫一個矩陣按鍵,剛開始寫了好長時間換了好幾個矩陣按鍵都不好使,但是 我感覺我的程式和原理都沒有錯,除錯了好久也沒有發現問題在哪?我按照我自己的思路把程式重寫了一遍bug消失了,程式很好的執行。程式貼出來,紀念一下。 #include "keypad.h"
STM32F103學習筆記(一):簡單的按鍵程式
通過幾個按鍵,來控制LED燈的開關狀態。沒有涉及到中斷,只是簡單的按鍵程式 程式包括key.c,key.h;led.c,led.h;以及main函式 一、LED程式 led.h #ifndef __LED__H #define __LED__H #include "
關於獨立按鍵與矩陣按鍵的程式(51微控制器)
發一個51微控制器的鍵盤掃描程式,演算法簡單有效 再給大家分享一個不錯按鍵程式(來自ourdev)/**************************************** 鍵盤_不採用定時
51單片機:獨立按鍵與矩陣按鍵控制數碼管
#define clas 4行 ++ 浪費 down 技術分享 sig .com 一,獨立按鍵註意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下
C51 矩陣按鍵 個人筆記
矩陣按鍵 電路 每個按鍵一端和同行一端相連(JP4的高4位),另一端和同列一端相連(JP4的低4位) 判斷按鍵是否按下: 法一:逐行掃描 for(int i = 8 ; i>3 ; i-- ) { JP4^i = 0; If ( 低四位不全為1)
曉萌最近在做一個翻轉圖片的應用,你可能也知道,圖片其實是由一個個的點組成的。於是,曉萌想先做一個可以翻轉矩陣的程式,來解決他問題的核心部分。
曉萌最近在做一個翻轉圖片的應用,你可能也知道,圖片其實是由一個個的點組成的。於是,曉萌想先做一個可以翻轉矩陣的程式,來解決他問題的核心部分。 輸入格式 輸入第一行包括由空格分開的整數 M,N,T(0<N,M<200),T 的值為 0 或 1。其中M 和 N 分別表示待
51微控制器-矩陣按鍵
1 /**************************************************************************************
關於CT107D開發板矩陣按鍵前兩列不工作問題的研究
CT107D開發板矩陣按鍵原理圖如下所示: 其中CON3的1引腳和2引腳相連構成矩陣鍵盤。 //經典矩陣按鍵處理函式 unsigned char keyProcess(void) { unsigned char keyTemp = 0; unsigned c
獨立按鍵和矩陣按鍵
我們和微控制器之間進行資訊互動,主要包含兩大類,輸入裝置和輸出裝置。前邊講的LED小燈、數碼管、點陣都是輸出裝置,這節課我們學習一下最常用的輸入裝置——按鍵。在本節課的學習過程中我們還會穿插介紹一點硬體設計的基礎知識。 8.1 微控制器最小系統電路解析
c語言程式書寫風格----空格的合理使用
程式規範的重要性: 對於許多初學者來說,敲程式碼的時候根本不知道程式的書寫還有規範這一說,如果從事程式設計師IT行業,試想一下以後工作的時候需要你敲得程式碼將會是成千上萬行,如果按照你的隨意去書寫或者不規範的方法去書寫,當軟體測試時,誰能看懂你的程式碼,就算能看懂,效率也會降低幾倍,所以每個公司
Java 程式書寫規範
Java 程式書寫規範 任何一門語言都是用來交流的,都有自己的一套書寫規範,Java 也不例外。好的命名規範可以讓你的程式更專業,更容易被別人理解,更好維護。瞭解命名規範,可以更好的學習和記憶 Java 類庫中類和函式。下面的幾個原則是編寫 Java 程式必須遵守的如果沒有非
STM32F407實現矩陣鍵盤程式
由於最近在做一個有關按鍵的專案,有用到矩陣鍵盤,因為網上有關矩陣鍵盤的程式很少,所以我就自己寫一個發上去供大家參考,該程式所用到的GPIO口是PD0--PD7,至於矩陣鍵盤的原理就不一一描述了,直接上程式,具體程式如下: //GPIO初始化函式 void GPIO_Con
51微控制器:獨立按鍵與矩陣按鍵控制數碼管
一,獨立按鍵注意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下面這段程式,就是通過一個獨立按鍵連線到p1口,控制靜態數碼管的 一段 進行亮和滅的切換。 #include &l
msm8909矩陣按鍵驅動筆記
此文章僅作本人自己筆記使用,文章結束部分有本人除錯過程,可以借鑑,由於沒有仔細排版,所以可閱讀性不高,讀者見諒! 一般按鍵驅動有兩種,一個是矩陣鍵盤驅動,一個是GPIO介面鍵盤驅動 矩陣鍵盤路徑 : kernel/driers/input/keyboard/matrix_keypad.c :一
基於STM32L151//STM32F407的矩陣鍵盤程式(不規則介面):
void KeyPress(void){ int KeyValues; while(1) { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_
arm驅動程式——按鍵程式4_poll(韋東山的視訊總結及針對linux-2.6.30)
static irqreturn_t button_irq(int irq,void *dev) { irq_dec = (struct pindec*)dev; /*修改定時器的超時時間*/ mod_timer(&second_key_timer,jiffies+HZ/100);
微控制器矩陣按鍵長短按
實習的時候,同事給了我一個矩陣鍵盤程式,竟然長達1千多行程式碼,當時我就嚇尿了。仔細分析程式碼,也未見其獨到之處,僅僅是普通的按鍵掃描以及判斷長短按。但其中使用的結構很複雜,中間產生的臨時變數特別多,而且指標很多,也不容易移植。稍微搜尋一下網上的程式,也並不是很詳盡。這裡貼
STM32按鍵程式
u8 KEY_Scan(u8 mode) { static u8 key_up=1;//按鍵按鬆開標誌 if(mode)key_up=1; //支援連按 if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1
MPI實現矩陣乘法程式--實現MPI傳遞連續陣列
怎麼樣用用MPI編寫兩個n階的方陣A和B的相乘程式,結果存放在方陣C中,A、B和C都在節點0中呢? //#include<stdio.h> //#include<math.h> //#pragma comment(lib,"mpi.lib") #
51微控制器簡潔按鍵程式
最為精闢和實用的按鍵處理程式;1.新型的按鍵掃描程式;不過我在網上游逛了很久,也看過不少源程式了,沒有;同時,這裡面用到了一些分層的思想,在微控制器當中也;以下假設你懂C語言,因為純粹的C語言描述,所以和;核心演算法:;unsignedcharTrg;;unsignedcha