
案例7_3:矩阵键盘显示0-9 A-F
5.2.3 键盘检测案例目标的实现要求:上电时,数码管显示6个0,顺序按下矩阵键盘后,在数码管上依次显示0-F。
·
文章目录
- 0 文章介绍
- 1 仿真图
- 2 效果图(展示第3行按键和第4行按键效果图)
- 3 代码(部分)
0 文章介绍
5.2.3 键盘检测案例目标的实现
要求:上电时,数码管显示6个0,顺序按下矩阵键盘后,在数码管上依次显示0-F
1 仿真图
2 效果图(展示第3行按键和第4行按键效果图)
3 代码(部分)
参考案例7_2的代码 和 书上P107代码,完善该部分代码。
#include<reg52.h> // 引入52系列单片机的头文件,定义了特殊功能寄存器
#define uchar unsigned char // 定义 uchar 为 unsigned char 的简写
#define uint unsigned int // 定义 uint 为 unsigned int 的简写
sbit dula = P1^6; // 定义 dula 位变量,接U2锁存器的锁存端,连接在P1.6引脚
sbit wela = P3^4; // 定义 wela 位变量,接U3锁存器的锁存端,连接在P3.4引脚
uchar num; // 保存当前按键对应的值
uchar temp; // 临时变量,用于读取P2口状态
// 数码管显示的编码表,0-9以及A-F的16个16进制字符对应的段码【待补充】
uchar code table[] =
{
// 0,1,2,3
// 4,5,6,7
// 8,9,A,b
// C,d,E,F
};
// 延时函数,x 控制延时时长(粗略)
void delay(uchar x)
{
uchar a, b;
for(a = x; a > 0; a--)
for(b = 200; b > 0; b--);
}
// 数码管显示函数,x 是要显示的数字(0-15,对应上面的 table 编码)
void display(uchar x)
{
// 1、段选
P0 = table[x]; // 将段码送到P0口
dula = 1; // 锁存段选数据
dula = 0;
// 2、位选
P0 = 【待补充】; // 1100 0000 6位数码管全亮
wela = 1; // 锁存位选数据
wela = 0;
}
// 主函数
void main()
{
while(1)
{
//================== 1、扫描第一行(P2.0) ==================【待补充】
//==================2、扫描第二行(P2.1) ==================【待补充】
//==================3、扫描第2行(P2.2) ==================【待补充】
//==================4、扫描第四行(P2.3) ==================【待补充】
//================== 5、显示按键对应的数字或字母 ==================
display(num); // 显示按键对应的数字或字母
}
}
更多推荐
所有评论(0)