国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊

這篇具有很好參考價值的文章主要介紹了【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來—小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
4X4矩陣鍵盤

是單片機外部設備中所使用的排布類似于矩陣的鍵盤組。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。由于電路設計時需要更多的外部輸入,單獨的控制一個按鍵需要浪費很多的IO資源,所以就有了矩陣鍵盤,常用的矩陣鍵盤有4X4和8X8,其中用的最多的是4X4。

工作原理

矩陣鍵盤又稱為行列式鍵盤,它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每一個交叉點上,設置一個按鍵。這樣鍵盤中按鍵的個數(shù)是4X4個。這種行列式鍵盤結(jié)構(gòu)能夠有效地提高單片機系統(tǒng)中I/O口的利用率。由于單片機IO端口具有線與的功能,因此當任意一個按鍵按下時,行和列都有一根線被線與,通過運算就可以得出按鍵的坐標從而判斷按鍵鍵值。

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
行列掃描法原理
1、使行線為編程的輸入線,列線是輸出線,拉低所有的列線,判斷行線的變化,如果有按鍵按下,按鍵按下的對應行線被拉低,否則所有的行線都為高電平。
2、在第一步判斷有鍵按下后, 延時10ms消除機械抖動,再次讀取行值,如果此行線還處于低電平狀態(tài)則進入下 一步,否則返回第一步重新判斷。
3、開始掃描按鍵位置,采用逐 行掃描,每間隔1ms的時間,分別拉低第一列,第二列,第三列,第四 列,無論拉低哪一列其他三列都為高電平,讀取行值找到按鍵的位置,分別把行值和列值儲存在寄存器里。
4、從寄存器中找到行值和列 值并把其合并,得到按鍵值,對此按鍵值進行編碼,按照從第一行第一個一直到第四行第四個逐行進行編碼,編碼值從“0000” 至“1111” , 再進行譯碼,最后顯示按鍵號碼。

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
4*4矩陣鍵盤+4位獨立按鍵+8位跑馬燈組合模塊

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
4*4矩陣鍵盤+4位獨立按鍵+8位跑馬燈組合模塊參考電原理圖

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
模塊上4*4矩陣鍵盤有一個8腳的端口,理論上可以直接插到Arduino的0-7腳上,但0,1腳用于串口通信,所以只能選擇2~13腳,這里選用了2-9腳。

Keypad Pin L1 –> Arduino Pin 2 (行)

Keypad Pin L2 –> Arduino Pin 3

Keypad Pin L3 –> Arduino Pin 4

Keypad Pin L4 –> Arduino Pin 5

Keypad Pin R1 –> Arduino Pin 6 (列)

Keypad Pin R2 –> Arduino Pin 7

Keypad Pin R3 –> Arduino Pin 8

Keypad Pin R4 –> Arduino Pin 9

測試矩陣鍵盤部分接線示意圖

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊

矩陣鍵盤所需庫文件
在Arduino IDE 1.8.10 或者以上版本中, 項目->加載庫->管理庫中搜索Keypad,然后安裝即可。
也可以下載庫(需要下載庫文件 https://github.com/Chris–A/Keypad),然后手動添加到IDE中。

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
Arduino實驗開源代碼

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

程序之一:測試矩陣鍵盤部分

*/



#include <Keypad.h>

const byte ROWS = 4;

const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {

  {'1','2','3','A'},

  {'4','5','6','B'},

  {'7','8','9','C'},

  {'*','0','#','D'}

};

byte rowPins[ROWS] = {2, 3, 4, 5};

byte colPins[COLS] = {6, 7, 8, 9};

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup(){

  Serial.begin(9600);

}

void loop(){

  char customKey = customKeypad.getKey();

  if (customKey){

  Serial.println(customKey);

  }

}

串口輸出16位矩陣鍵值

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊

程序之二:矩陣鍵盤部分測試每個按鍵的按下與松開

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

  程序之二:矩陣鍵盤部分測試每個按鍵的按下與松開

*/



#include "Adafruit_Keypad.h"

const byte ROWS = 4; // 行

const byte COLS = 4; // 列

//定義鍵盤按鈕上的符號

char hexaKeys[ROWS][COLS] = {

  {'1', '2', '3', 'A'},

  {'4', '5', '6', 'B'},

  {'7', '8', '9', 'C'},

  {'*', '0', '#', 'D'}

};

byte rowPins[ROWS] = {2, 3, 4, 5}; //連接到鍵盤的行插腳

byte colPins[COLS] = {6, 7, 8, 9}; //連接到鍵盤的列插腳

//初始化類NewKeypad的實例

Adafruit_Keypad customKeypad = Adafruit_Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {

  Serial.begin(9600);

  customKeypad.begin();

}

void loop() {

  //把你的主代碼放在這里,重復運行

  customKeypad.tick();

  while (customKeypad.available()) {

  keypadEvent e = customKeypad.read();

  Serial.print((char)e.bit.KEY);

  if (e.bit.EVENT == KEY_JUST_PRESSED) Serial.println(" pressed");

  else if (e.bit.EVENT == KEY_JUST_RELEASED) Serial.println(" released");

  }

  delay(10);

}

實驗串口返回情況

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
程序之三:矩陣鍵盤部分測試按鍵’*'和 '#'控制LED燈(板載13腳)

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

  程序之三:矩陣鍵盤部分測試按鍵'*'和 '#'控制LED燈(板載13腳)

*/



#include <Keypad.h>

const byte ROWS = 4; //四行

const byte COLS = 3; //三列

//定義鍵盤按鈕上的符號

char keys[ROWS][COLS] = {

  {'1', '2', '3'},

  {'4', '5', '6'},

  {'7', '8', '9'},

  {'*', '0', '#'}

};

byte rowPins[ROWS] = {2, 3, 4, 5}; //連接到鍵盤的行插腳

byte colPins[COLS] = {6, 7, 8};  //連接到鍵盤的列插腳

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

byte ledPin = 13;

boolean blink = false;

boolean ledPin_state;

void setup() {

  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);          // 將數(shù)字管腳設置為輸出

  digitalWrite(ledPin, HIGH);        // 打開LED

  ledPin_state = digitalRead(ledPin);  // 存儲初始LED狀態(tài)。當LED亮起時為高

  keypad.addEventListener(keypadEvent); // 為此鍵盤添加事件偵聽器

}

