1.前言
本次的實驗需要用到LCD1602液晶屏,需要用到LCD1602.c 與LCD1602.h文件鏈接:
https://download.csdn.net/download/YLG_lin/86404949
1.1 實驗現(xiàn)象
使用矩陣鍵盤隨意按下按鍵,LCD1602第二行前兩位就會顯示對應按鍵按下的數(shù)字。
1.2矩陣鍵盤介紹
在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式
采用逐行或逐列的“掃描”,就可以讀出任何位置按鍵的狀態(tài)
1.3工作原理
矩陣鍵盤掃描(輸入掃描)
?? ?原理:讀取第1行(列)→讀取第2行(列) →讀取第3行(列) → ……,然后快速循環(huán)這個過程,最終實現(xiàn)所有按鍵同時檢測的效果
就以逐行掃描為例: 當給P17,P16,P15,P14賦值0111時P17被選中,讀取P13,P12,P11,P10的值判斷哪個按鍵被按下。如果S1按下了那么P13就等于0,如果S2按下了那么P12就等于0...
逐列掃描:當給P13,P12,P11,P10賦值0111時P13被選中,讀取P17,P16,P15,P14的值判斷哪個按鍵被按下。如果P17,P16,P15,P14為0111 則P17選中S1按下,如果P17,P16,P15,P14為1011,則S5按下.
注意:
文章來源:http://www.zghlxwxcb.cn/news/detail-408273.html
P15口可能會一會給高一會給低;P15口會連接到進步電機(相當于驅動器,增加電流能力的),右邊連接到BEEP; BEEF就連接到了蜂鳴器上開發(fā)板上的蜂鳴器一般為無源蜂鳴器,BEEP口以一定的頻率高低變化那么蜂鳴器就會響,所以一般采用逐列掃描。這是引腳沖突造成的,開發(fā)板那么多外設,I/O口只有那么多,所以必有很多I/O口附庸在一起,造成外設之間的干擾。文章來源地址http://www.zghlxwxcb.cn/news/detail-408273.html
?2.程序/代碼
? 2.1 MatrixKey.c
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
unsigned char MatrixKey()//如果按鍵按下不放,程序會停留在此函數(shù),松手的一瞬間,
{ //返回按鍵鍵碼,沒有按鍵按下時,返回0
unsigned char KeyNumber=0;//KeyNumber 按下按鍵的鍵碼值
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;
}
2.2 MatrixKey.h
#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__
unsigned char MatrixKey();
void Delay(unsigned int xms);
#endif
2.3 main.c
#include <REGX52.h>
#include "LCD1602.h" //包含LCD1602頭文件
#include "MatrixKey.h" //包含矩陣鍵盤頭文件
unsigned char KeyNum;
void main()
{
LCD_Init(); //LCD初始化
LCD_ShowString(1,1,"MatrixKey:"); //LCD顯示字符串
while(1)
{
KeyNum=MatrixKey(); //獲取矩陣鍵盤鍵碼
if(KeyNum) //如果有按鍵按下
{
LCD_ShowNum(2,1,KeyNum,2); //LCD顯示鍵碼
}
}
}
到了這里,關于51單片機矩陣鍵盤——LCD1602顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!