本项目介绍如何通过44矩阵键盘控制1602液晶显示屏显示内容,包括硬件连接和软件编程技巧,适用于初学者学习嵌入式系统基础。
以下是根据您的要求对给定代码进行的格式化与简化处理:
```c
#include
#include
#define uchar unsigned char
#define uint unsigned int
// 定义数据端口及控制引脚
#define shuju P0 // 数据端口定义为P0
#define bus P3 // 键盘连接到P3
sbit rs = P1^0; // RS引脚设置在P1.0上
sbit rw = P1^1; // RW引脚设置在P1.1上
sbit e = P1^2; // E 引脚设置在P1.2上
// 定义SDA和SCL端口
#define sda shuju // 数据线定义为shuju(即P0)
#define scl P2^1 // SCL引脚定义为P2的第1位
uchar r; // 全局变量r用于计数
// 延时函数,参数i表示延时期间循环次数
void delayms(int i) {
int j;
for(j = 0 ;j < i;j++);
}
// LCD初始化使能函数
void enable() {
rs = 0; rw = 0; e = 0;
delayms(65); // 延时以稳定信号
e = 1; // 确保E引脚在操作结束后复位为高电平
}
// LCD写数据函数,用于向LCD发送指令或字符数据
void write() {
rs = 1;
rw = 0;
e = 0;
delayms(65);
e = 1; // 确保E引脚在操作结束后复位为高电平
}
// LCD初始化函数,设置LCD工作模式和显示属性等
void chushi() {
sda = 0, scl = 0;
shuju = 0x01;
enable();
// 设置四线接口、8位数据宽度及两行显示格式的命令字
shuju = 0x38;
enable();
// 显示开,光标关,闪烁关
shuju = 0x0f;
enable();
// 光标移动方向设置为向右移位(即往右打印)
shuju = 0x06;
enable();
// 返回到起始地址
shuju = 0x80;
enable();
}
// 显示字符或数字的函数,将要显示的内容写入LCD指定位置
void display(uchar i) {
shuju=i;
write();
}
// 键盘扫描及数据处理函数,用于读取矩阵键盘输入并更新LCD显示内容
void jianpan() {
uchar a, k; // 临时变量a和k
bus = 0xff;
// 扫描第一行键值
bus=0xef;
delayms(6);
if((bus & 0x0f) != 0x0f){
delayms(2);
switch(bus & 0x0f) {
case 0x0e: k = 4; break; // 键盘第一行左键
case 0x0d: k = 5; break;
case 0x0b: k = 6; break;
case 0x07: k = 1; break;
}
display(k);
}
// 扫描第二行键值
bus=0xdf;
delayms(6);
if((bus & 0x0f) != 0x0f){
delayms(2);
switch(bus & 0x0f) {
case 0x0e: k = 7; break;
case 0x0d: k = 8; break;
case 0x0b: k = 9; break;
case 0x07: k = *; break;
}
display(k);
}
// 扫描第三行键值
bus=0xbf;
delayms(6);
if((bus & 0x0f) != 0x0f){
delayms(2);
switch(bus & 0x0f) {
case 0x0e: k = A; break;
case 0x0d: k = B; break;
case 0x0b: k = C; break;
case 0x0