原创 关于矩阵4*4键盘的程序

2009-4-20 07:02 2479 8 11 分类: MCU/ 嵌入式

第一次写矩阵键盘的程序,有不对的地方,欢迎拍砖指正!


本人是用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];
//**********************************// 
 }
}


 


 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户144681 2009-4-23 22:15

同理楼上的

用户190213 2009-4-21 17:22

话是这么说啊 不过.理论和实际还是有差距的.只有在运行中才能知道你的程序是否能符合你的要求 顺便说下,你的开关矩阵中如果没有防抖动装置,你的结果有可能和你预想的结果有差距.也可以在程序中设置放抖动程序

daheng 2009-4-21 10:43

运行通过了就行了,写程序关键是思路对就好办了
相关推荐阅读
EE直播间
更多
我要评论
3
8
关闭 站长推荐上一条 /3 下一条