minic应广单片机3*7矩阵键盘代码
时间: 2024-06-09 08:11:30 浏览: 149
以下是基于C语言的minic应广单片机3*7矩阵键盘代码:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit L1 = P1^0; //行1
sbit L2 = P1^1; //行2
sbit L3 = P1^2; //行3
sbit C1 = P1^3; //列1
sbit C2 = P1^4; //列2
sbit C3 = P1^5; //列3
uchar code tab[] = {0xEE, 0xDE, 0xBE, 0x7E, 0xED, 0xDD, 0xBD, 0x7D, 0xEB, 0xDB, 0xBB, 0x7B, 0xE7, 0xD7, 0xB7, 0x77}; //键盘编码表
void delayms(uint xms) //延时函数
{
uint i;
while(xms--)
{
for(i=0; i<110; i++);
}
}
uchar KeyScan() //键盘扫描函数
{
uchar keyvalue;
L1 = 0; L2 = 1; L3 = 1; //第1行扫描
if(C1 == 0) {delayms(10); if(C1==0) keyvalue = 0; else keyvalue = 1;} //第1列
if(C2 == 0) {delayms(10); if(C2==0) keyvalue = 2; else keyvalue = 3;} //第2列
if(C3 == 0) {delayms(10); if(C3==0) keyvalue = 4; else keyvalue = 5;} //第3列
L1 = 1; L2 = 0; L3 = 1; //第2行扫描
if(C1 == 0) {delayms(10); if(C1==0) keyvalue = 6; else keyvalue = 7;} //第1列
if(C2 == 0) {delayms(10); if(C2==0) keyvalue = 8; else keyvalue = 9;} //第2列
if(C3 == 0) {delayms(10); if(C3==0) keyvalue = 10; else keyvalue = 11;} //第3列
L1 = 1; L2 = 1; L3 = 0; //第3行扫描
if(C1 == 0) {delayms(10); if(C1==0) keyvalue = 12; else keyvalue = 13;} //第1列
if(C2 == 0) {delayms(10); if(C2==0) keyvalue = 14; else keyvalue = 15;} //第2列
if(C3 == 0) {delayms(10); if(C3==0) keyvalue = 16; else keyvalue = 17;} //第3列
while((C1==0) || (C2==0) || (C3==0)); //等待按键释放
return keyvalue; //返回键值
}
void main()
{
uchar keyvalue, lastkeyvalue;
lastkeyvalue = 0xFF; //初始化上一次按键值
while(1)
{
keyvalue = KeyScan(); //键盘扫描
if(keyvalue != lastkeyvalue) //如果按键值发生变化
{
if(keyvalue != 0xFF) //如果检测到按键按下
{
P2 = tab[keyvalue]; //显示按键编码
}
else //如果检测到按键释放
{
P2 = 0xFF; //清空显示
}
lastkeyvalue = keyvalue; //保存上一次按键值
}
}
}
```
该代码使用了P1口作为3*7矩阵键盘的行和列,使用了P2口作为数码管的显示端口。按下键盘上的按键时,数码管会显示相应的键盘编码;释放按键时,数码管会清空显示。
阅读全文