本帖最后由 daiya 于 2015-7-29 00:35 编辑
我编了一个识别4*4键盘线反转法键识别程序,在实验板上测试成功了,可是想在程序中添加一句按键释放检测语句,尝试了好久,一直没成功,请各位高手帮忙看看怎么添加?
程序如下:
/*矩阵键盘扫描程序:线反转法(经典矩阵键盘检测程序)
动态扫描显示数码管、线反转法检测4×4矩阵键盘
// Header:P2口低4位接矩阵键盘行、高4位接矩阵键盘列
// File Name:经典矩阵键盘检测程序(线反转法)
*/
#include<reg51.h>//头文件
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
uchar num,key;//定义全局变量
uchar DIS_SEG7[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar DIS_BIT[4]={0xf7,0xfb,0xfd,0xfe};
uchar DIS[2];
uint cnt;
void delay(uint xms) //延时函数
{
uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<110;j++);
}
void keyscan()//矩阵键盘扫描函数 开始
{
uchar x,y;//定义:行坐标x、列坐标y
P2=0x0f;//P3口:4列送0000、4行送1111
if (P2!=0x0f)//1判断是否有按键按下
{
delay(10);//延时10毫秒消抖动
P2=0x0f;//P3口:列送0000、行送1111
if (P2!=0x0f)//2次判断是否有按键按下
{
x=P2;//取按下矩阵键盘的行坐标
P2=0xf0;//线反转P3口:4列送高电平、4行送低电平
y=P2;//取按下矩阵键盘的列坐标
key=x|y;//行坐标x、列坐标y 进行或运算组合在一起
switch (key) //进入开关多分支语句判断
{
case 0xee: num=0;
break;
case 0xde: num=1;
break;
case 0xbe: num=2;
break;
case 0x7e: num=3;
break;
case 0xed: num=4;
break;
case 0xdd: num=5;
break;
case 0xbd: num=6;
break;
case 0x7d: num=7;
break;
case 0xeb: num=8;
break;
case 0xdb: num=9;
break;
case 0xbb: num=10;
break;
case 0x7b: num=11;
break;
case 0xe7: num=12;
break;
case 0xd7: num=13;
break;
case 0xb7: num=14;
break;
case 0x77: num=15;
break;
default:
break;
}
}
}
}//矩阵键盘扫描函数 结束
void main() //主函数 开始
{
while(1)//大循环 开始
{
keyscan();//调用按键扫描函数
DIS[0]=DIS_SEG7[num];
P0=DIS[0];
P1=DIS_BIT[0];
}//大循环 结束
}//主函数 结束
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>