一、矩陣鍵盤的使用
1、在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式 采用逐行或主列的“掃描”,就可以讀出任何位置按鍵的狀態(tài)(掃描快速)
2、原理圖
3、 掃描的區(qū)分
數(shù)碼管通過快速循環(huán)不同位數(shù),實現(xiàn)數(shù)碼管同時顯示的效果,而矩陣鍵盤通過快速循環(huán)不同列與行實現(xiàn)所有按鍵同時檢測。
優(yōu)點:節(jié)省IO口
二、代碼的實現(xiàn)
1、對于鍵盤而言 有
#include <REGX52.H>
#include "Delay.h"
/**
* @brief 矩陣鍵盤讀取按鍵鍵碼
* @param 無
* @retval KeyNumber 按下按鍵的鍵碼值
如果按鍵按下不放,程序會停留在此函數(shù),松手的一瞬間,返回按鍵鍵碼,沒有按鍵按下時,返回0
*/
unsigned char MatrixKey()
{
unsigned char KeyNumber=0;
P1=0xFF;
P1_3=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
P1=0xFF;
P1_2=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
P1=0xFF;
P1_1=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
P1=0xFF;
P1_0=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
return KeyNumber;
}
首先將P1所有的端口置1,對其進行每一列的掃描,先對P3置0,當按下對應的按鍵時,再松開的時候,會產(chǎn)生低電平0,此刻存在著一個松手檢測,當松開手之后,才顯示對應的數(shù)字。
三、制作簡單的電子密碼鎖
1、先上代碼
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
unsigned char KeyNum;
unsigned int Password,Count;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Password:");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if(KeyNum<=10) //如果S1~S10按鍵按下,輸入密碼
{
if(Count<4) //如果輸入次數(shù)小于4
{
Password*=10; //密碼左移一位
Password+=KeyNum%10; //獲取一位密碼
Count++; //計次加一
}
LCD_ShowNum(2,1,Password,4); //更新顯示
}
if(KeyNum==11) //如果S11按鍵按下,確認
{
if(Password==2345) //如果密碼等于正確密碼
{
LCD_ShowString(1,14,"OK "); //顯示OK
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
else //否則
{
LCD_ShowString(1,14,"ERR"); //顯示ERR
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}
if(KeyNum==12) //如果S12按鍵按下,取消
{
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}
}
}
2、總結(jié)文章來源:http://www.zghlxwxcb.cn/news/detail-567638.html
密碼鎖的主要難點在于如何輸入采集密碼 對于密碼而言 當我們按下對應的數(shù)字后 所顯示的是我們所輸入數(shù)的和 關(guān)鍵在于%和*的理解 取余只能得到末尾 因此合理的得到了密碼序列文章來源地址http://www.zghlxwxcb.cn/news/detail-567638.html
到了這里,關(guān)于51單片機入門教程__矩陣鍵盤的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!