项目文件
关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 行列式键盘
图为4x4行列式键盘和1位共阴极数码管电路原理图。
要求开机后数码管暂为黑屏状态,按下任意按键后,显示该键的键值字符(0~F)。若没有新键按下,则维持前次按键结果
首先确定主程序需要的东西:
获取键号:
参考代码:
#include <reg51.h>
char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //led显示码0~f
0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char key_buf[] = {0xee, 0xde, 0xbe, 0x7e,0xed, 0xdd, 0xbd, 0x7d,//键值
0xeb, 0xdb, 0xbb, 0x7b,0xe7, 0xd7, 0xb7, 0x77};
char getKey()
{
char key_scan[] = {0xef, 0xdf, 0xbf, 0x7f}; //键扫描码
char i = 0, j = 0;
for (i = 0; i < 4 ; i++) {
P2 = key_scan[i]; //P2送出键扫描码
if ((P2 & 0x0f) != 0x0f) { //判断有无键闭合
for (j = 0 ; j < 16 ;j++)
{
if (key_buf[j]==P2) return j; //查找闭合键键号
}
}
}
return -1; //无键闭合
}
void main()
{
char key = 0;
P0 = 0x00; //开机黑屏
while(1)
{
key = getKey(); //获得闭合键号
if (key != -1) P0 = led_mod[key]; //显示闭合键号
}
}
结果:
运行视频:
单片机C51-行列式键盘