矩陣鍵盤的模塊原理圖:
功能:按下矩陣按鍵,在LCD上顯示對應的數(shù)值。
采用模塊化編程,在此只給出MatrixKey.c 和 main.c 兩部分代碼
#include <REGX52.H>
#include "Delay.h"
/*
矩陣鍵盤讀取鍵碼
按下不放,會停留在此函數(shù),松開時返回數(shù)值,不按返回零
*/
unsigned char Matrixkey()
{
unsigned char KeyNum = 0;
P1 = 0xFF;
P1_3 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 1;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 5;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 9;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 13;}
P1 = 0xFF;
P1_2 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 2;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 6;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 10;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 14;}
P1 = 0xFF;
P1_1 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 3;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 7;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 11;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 15;}
P1 = 0xFF;
P1_0 = 0;
if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 4;}
if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 8;}
if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 12;}
if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 16;}
return KeyNum;
}
這里要注意必須先判斷KeyNum是否為0,否則while不斷循環(huán)會不斷顯示0,導致看不到按下按鈕顯示的數(shù)字文章來源:http://www.zghlxwxcb.cn/news/detail-599173.html
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
unsigned char KeyNum;
void main()
{
LCD_Init();
LCD_ShowString(1, 1, "HelloWorld");
while(1)
{
KeyNum = MatrixKey();
if(KeyNum) LCD_ShowNum(2, 1, KeyNum, 2);
}
}
要利用寫好的矩陣鍵盤來制作一個密碼鎖,只需要調(diào)用MatrixKey文件來直接使用即可,以下是一個簡單的密碼鎖,還有一些bug,不過可以滿足基本需求文章來源地址http://www.zghlxwxcb.cn/news/detail-599173.html
#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) //數(shù)字
{
if(Count < 4)
{
Password *= 10;
Password += (KeyNum % 10);
Count ++; //輸入次數(shù),最多為4
}
LCD_ShowNum(2, 1, Password, 4); //更新顯示
}
if(KeyNum == 11) //確認鍵
{
if(Password == 1234) //如果等于正確密碼
{
LCD_ShowString(1, 14, "OK"); //密碼正確
Password = 0;
Count = 0;
LCD_ShowNum(2, 1, Password, 4); //更新顯示
}
else
{
LCD_ShowString(1, 14, "ERR"); //密碼錯誤
Password = 0;
Count = 0;
LCD_ShowNum(2, 1, Password, 4); //更新顯示
}
}
if(KeyNum == 12) //取消鍵
{
Password = 0;
Count = 0;
LCD_ShowNum(2, 1, Password, 4); //更新顯示
}
}
}
}
到了這里,關于51單片機學習--矩陣鍵盤、電子密碼鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!