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

[复制链接]
6206|27
 楼主| kingorwei 发表于 2008-3-8 10:30 | 显示全部楼层 |阅读模式
真是丢人了,工作了8年了,一个按键电路都没调出来,请各位高手帮忙看看是不是电路出问题了,我用的cpu是LPC2148,采用4×4矩阵按键,直接连接到CPU的GPIO口。第一次用LPC系列的片子就出这样的事,唉。。。,如果有好心人给共享出一段程序来参考一下最好。<br />下面是我得一段调试程序。<br />
平常人 发表于 2008-3-8 10:50 | 显示全部楼层

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

  
cx3333 发表于 2008-3-8 10:54 | 显示全部楼层

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

错的离谱吧,
xwj 发表于 2008-3-8 11:15 | 显示全部楼层

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

  
来与君 发表于 2008-3-8 12:11 | 显示全部楼层

四根行线都短在一起啦?

  
xhtxzxw 发表于 2008-3-8 13:18 | 显示全部楼层

嘿嘿

&nbsp;IO0DIR&nbsp;&=&nbsp;0xFFF87FFF;//P015_P018_IN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//FFF87FFF:1&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;0&nbsp;0&nbsp;0&nbsp;&nbsp;0&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;1&nbsp;1&nbsp;1&nbsp;&nbsp;1&nbsp;1&nbsp;1&nbsp;1<br />//位序号&nbsp;&nbsp;&nbsp;31302928&nbsp;27262524&nbsp;23222120&nbsp;19181716&nbsp;15141312&nbsp;11100908&nbsp;07060504&nbsp;03020100<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;0x00101600;//P009_P012_OUT;<br />//00101600:0&nbsp;0&nbsp;0&nbsp;0&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;0&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;1&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;0&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;1&nbsp;&nbsp;0&nbsp;1&nbsp;1&nbsp;0&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;0&nbsp;&nbsp;0&nbsp;0&nbsp;0&nbsp;0<br />//位序号&nbsp;&nbsp;&nbsp;31302928&nbsp;27262524&nbsp;23222120&nbsp;19181716&nbsp;15141312&nbsp;11100908&nbsp;07060504&nbsp;03020100<br />对IO0DIR的设置对吗?P015~P018的方向设置也许没错,至少位序号能对上,但是对P009~P012的设置肯定有问题吧?现在被设置的是09,10,12,20位。<br />图也许是画错了。
 楼主| kingorwei 发表于 2008-3-8 13:22 | 显示全部楼层

搞定了

谢谢大家的关注,搞定了,图是我发错了,程序是我的那个哥们不小心把寄存器控制给弄反了。
lpf336 发表于 2008-3-8 14:33 | 显示全部楼层

  
sasinop 发表于 2008-3-8 19:48 | 显示全部楼层

有键盘芯片嘛

  
stycx 发表于 2008-3-8 20:30 | 显示全部楼层

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

  
Ice_River 发表于 2008-3-9 19:16 | 显示全部楼层

同意楼上!

  
dlwlmlj 发表于 2008-3-9 23:33 | 显示全部楼层

他到底画的啥啊

  
gzs8317 发表于 2008-3-10 08:29 | 显示全部楼层

关注一下

看不见图啊~~~
sflfw 发表于 2008-3-10 09:33 | 显示全部楼层

没品 的 家伙,

解决&nbsp;问题&nbsp;就&nbsp;改主贴,&nbsp;bs!
avr32 发表于 2008-3-10 09:51 | 显示全部楼层

re

protel图上出错了,估计是楼主大意了.
 楼主| kingorwei 发表于 2008-3-23 17:39 | 显示全部楼层

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

