1. 程式人生 > >STM32F407實現矩陣鍵盤程式

STM32F407實現矩陣鍵盤程式

由於最近在做一個有關按鍵的專案,有用到矩陣鍵盤,因為網上有關矩陣鍵盤的程式很少,所以我就自己寫一個發上去供大家參考,該程式所用到的GPIO口是PD0--PD7,至於矩陣鍵盤的原理就不一一描述了,直接上程式,具體程式如下:

//GPIO初始化函式
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructuress;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOA, ENABLE);           //開啟時鐘               
 GPIO_InitStructuress.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;  //初始化PD0-PD3
 GPIO_InitStructuress.GPIO_Mode = GPIO_Mode_OUT ;      
 GPIO_InitStructuress.GPIO_OType = GPIO_OType_PP;                                             //設定為推輓輸出
 GPIO_InitStructuress.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructuress.GPIO_PuPd =GPIO_PuPd_UP;                                                   //上拉
 GPIO_Init(GPIOD, &GPIO_InitStructuress); 
 GPIO_InitStructuress.GPIO_Pin =GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;    //初始化PD4-PD7
 GPIO_InitStructuress.GPIO_Mode =GPIO_Mode_OUT ;
 GPIO_InitStructuress.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructuress.GPIO_PuPd = GPIO_PuPd_DOWN ;//Ï下拉
 GPIO_Init(GPIOD, &GPIO_InitStructuress); 
 GPIO_SetBits( GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
 GPIO_ResetBits( GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
//按鍵函式
extern void Keyspress()
{
int KeyValue;
int y=0;
int f=5;
while(f)
{
   if((GPIO_ReadInputData(GPIOD)&0xff)!=0x0f) 
{ 
   Delay10ms(20);
 if((GPIO_ReadInputData(GPIOD)&0xff)!=0x0f) 
{ 
   GPIO_SetBits(GPIOD,GPIO_Pin_0); 

   GPIO_ResetBits(GPIOD,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

   switch(GPIO_ReadInputData(GPIOD)&0xff)
              { 
                case 0x11:KeyValue=12;break; 
 
                case 0x21:KeyValue=13;break; 
 
                case 0x41:KeyValue=14;break; 
 
                case 0x81:KeyValue=15;break;
               } 
                GPIO_SetBits(GPIOD,GPIO_Pin_1);
 
                GPIO_ResetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
 
                 switch(GPIO_ReadInputData(GPIOD)&0xff)
               { 
                 case 0x12:KeyValue=8;break;
 
                 case 0x22:KeyValue=9;break; 
 
 
                 case 0x42:KeyValue=10;break;
 
                 case 0x82:KeyValue=11;break; 
 
                } 
                 GPIO_SetBits(GPIOD,GPIO_Pin_2); 


                 GPIO_ResetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);


                  switch(GPIO_ReadInputData(GPIOD)&0xff)
                   { 
                    case 0x14:KeyValue=4;break;
 
                    case 0x24:KeyValue=5;break;
 
                    case 0x44:KeyValue=6;break;
 
                    case 0x84:KeyValue=7;break;
                   } 
                    GPIO_SetBits(GPIOD,GPIO_Pin_3); 
 
                    GPIO_ResetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
                                              
                   switch(GPIO_ReadInputData(GPIOD)&0xff)
                    {
                     case 0x18:KeyValue=0;break;

                     case 0x28:KeyValue=1;break; 

                     case 0x48:KeyValue=2;break;

                     case 0x88:KeyValue=3;break;
                     } 
                   GPIO_SetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2 |GPIO_Pin_3); 
                   GPIO_ResetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |GPIO_Pin_7);
                   while((GPIO_ReadInputData(GPIOD)&0xff)!=0x0f);
                   switch(KeyValue) 
                     { 
                        case 0:f=3;break;
                        case 1:f=3;break;
                        case 2:f=3;break;
                        case 4: f=3;break;
                        case 5: f=3;break;
                        case 6: f=3;break;
                        case 8:f=3;break;
                        case 9: f=3;break;
                        case 10: f=3; break;
                        case 12:  f=3;break;
                        case 13:  f=3;break;//由於專案只用到12個按鍵,所以有4個按鍵的掃描程式是沒有的

                    }

            }  
      }
  } 
}
//主函式:
int main
{
    GPIO_Configuration();

    Keyspress();
}


相關推薦

STM32F407實現矩陣鍵盤程式

由於最近在做一個有關按鍵的專案,有用到矩陣鍵盤,因為網上有關矩陣鍵盤的程式很少,所以我就自己寫一個發上去供大家參考,該程式所用到的GPIO口是PD0--PD7,至於矩陣鍵盤的原理就不一一描述了,直接上程式,具體程式如下: //GPIO初始化函式 void GPIO_Con

基於STM32L151//STM32F407矩陣鍵盤程式(不規則介面):

