智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3969|回复: 2
打印 上一主题 下一主题

[软件类] XS128矩阵键盘扫描程序

[复制链接]

10

主题

507

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2048
QQ
威望
1302
贡献
390
兑换币
8
注册时间
2011-2-25
在线时间
178 小时
跳转到指定楼层
1#
发表于 2011-10-15 13:47:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5贡献
   各位大侠,我急需要一个用XS128单片机控制的矩阵键盘程序,特献上微薄贡金,再次感谢!

这里是我自己做的程序,有问题,怀疑是DDRB方向寄存器的问题,也试过设置方向寄存器,但可能是自己的原因程序一直不对,然后需要补充的是,硬件部分和液晶显示部分没有问题,这个键盘扫描程序在51上测试的时候也是没有问题的,在飞思卡尔上就有问题,特附上矩阵键盘扫描程序,望各位大侠指点。

               /***********键盘扫描*************/
void key_getch()
{        
   uchar X,Y,Z;
   PORTB=0X0F;
    if(PORTB!=0X0F)
      {
         Dly_ms(10);//延时10ms,消除抖动
        if(PORTB!=0X0F)
          {         
            X=PORTB;
            PORTB=0XF0;
            Y=PORTB;
            Z=X|Y;
      switch(Z)
         {
           case 0x77:k=0;break;
           case 0xb7:k=1;break;
           case 0xd7:k=2;break;
           case 0xe7:k=3;break;
           case 0x7b:k=4;break;
           case 0xbb:k=5;break;
           case 0xdb:k=6;break;
           case 0xeb:k=7;break;
           case 0x7d:k=8;break;
           case 0xbd:k=9;break;
                 
         
           case 0xdd:
                 state=1;break;
           case 0xed:
        chn_disp (12,0x80,tab1);
        chn_disp (2,0x8E,tab2);
        break;
           case 0x7e:
                  state=0;
         kk=0;
      clrram ();
         break;                 
           case 0xbe:
                   state=2;
       break;
           case 0xde:k='E';break;
           case 0xee:k='F';break;
     default: break;
        }
  

   if((k<=9)&&(k>=0))
   {

      
    kk=kk*10+k;
     k=-1;
}   
  
   
}
}
while(1)
{
   PORTB=0X0F;
   if(PORTB==0X0F) break;
   }
}

2

主题

60

帖子

0

精华

元老在此

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
89105
威望
72620
贡献
16085
兑换币
18
注册时间
2011-10-30
在线时间
200 小时
2#
发表于 2011-11-3 21:58:01 | 只看该作者
试试这个
是4*4键盘的
程序能编译
没有报错误
#define KEY_MASK 0xf0
#define KEYIO PORTA
void DelayKey(int cnt)
{
int i,j;
for(i=0;i<cnt;i++)
{
j=0x1300;
while(j--);
}
}
void KeyInt(void)   
{
DDRA=~KEY_MASK;
}
unsigned char KeyScan()
{
unsigned char key,ch;
KEYIO=0xf0;
key=KEYIO;
if(key!=KEY_MASK)
{
DelayKey(10);
DDRA=KEY_MASK;
KEYIO=0x0f;
ch=KEYIO;
while(KEYIO & 0x0f !=0xf0);
key|=ch;
switch(key)
{
case 0xee:key=0x00;break;
case 0xde:key=0x01;break;
case 0xbe:key=0x02;break;
case 0x7e:key=0x03;break;
case 0xed:key=0x04;break;
case 0xdd:key=0x05;break;
case 0xbd:key=0x06;break;
case 0x7d:key=0x07;break;
case 0xeb:key=0x08;break;
case 0xdb:key=0x09;break;
case 0xbb:key=0x0a;break;
case 0x7b:key=0x0b;break;
case 0xe7:key=0x0c;break;
case 0xd7:key=0x0d;break;
case 0xb7:key=0x0e;break;
case 0x77:key=0x0f;break;
}
return key;
}
key=KEY_MASK;
return KEY_MASK;
}
回复

使用道具 举报

2

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1629
威望
844
贡献
395
兑换币
160
注册时间
2011-9-24
在线时间
195 小时
3#
发表于 2011-11-3 22:28:28 | 只看该作者
hao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-10-2 08:22 , Processed in 0.048396 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表