單片機學習(五)LCD1602和矩陣鍵盤的使用


LCD1602的使用

首先LCD1602是外接在開發板上的液晶屏外設,如圖所示:

我們主要使用它來代替動態數碼管進行顯示,因此使用的原理我們可以先略過,而控制它可以使用b站up主提供的驅動程序,即我們只需調用第三方庫即可實現對LCD1602的控制了。
(b站對應視頻鏈接:https://www.bilibili.com/video/BV1Mb411e7re,可以在視頻下方找到對應的驅動程序資源)

up主提供的驅動程序包括以下的接口:
在這里插入圖片描述
在使用LCD進行顯示之前我們需要先使用LCD_Init()進行初始化,然后如上圖所示,我們可以使用LCD來顯示字符、字符串、數字的二進制顯示、十六進制顯示等等。

因此我們先打印一下遲來的“Hello World”。

int main() {
    LCD_Init();
    LCD_ShowString(1,1,"Hello World");
    while (1);
}

運行結果:

矩陣鍵盤的使用

矩陣鍵盤相關電路圖

按鍵檢測掃描

在默認沒有按鍵按下的情況下P1的7個引腳都會是高電平,這樣假設P1[3...0]=0b1110,即使P1^0置為0,此時S4,S8,S12,S16的右邊一端的電位都會變成0,此時若我們單擊S4按鈕,則S4所連接的另一端P1^7的電位也會變為0,此時即可判斷S4按鈕被按下了。因此我們的掃描過程可以描述如下:

for lowPart in [0111, 1011, 1101, 1110]:
	P1的低四位 = lowPart
	for i=1 to 4:
		if P1的第i位(從左到右數)為 0:
			此時即可判斷是某按鍵按下,進行相應的操作

因此代碼實現為:

u8 MatrixKey() {
    u8 keyNum = 0;
    u8 i,j;
    u8 highCheck;
    for(j=0;j<4;j++) {
        P1 = 0xff;
        // 設置P1的低4位
        P1 &= ~(0x08>>j);
        highCheck = 0x80; //1000 0000
        for(i=0;i<4;i++) {
            // 檢查高4位有沒有0,若有則說明按鍵按下
            if ((highCheck & P1) ==0) {
                deley(1000);
                while ((highCheck & P1) ==0);
                deley(1000);
                keyNum = i*4+j+1;
            }
            highCheck>>=1;
        }
    }
    return keyNum;
}

這樣當我們按動某個按鍵時就會返回對應的按鍵編號了。

制作密碼輸入器

#define BACKSPACE 15
#define REINPUT 16

int main() {
    char passWord[20];
    u8 i=0;
    LCD_Init();
    
    passWord[0] = '\0';
    LCD_ShowString(1,1,passWord);
    while (1) {
        u8 res = MatrixKey();
        if (res!=0) {
            if (res == REINPUT) {
            	// 若為按鍵16則代表清空並重新輸入
                LCD_Init();
                passWord[0] = '\0';
                i=0;
            }
            else if(res == BACKSPACE) {
            	// 若為按鍵15則代表刪除最后一個字符,即退格
                LCD_ShowString(1,i," ");
                i--;
                passWord[i] = '\0';
            }
            else {
            	// 其余情況則添加一個字符並顯示出來
                passWord[i++]=res+'0';
                passWord[i] = '\0';
                LCD_ShowString(1,1,passWord);
            }

        }
    }
}

運行效果:
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM