青云LI 发表于 2012-7-4 11:23:33

求430的矩阵键盘程序

求帮助,谁写过430的矩阵键盘程序

enterpriseZ 发表于 2012-7-5 20:21:43

这貌似不是很难吧?再讲矩阵键盘也有使用中断与不使用中断两种,你又不讲要哪一种……

zxffs22 发表于 2012-7-7 20:38:39

unsigned char keyscan (void)
{
unsigned char ss;
unsigned char num;   //按键号
P1DIR =0x0f;         //行P1.0-P1.3输出 列P1.4-P1.7输入

//------------------------------------------------
P1OUT = 0xf7;
ss=P1IN;
if(ss!=0xf7)   //第一行有键被按下
{
delay(200);      
switch(ss)
{
case 0xe7:{num=4;break;}
case 0xd7:{num=3;break;}
case 0xb7:{num=2;break;}
case 0x77:{num=1;break;}
default:num=17;
}
while(P1IN!=0xf7);
}

delay(200);      
//------------------------------------------------

P1OUT = 0xfb;
ss=P1IN;
if(ss!=0xfb)   //第二行有键被按下
{
delay(200);      
switch(ss)
{
case 0xeb:{num=8;break;}
case 0xdb:{num=7;break;}
case 0xbb:{num=6;break;}
case 0x7b:{num=5;break;}
default:num=17;
}
while(P1IN!=0xfb);
}
delay(200);
//-----------------------------------------------
P1OUT = 0xfd;
ss=P1IN;
if(ss!=0xfd)   //第三行有键被按下
{
delay(200);      
switch(ss)
{
case 0xed:{num=12;break;}
case 0xdd:{num=11;break;}
case 0xbd:{num=10;break;}
case 0x7d:{num=9;break;}
default:num=17;
}
while(P1IN!=0xfd);
}
delay(200);
//----------------------------------------------
return num;
}

青云LI 发表于 2012-7-9 10:19:49

不用中断,本人初学430,搞了好久没弄出来,希望给个实例参考参考。

guo594188 发表于 2012-7-12 17:48:54

青云LI 发表于 2012-7-9 10:19 static/image/common/back.gif
不用中断,本人初学430,搞了好久没弄出来,希望给个实例参考参考。

可以参考一下   呵呵呵

青云LI 发表于 2012-7-12 21:29:55

guo594188 发表于 2012-7-12 17:48 static/image/common/back.gif
可以参考一下   呵呵呵

谢谢指点,已解决

lin562794072 发表于 2012-7-14 21:51:35

{:loveliness:}

q8360428 发表于 2012-7-17 14:52:10

------------楼上你笑什么-{:3_49:}

爬爬 发表于 2012-7-17 16:53:19

楼主 我写过一个用看门狗作用作间隔定时器定时器消抖的 比较高级的矩阵按键 扫描 你需不需要?~自认为 比三楼要好

青云LI 发表于 2012-7-17 22:55:15

爬爬 发表于 2012-7-17 16:53 static/image/common/back.gif
楼主 我写过一个用看门狗作用作间隔定时器定时器消抖的 比较高级的矩阵按键 扫描 你需不需要?~自认为 比 ...

嗯 ,谢了,给我学习学习吧,不过现在用的是买的矩阵键盘,不需要消抖,不过以后一定用的到

sf49ers 发表于 2012-7-17 23:50:28

青云LI 发表于 2012-7-17 22:55 static/image/common/back.gif
嗯 ,谢了,给我学习学习吧,不过现在用的是买的矩阵键盘,不需要消抖,不过以后一定用的到 ...

?买的键盘为什么就不用消抖?
感觉你对基本原理并不清楚,还是多看看书,把基础打牢些吧

xingmazhao 发表于 2012-7-23 09:54:27

你没接上拉电阻,会检测不到按键

yf88865 发表于 2012-7-23 17:05:07

爬爬 发表于 2012-7-17 16:53 static/image/common/back.gif
楼主 我写过一个用看门狗作用作间隔定时器定时器消抖的 比较高级的矩阵按键 扫描 你需不需要?~自认为 比 ...

贴出来看看,我觉得多条思路对以后编程有益

爬爬 发表于 2012-7-24 13:39:40

yf88865 发表于 2012-7-23 17:05 static/image/common/back.gif
贴出来看看,我觉得多条思路对以后编程有益

这是按键的程序
#include<msp430x14x.h>
#include"UART.h"
#define OK 1
#define NO 0
typedef unsigned char uint8;
typedef unsigned int uint16;
void key_init()
{
#ifdef DEBUG
    send_string("key board is initaled");
    NEXT;
#endif
    P1DIR|=(BIT7+BIT6+BIT5+BIT4);
}
unsigned char key_scan()
{
    P1OUT&=~(BIT7+BIT6+BIT5+BIT4);
    if((P1IN&0X0F)!=0X0F) return OK;//返回一个作为判断是否按下
    else return NO;
}

unsigned char key_get()
{
    uint8 temp1=0x80;
    uint8 n=0;
    for(n=0;n<4;n++)
    {
      P1OUT=0XF0;   
      P1OUT&=~temp1;//依次将输入給低 且只有一个为低
      temp1>>=1;
      if((P1IN&BIT0)==0) return (1+(n*4));
      if((P1IN&BIT1)==0) return (2+(n*4));
      if((P1IN&BIT2)==0) return (3+(n*4));
      if((P1IN&BIT3)==0) return (4+(n*4));
    }
    return 0;
}
下面是在主函数关于按键 的程序
#pragma vector=WDT_VECTOR
__interrupt void WDT_int()
{
    //static uint16 j=0;
    //static uint8 j2=0;
    static uint8 cnt=0;
    static uint8 flag1=0;
    static uint8 flag2=0;
#ifdef DEBUG
    j++;
    if(j==1000)
    {
      j=0;
      j2++;
      if(j2%2)LED_1;
      else LED_0;//led的作用是作为一个指示灯 做一个LED小模块 作为指示灯
    }
#endif
    cnt++;
    if(cnt==30)
    {
      cnt=0;
      if(flag1=key_scan())
      {
            if(!flag2)
            {
#ifdef DEBUG
                send_string("key is pressed");
                NEXT;
#endif
                num=key_get();
#ifdef DEBUG
                send_char(num+48);
                NEXT;
#endif
            }
            flag2=flag1;
      }
    }
    if((flag1==0)&&(flag2==1))
    {
#ifdef DEBUG
      send_string("key gets up");
      NEXT;
#endif
      flag2=0;
      //LPM3_EXIT;
   }
}
/*将按键的检测放入看门狗定时器中断中每隔一定时间进来检测 */

lin_best 发表于 2012-12-13 14:23:10

防抖不太好做
页: [1]
查看完整版本: 求430的矩阵键盘程序