void loop() {

  char key = keypad.getKey();

  if (key) {

  Serial.println(key);

  }

  if (blink) {

  digitalWrite(ledPin, !digitalRead(ledPin));  // 將LED引腳從Hi2Lo或Lo2Hi更改

  delay(100);

  }

}

// 處理一些特殊事件

void keypadEvent(KeypadEvent key) {

  switch (keypad.getState()) {

  case PRESSED:

    if (key == '#') {

      digitalWrite(ledPin, !digitalRead(ledPin));

      ledPin_state = digitalRead(ledPin);      // 記住LED狀態(tài),亮或不亮

    }

    break;

  case RELEASED:

    if (key == '*') {

      digitalWrite(ledPin, ledPin_state);  // 從開始閃爍前恢復LED狀態(tài)

      blink = false;

    }

    break;

  case HOLD:

    if (key == '*') {

      blink = true;  // 按住*鍵時,LED閃爍

    }

    break;

  }

}

'#‘鍵控制LED燈自鎖開關,’*'鍵按下時LED閃爍,松開熄滅

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
測試跑馬燈部分接線示意圖

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
程序之四:測試跑馬燈部分,循環(huán)逐個點亮,逐個熄滅

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

  程序之四:測試跑馬燈部分,循環(huán)逐個點亮,逐個熄滅

*/



int BASE = 6 ;

int NUM = 8;

void setup(){

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  pinMode(i, OUTPUT);

  }

}

void loop(){

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  digitalWrite(i, LOW);

  delay(200);

  }

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  digitalWrite(i, HIGH);

  delay(200);

  }

}

Arduino實驗場景圖

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
程序之五:測試跑馬燈部分,循環(huán)單個熄滅

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

  程序之五:測試跑馬燈部分,循環(huán)單個熄滅

*/



byte ledPin[] = {6, 7, 8, 9, 10, 11, 12, 13};

int ledDelay(300);

int direction = 1;

int currentLED = 0;

unsigned long changeTime;

void setup() {

  for (int x = 0; x <= 7; x++)

  pinMode(ledPin[x], OUTPUT); //數(shù)組從0開始分配存儲單元,這里要非常注意循環(huán)變量的初值和終值,0-7剛好循環(huán)至8

  changeTime = millis();

}

void loop() {

  if ((millis() - changeTime) > ledDelay)

  { changeLED(); //運行時間如果超過一個數(shù)量的延時時間,則由函數(shù)changeLED()控制LED點亮的變化

  changeTime = millis();

  }

}

void changeLED() {

  for (int x = 0; x <= 7; x++)

  { digitalWrite(ledPin[x], LOW); //8只LED燈低平信號,熄滅

  }

  digitalWrite(ledPin[currentLED], HIGH); //設當前LED高平信號,點亮

  currentLED += direction; //當前值增加為direction表示的值

  if (currentLED == 7) {

  direction = -1; //當前燈為第8只燈,currentLED當前值改為-1,改變亮燈方向

  }

  if (currentLED == 0) {

  direction = 1; //當前燈為第1只燈,currentLED當前值為+1,從第1只燈開始計數(shù)

  }

}

