打印

真是丢人了,工作了8年了,一个按键电路都没调出来(重新

[复制链接]
4746|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kingorwei|  楼主 | 2008-3-8 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
真是丢人了,工作了8年了,一个按键电路都没调出来,请各位高手帮忙看看是不是电路出问题了,我用的cpu是LPC2148,采用4×4矩阵按键,直接连接到CPU的GPIO口。第一次用LPC系列的片子就出这样的事,唉。。。,如果有好心人给共享出一段程序来参考一下最好。
下面是我得一段调试程序。

相关帖子

沙发
平常人| | 2008-3-8 10:50 | 只看该作者

图上标错了,有两行都用了P0.15

使用特权

评论回复
板凳
cx3333| | 2008-3-8 10:54 | 只看该作者

哎,这个是做8年电子画的电路图?

错的离谱吧,

使用特权

评论回复
地板
xwj| | 2008-3-8 11:15 | 只看该作者

唉,要是PCB照这个做的话...

使用特权

评论回复
5
来与君| | 2008-3-8 12:11 | 只看该作者

四根行线都短在一起啦?

使用特权

评论回复
6
xhtxzxw| | 2008-3-8 13:18 | 只看该作者

嘿嘿

 IO0DIR &= 0xFFF87FFF;//P015_P018_IN;      
//FFF87FFF:1 1 1 1  1 1 1 1  1 1 1 1  1 0 0 0  0 1 1 1  1 1 1 1  1 1 1 1  1 1 1 1
//位序号   31302928 27262524 23222120 19181716 15141312 11100908 07060504 03020100
    IO0DIR |= 0x00101600;//P009_P012_OUT;
//00101600:0 0 0 0  0 0 0 0  0 0 0 1  0 0 0 0  0 0 0 1  0 1 1 0  0 0 0 0  0 0 0 0
//位序号   31302928 27262524 23222120 19181716 15141312 11100908 07060504 03020100
对IO0DIR的设置对吗?P015~P018的方向设置也许没错,至少位序号能对上,但是对P009~P012的设置肯定有问题吧?现在被设置的是09,10,12,20位。
图也许是画错了。

使用特权

评论回复
7
kingorwei|  楼主 | 2008-3-8 13:22 | 只看该作者

搞定了

谢谢大家的关注,搞定了,图是我发错了,程序是我的那个哥们不小心把寄存器控制给弄反了。

使用特权

评论回复
8
lpf336| | 2008-3-8 14:33 | 只看该作者

使用特权

评论回复
9
sasinop| | 2008-3-8 19:48 | 只看该作者

有键盘芯片嘛

使用特权

评论回复
10
stycx| | 2008-3-8 20:30 | 只看该作者

楼主不厚道,既然在论坛上求助,问题解决了就应该把解决方法

使用特权

评论回复
11
Ice_River| | 2008-3-9 19:16 | 只看该作者

同意楼上!

使用特权

评论回复
12
dlwlmlj| | 2008-3-9 23:33 | 只看该作者

他到底画的啥啊

使用特权

评论回复
13
gzs8317| | 2008-3-10 08:29 | 只看该作者

关注一下

看不见图啊~~~

使用特权

评论回复
14
sflfw| | 2008-3-10 09:33 | 只看该作者

没品 的 家伙,

解决 问题 就 改主贴, bs!

使用特权

评论回复
15
avr32| | 2008-3-10 09:51 | 只看该作者

re

protel图上出错了,估计是楼主大意了.

使用特权

评论回复
16
kingorwei|  楼主 | 2008-3-23 17:39 | 只看该作者

很对不起大家了,我重新上传了程序和电路

很对不起大家了,因为这个东西不是我做的,电路图又让我给传错了,所以就删掉了,好了,我重新传一份图,问题还是老问题,按键采用的是4×4的矩阵按键,直接占用了8个GPIO口的那种,不知到为什么,当我将ROW和COL进行反相读值的时候,读不到正确的数值,然而第一次进入的时候读到值又是正确的,我认为是程序的逻辑关系搞混乱了,但我现在查不出那个地方乱了,所以请教各位高手,帮我看看那个地方搞的还不对。谢谢,10楼和14楼的大哥,不要生气了,程序和电路如下:
#define  COL0    1 << 9   // P0.9连接COL0
#define  COL1    1 << 10   // P0.10连接COL1
#define  COL2    1 << 20   // P0.20连接COL2
#define  COL3    1 << 12   // P0.13连接COL3

#define  ROW0    1 << 15   // P0.15连接ROW0
#define  ROW1    1 << 16   // P0.16连接ROW1
#define  ROW2    1 << 17   // P0.17连接ROW2
#define  ROW3    1 << 18   // P0.18连接ROW3

Uint32 Scan_Key_bak(void)
{

        Uint32 i;
   //**********************************//
    IO0SET |= (ROW0|ROW1|ROW2|ROW3);    // ROW set high 
    IO0CLR |= (COL0|COL1|COL2|COL3);         //COL 设为0

    IO0DIR &=~(ROW0|ROW1|ROW2|ROW3);   // ROW控制口输入
    IO0DIR |=(COL0|COL1|COL2|COL3);            // COL控制口输出
//**********************************//   

    value0=0;
    value1=0;
    value2=0;

    value0 =  IO0PIN ;//& 0x00001e00 ;//读取row 方向的值
     value1 = value0 &(COL0|COL1|COL2|COL3);
    value0 &= (ROW0|ROW1|ROW2|ROW3);

    if( value0 != (ROW0|ROW1|ROW2|ROW3))  // 有按键按下
   {
       OSTimeDly(1);
       value1 =  IO0PIN ;//& 0x00001e00 ;//读取row 方向的值
        value1 &= (ROW0|ROW1|ROW2|ROW3);
        if(value0 == value1)                   //  此处读到ROW的值是正确的。
       {

//**********************************//
            IO0DIR |=(ROW0|ROW1|ROW2|ROW3);  // ROW控制口输出
   
            IO0SET |= (COL0|COL1|COL2|COL3);  // COL set high 
            IO0CLR |= (ROW0|ROW1|ROW2|ROW3);  //ROW 设为0   执行完这行以后GPIO的输出电平是正确的

            IO0DIR &=~(COL0|COL1|COL2|COL3); // COL控制口输入  执行完这行代码后,GPIO逻辑电平为0了,所以数据读不到了
//**********************************// 
  
            value1 = IO0PIN ;//读取col 方向的值
            value1 &= (COL0|COL1|COL2|COL3);//读取col 方向的值
   
            if( value1 != (COL0|COL1|COL2|COL3))  //按键没松开
           {
                  OSTimeDly(1);
                  value2 = IO0PIN ;//读取col 方向的值
                  value2 &= (COL0|COL1|COL2|COL3);//读取col 方向的值
    
                 if( value1 == value2)
                 {
                    value2 = value0 + value1;
                    for(i=0; i<16; i++)      // 查找0~15的键值
                   {
                       if( value2 == KeyTableVal)
                      {
                          value2 = i;
                            break;
                      }
                  }
                if (value2 < 16)
                {
                     return value2;
               }
           }
       }
     }    
   }
return 0xff;
}

使用特权

评论回复
17
db10| | 2008-3-23 17:48 | 只看该作者

...

 是工作8年?还是做开发8年?

使用特权

评论回复
18
zhonggx| | 2008-3-23 20:02 | 只看该作者

看ZLG版上的回复。

当然,你在配置IO功能时也不要配错才行哦。

使用特权

评论回复
19
tang.sc| | 2008-3-24 12:43 | 只看该作者

i 服 you

为什么不考虑加一个简单的去抖电路呢?都8年了

使用特权

评论回复
20
wjsvk| | 2008-3-25 17:06 | 只看该作者

可以用芯片啊

可以用芯片啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

31

帖子

1

粉丝