很对不起大家了,因为这个东西不是我做的,电路图又让我给传错了,所以就删掉了,好了,我重新传一份图,问题还是老问题,按键采用的是4×4的矩阵按键,直接占用了8个GPIO口的那种,不知到为什么,当我将ROW和COL进行反相读值的时候,读不到正确的数值,然而第一次进入的时候读到值又是正确的,我认为是程序的逻辑关系搞混乱了,但我现在查不出那个地方乱了,所以请教各位高手,帮我看看那个地方搞的还不对。谢谢,10楼和14楼的大哥,不要生气了,程序和电路如下:<br />#define&nbsp;&nbsp;COL0&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;9&nbsp;&nbsp;&nbsp;//&nbsp;P0.9连接COL0<br />#define&nbsp;&nbsp;COL1&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;10&nbsp;&nbsp;&nbsp;//&nbsp;P0.10连接COL1<br />#define&nbsp;&nbsp;COL2&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;20&nbsp;&nbsp;&nbsp;//&nbsp;P0.20连接COL2<br />#define&nbsp;&nbsp;COL3&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;12&nbsp;&nbsp;&nbsp;//&nbsp;P0.13连接COL3<br /><br />#define&nbsp;&nbsp;ROW0&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;15&nbsp;&nbsp;&nbsp;//&nbsp;P0.15连接ROW0<br />#define&nbsp;&nbsp;ROW1&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;16&nbsp;&nbsp;&nbsp;//&nbsp;P0.16连接ROW1<br />#define&nbsp;&nbsp;ROW2&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;17&nbsp;&nbsp;&nbsp;//&nbsp;P0.17连接ROW2<br />#define&nbsp;&nbsp;ROW3&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&lt&lt&nbsp;18&nbsp;&nbsp;&nbsp;//&nbsp;P0.18连接ROW3<br /><br />Uint32&nbsp;Scan_Key_bak(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;i;<br />&nbsp;&nbsp;&nbsp;//**********************************//<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;|=&nbsp;(ROW0|ROW1|ROW2|ROW3);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ROW&nbsp;set&nbsp;high&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;(COL0|COL1|COL2|COL3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//COL&nbsp;设为0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;&=~(ROW0|ROW1|ROW2|ROW3);&nbsp;&nbsp;&nbsp;//&nbsp;ROW控制口输入<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=(COL0|COL1|COL2|COL3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;COL控制口输出<br />//**********************************//&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;value0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;value1=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;value2=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;value0&nbsp;=&nbsp;&nbsp;IO0PIN&nbsp;;//&&nbsp;0x00001e00&nbsp;;//读取row&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value1&nbsp;=&nbsp;value0&nbsp;&(COL0|COL1|COL2|COL3);<br />&nbsp;&nbsp;&nbsp;&nbsp;value0&nbsp;&=&nbsp;(ROW0|ROW1|ROW2|ROW3);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;value0&nbsp;!=&nbsp;(ROW0|ROW1|ROW2|ROW3))&nbsp;&nbsp;//&nbsp;有按键按下<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value1&nbsp;=&nbsp;&nbsp;IO0PIN&nbsp;;//&&nbsp;0x00001e00&nbsp;;//读取row&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value1&nbsp;&=&nbsp;(ROW0|ROW1|ROW2|ROW3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(value0&nbsp;==&nbsp;value1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;此处读到ROW的值是正确的。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />//**********************************//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=(ROW0|ROW1|ROW2|ROW3);&nbsp;&nbsp;//&nbsp;ROW控制口输出<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;|=&nbsp;(COL0|COL1|COL2|COL3);&nbsp;&nbsp;//&nbsp;COL&nbsp;set&nbsp;high&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;(ROW0|ROW1|ROW2|ROW3);&nbsp;&nbsp;//ROW&nbsp;设为0&nbsp;&nbsp;&nbsp;执行完这行以后GPIO的输出电平是正确的<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;&=~(COL0|COL1|COL2|COL3);&nbsp;//&nbsp;COL控制口输入&nbsp;&nbsp;执行完这行代码后,GPIO逻辑电平为0了,所以数据读不到了<br />//**********************************//&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value1&nbsp;=&nbsp;IO0PIN&nbsp;;//读取col&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value1&nbsp;&=&nbsp;(COL0|COL1|COL2|COL3);//读取col&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;value1&nbsp;!=&nbsp;(COL0|COL1|COL2|COL3))&nbsp;&nbsp;//按键没松开<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value2&nbsp;=&nbsp;IO0PIN&nbsp;;//读取col&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value2&nbsp;&=&nbsp;(COL0|COL1|COL2|COL3);//读取col&nbsp;方向的值<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;value1&nbsp;==&nbsp;value2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value2&nbsp;=&nbsp;value0&nbsp;+&nbsp;value1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt16;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;查找0~15的键值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;value2&nbsp;==&nbsp;KeyTableVal)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value2&nbsp;=&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value2&nbsp;&lt&nbsp;16)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />return&nbsp;0xff;<br />}<br /><br />
db10 发表于 2008-3-23 17:48 | 显示全部楼层

...

&nbsp;是工作8年?还是做开发8年?
zhonggx 发表于 2008-3-23 20:02 | 显示全部楼层

看ZLG版上的回复。

当然,你在配置IO功能时也不要配错才行哦。
tang.sc 发表于 2008-3-24 12:43 | 显示全部楼层

i 服 you

为什么不考虑加一个简单的去抖电路呢?都8年了
wjsvk 发表于 2008-3-25 17:06 | 显示全部楼层

可以用芯片啊

可以用芯片啊<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

31

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部