void KeyPress(void){           int KeyValues;    while(1)  {   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)||GPIO_

51單片機實現矩陣鍵盤行掃描

order 方式 [] image 51單片機 char borde 矩陣鍵盤 結果 ———————————————————————————————————————————— 分類: 按結構原理分: 觸點式開關按鍵 無觸點開關按鍵 接入方式 獨立式

VHDL實現矩陣鍵盤檢測

矩陣鍵盤相比獨立鍵盤,其實就是起到節約IO口的作用,尤其在需要多個按鍵的時候。原理圖(摘自其他地方): 比如0鍵,沒按下時,ROW0因為上拉而為高電平。當0按下時,如果此時COL0為低電平,則ROW

MPI實現矩陣乘法程式--實現MPI傳遞連續陣列

怎麼樣用用MPI編寫兩個n階的方陣A和B的相乘程式,結果存放在方陣C中,A、B和C都在節點0中呢? //#include<stdio.h> //#include<math.h> //#pragma comment(lib,"mpi.lib") #

【按鍵】短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動)--- 矩陣鍵盤

請先閱讀上篇: 短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動) 上面的程式適用於單個按鍵,那是不是也可以適用於矩陣鍵盤呢? 答案是肯定的。 接下來在這裡做一個簡單的擴充套件,具體框架不用改變,所以具體的框架內容和思路在這裡不詳述了,自行參考上篇文章,這裡就說說擴充套件

51微控制器(AT89C52)矩陣鍵盤檢測程式

矩陣鍵盤檢測思路:行線設為輸出、列線設為輸入獲得列碼,行線設為輸入、列線設為輸出獲得行碼,由行列碼確定鍵值。 本程式可改進的地方:按鍵狀態機中,將等待按鍵釋放語句移到第三個狀態中,可進一步提高按鍵掃描程式效率。 #include<reg52.h> #define

4X4矩陣鍵盤掃描程式

4X4矩陣鍵盤掃描: 1. 4根行線的GIO均設為Output,根列線的GIO均設為Input; 2. 4根行線的GIO分別置為0111、1011、1101、1110,讀逐一讀取列線GIO的值,可確定是哪一個按鍵; 電路圖如下: 注意: 1. 圖中用作輸入的GIO,一

樹莓派的矩陣鍵盤掃描程式,python開發

樹莓派可以很方便的拓展矩陣鍵盤用做人機互動,今天教大家如何驅動4*4矩陣鍵盤。 先貼上程式碼: import time class keypad(object):KEYPAD=[['1','2','3','*'],['4','5','6','#'],['7','8','9

編寫程式實現使用鍵盤上的上下左右箭頭控制介面上圖片的移動。

//MyFrame.java import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.Icon; import javax.swing.ImageIcon;

單片機入門-矩陣鍵盤控制數碼管顯示

矩陣 right 控制 入門 i/o num .cn mar oid 任務簡述:通過按下4X4矩陣鍵盤實現數碼管對應顯示數字 實現方式:通過行列分接法,可以節省使用單片機的I/O口,掃描矩陣鍵盤是否有按下,判斷P2端口得到的值。 protues 硬件系統 單片機晶振復位電

疑問----單片機矩陣鍵盤行列反轉掃描法

inux png src 網上 target nbsp 檢測 開發板 col 學到矩陣鍵盤這一塊對網上別人寫的C代碼有些疑問,希望有能看到的大牛幫助解答。 矩陣鍵盤和獨立鍵盤原理圖: 原理:對於圖右側的矩陣鍵盤,把P3口的低四位(P3.0 ~ P3.3)和高四位(P3

Oracle使用SQL實現矩陣轉置

row 多人 遇到 數據 number decode 分享 展示 mode 在使用數據庫使用報表時,往往會遇到矩陣轉置。這個需求在Excel是很容易實現的,但很多人都不知道怎麽用Oracle數據庫實現,下面給大家展示幾種使用SQL實現的方法。 需求:表1轉置成表2 測試數

java實現矩陣基本運算

+= asi return sta pack res ret matrix n) 1 package Math; 2 3 /** 4 * 矩陣基本運算 5 * @author woyouyihujiu 6 * 7 */ 8 pu

分治法實現矩陣乘法

name cout namespace size cas put 分治 ade add 整體的思路就是分,加&乘,拼 #include <iostream> #include <cstddef> #include <cstdlib&g

40.多線程實現矩陣相乘

分享圖片 num res 運行時 矩陣 for 統計 span fine 單線程運行時間: 多線程運行時間; 代碼: 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <pr

[Python Study Notes]實現鍵盤控制與監控

實現 博客 pac rip art 字符串 line 一個 sys ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ >

矩陣應用實例及js實現矩陣轉置算法

seda 返回 轉化 表示 矩陣轉置 sta 圖片 EDA 矩陣的轉置 場景: 後端返回的是[[‘2015-1-1’,1,1],[‘2015-1-2’,1,2]]這樣的Json數組,代表的意思是2015-1-1這個日期下新增的數據為1,減少的數據為1,2015-1-2這個日

TensorFlow實現遷移學習程式除錯問題彙總

1ValueError: The specified path: inception_v3.ckpt is a file. Please specify only the path prefix to the checkpoint files. 問題描述:模型放在程式的同一檔案路徑中,但是就

TCP實現簡單聊天程式

  上次我們通過UDP來實現了簡單的聊天程式,這次我們用TCP協議來實現,TCP和UDP不同的是TCP需要建立連線。 //這是一個通過TCP協議來實現聊天的程式 //1.建立socket //2.為socket繫結地址 //3.向服務端傳送連結請求 //4.傳送資料 //