51单片机利用e1的4*4矩阵键盘和a3区的lcd1602构成简单的按键输入系统,实现对矩阵键盘的扫描,并利用lcd1602显示按下的按键的号。16个按键的键号分别对应16个数值:0~15。要求用10进制来显示键号。显示的样式为“pressed = ##"。没有按键按下的时候显示”pressed = no“。的程序
时间: 2024-02-28 13:58:00 浏览: 35
好的,下面是51单片机利用矩阵键盘和LCD1602显示器实现简单按键输入系统的程序代码:
```c
#include <reg51.h>
#include <stdio.h>
#include "lcd1602.h"
#define KEY_PORT P1 // 矩阵键盘连接的端口
#define LCD_PORT P0 // LCD1602连接的端口
// 定义矩阵键盘的行列数
#define ROW_NUM 4
#define COL_NUM 4
// 定义矩阵键盘的键值
unsigned char keyValues[ROW_NUM][COL_NUM] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12, 13, 14, 15}
};
// 定义LCD1602的初始行列位置
unsigned char lcdRow = 0;
unsigned char lcdCol = 0;
// 扫描矩阵键盘,返回按下的键值
unsigned char scanKey() {
unsigned char row, col;
// 逐行扫描矩阵键盘
for (row = 0; row < ROW_NUM; row++) {
// 将当前行置低
KEY_PORT |= 0xF0;
KEY_PORT &= ~(1 << (4 + row));
// 逐列检测当前行是否有按键按下
for (col = 0; col < COL_NUM; col++) {
if (!(KEY_PORT & (1 << col))) {
// 返回按下的键值
return keyValues[row][col];
}
}
}
// 没有按键按下,返回无效键值
return 0xFF;
}
// 初始化LCD1602
void initLCD() {
lcdInit(LCD_PORT);
lcdClear();
}
// 显示按下的按键号
void displayKeyValue(unsigned char keyValue) {
char message[16];
if (keyValue == 0xFF) {
// 没有按键按下
sprintf(message, "pressed = no");
} else {
// 显示按下的按键号
sprintf(message, "pressed = %02d", keyValue);
}
// 在LCD1602上显示消息
lcdSetCursor(lcdRow, lcdCol);
lcdPrint(message);
}
// 主函数
void main() {
// 初始化LCD1602
initLCD();
// 循环扫描矩阵键盘并显示按键号
while (1) {
unsigned char keyValue = scanKey();
displayKeyValue(keyValue);
}
}
```
在程序中,我们首先定义了矩阵键盘的行列数和键值,以及LCD1602的初始行列位置。然后,我们编写了`scanKey()`函数来扫描矩阵键盘并返回按下的键值,如果没有键被按下,返回无效键值0xFF。接着,我们编写了`initLCD()`函数来初始化LCD1602,以及`displayKeyValue()`函数来显示按下的按键号。最后,在主函数中,我们循环调用`scanKey()`和`displayKeyValue()`函数,以实现持续的按键输入和显示。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)