測試獨立按鍵部分+跑馬燈部分

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊
程序之六:測試獨立按鍵部分+跑馬燈部分,按鍵控制跑馬燈

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗一百三十一:YL-004老款20按鍵獨立鍵盤 跑馬燈矩陣鍵盤模塊

  程序之六:測試獨立按鍵部分+跑馬燈部分,按鍵控制跑馬燈

*/



int buttonPin = 2 ;  // 定義按鍵引腳

int BASE = 6;      // 定義第一個LED引腳

int NUM = 8;      // LED 的總數(shù)

int val;

void setup()

{

  Serial.begin(9600);

  pinMode(buttonPin, INPUT);

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  pinMode(i, OUTPUT);  // 設定LED引腳為輸出引腳

  }

}

void loop()

{

  liangdeng();        // 循環(huán)亮燈子程序

  delay(200);        // 每次循環(huán)間隔時間

  miedeng();          // LED全滅子程序

}

void liangdeng()

{

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  digitalWrite(i, LOW);  //設定LED引腳逐個輸出高電平逐個點亮

  val = digitalRead(buttonPin);  // 儲存按鍵變換量

  if (val == HIGH)      //判斷是否按下按鍵,弱已按下按鍵跳出當前循環(huán)

  {

    val = HIGH;

    break;

  }

  delay(200);      //延時

  }

}

void miedeng()

{

  for (int i = BASE; i < BASE + NUM; i ++)

  {

  digitalWrite(i, HIGH);  //設定LED引腳逐個輸出低電平逐個點亮

  }

}

實驗開源圖形編程(Mind+、編玩邊學)

【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊

實驗開源仿真編程(Linkboy V4.62)
【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊文章來源地址http://www.zghlxwxcb.cn/news/detail-513750.html

到了這里,關于【雕爺學編程】Arduino動手做(131)---跑馬燈矩陣鍵盤模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【雕爺學編程】Arduino動手做(90)---4X4矩陣薄膜鍵盤模塊2

    【雕爺學編程】Arduino動手做(90)---4X4矩陣薄膜鍵盤模塊2

    37款傳感器與模塊的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手試試多做實驗,不管成功與否,都會記錄下

    2024年01月17日
    瀏覽(22)
  • 【雕爺學編程】Arduino動手做(12)---霍爾磁場傳感器模塊5

    【雕爺學編程】Arduino動手做(12)---霍爾磁場傳感器模塊5

    37款傳感器與模塊的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手試試多做實驗,不管成功與否,都會記錄下

    2024年02月13日
    瀏覽(27)
  • 【雕爺學編程】Arduino動手做(181)---Maixduino AI開發(fā)板2

    【雕爺學編程】Arduino動手做(181)---Maixduino AI開發(fā)板2

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月14日
    瀏覽(26)
  • 【雕爺學編程】Arduino動手做(12)---霍爾磁場傳感器模塊2

    【雕爺學編程】Arduino動手做(12)---霍爾磁場傳感器模塊2

    37款傳感器與模塊的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手試試多做實驗,不管成功與否,都會記錄下

    2024年02月13日
    瀏覽(17)
  • 【雕爺學編程】Arduino動手做(133)---LCD1602擴展板模塊

    【雕爺學編程】Arduino動手做(133)---LCD1602擴展板模塊

    7款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)與

    2024年02月11日
    瀏覽(19)
  • 【雕爺學編程】Arduino動手做(85)---LCD1602液晶屏模塊7

    【雕爺學編程】Arduino動手做(85)---LCD1602液晶屏模塊7

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月16日
    瀏覽(21)
  • 【雕爺學編程】Arduino動手做(186)---WeMos ESP32開發(fā)板17

    【雕爺學編程】Arduino動手做(186)---WeMos ESP32開發(fā)板17

    37款傳感器與模塊的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手試試多做實驗,不管成功與否,都會記錄下

    2024年02月14日
    瀏覽(20)
  • 【雕爺學編程】Arduino動手做(172)---WeMos D1開發(fā)板模塊4

    【雕爺學編程】Arduino動手做(172)---WeMos D1開發(fā)板模塊4

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月15日
    瀏覽(21)
  • 【雕爺學編程】Arduino動手做(99)---8X32 LED點陣屏模塊2

    【雕爺學編程】Arduino動手做(99)---8X32 LED點陣屏模塊2

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月15日
    瀏覽(17)
  • 【雕爺學編程】Arduino動手做(155)---2262/2272四鍵無線遙控套件模塊

    【雕爺學編程】Arduino動手做(155)---2262/2272四鍵無線遙控套件模塊

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里準備逐一動手嘗試系列實驗,不管成功(程序走通)

    2024年02月13日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包