第一次写矩阵键盘的程序,有不对的地方,欢迎拍砖指正!
本人是用P3口做矩阵键盘的.
程序写法一(粗略的过程如下)
//************************键盘扫描位定义*************//
行定义.
sbit a="P3"^0;
sbit b="P3"^1;
sbit c="P3"^2;
sbit d="P3"^3;
//*********************键盘扫描主程序***********************//
void keyscan(void)
{
uchar i,y,x=0;
i=0xef;//先选择列,然后进行行扫描
for(y=0;y<4;y++)//循环扫描键盘
{
P3=i;
if(a==0)//判断是否是第一行按下,如果是则
break;//退出for循环,否则执行key++
key++;
if(b==0)
break;
key++;
if(c==0)
break;
key++;
if(d==0)
break;
key++;
i=_crol_(i,1);//左移一位,进行下一列扫描,得用到头文件#include<intrins.h>
}
}
//******************************************************************//
程序写法二粗略过程如下)-[其中一共阴数码管接P2口,键盘接P3口]
声明:延时函数,还有编码表我已经省略了
uchar a,b,c;
P2=0x00;//数码管不显示
while(1)
{
//*************键盘值扫描主程序************//
P3=0X0f;
a=P3; //行
delay(1);
P3=0Xf0;
b=P3; //列
delay(1);
c=a+b;//读取到的键盘值
//**********************************//
//**********送数显示**************//
if(c==0xee)P2=tab[0];//c==0xee,识别出第一行第一列的键盘,以下类推
if(c==0xde)P2=tab[1];
if(c==0xbe)P2=tab[2];
if(c==0x7e)P2=tab[3];
if(c==0xed)P2=tab[4];
if(c==0xdd)P2=tab[5];
if(c==0xbd)P2=tab[6];
if(c==0x7d)P2=tab[7];
if(c==0xeb)P2=tab[8];
if(c==0xdb)P2=tab[9];
if(c==0xbb)P2=tab[10];
if(c==0x7b)P2=tab[11];
if(c==0xe7)P2=tab[12];
if(c==0xd7)P2=tab[13];
if(c==0xb7)P2=tab[14];
if(c==0x77)P2=tab[15];
//**********************************//
}
}
用户144681 2009-4-23 22:15
用户190213 2009-4-21 17:22
daheng 2009-4-21 10:43