作者kitconan (不再在乎)
看板ASM
标题[问题] 请问4x4键盘的扫描法
时间Tue Mar 16 22:44:24 2010
int kbscan(){
for(row=0;row<4;row++){
P1=scanln[row];
^^^^^^^^^^^^^^^^^^
kbtemp=KBINP&0xf0;
if(kbtemp!=0xf0){
delay1ms(20);
for(col=0;col<4;col++){
if(kbtemp==(scanln[col]&0x0f)*16){
kbp=row*4+col;
while((KBINP&0xf0)!=0xf0);
}
}
}
}
return kbp;
}
其中我的键盘是安装在PORT1,我的问题是此时PORT1对於51而言不是INPUT PORT吗?
那我把值配给他的意义是?书上是写输出扫描线,但我想半天就是不懂....
想请教各位大大这可能要看哪部份了...书上的说明很简略,我的直觉是这应该是
很简单的一个概念...但就是想不通...><
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.6.13.4
1F:推 ruemann:8051的IO架构是open-drain,这种架构只有拉low的能力,因 03/17 14:50
2F:→ ruemann:此写1时相当於设成input,scanln的值应该是0xFE 0xFD 吧? 03/17 14:51
3F:→ kitconan:没错没错,如你所说的,那是不是就代表0xfe的时候P1.0是当 03/18 00:10
4F:→ kitconan:output在用??另外我想再请问一下,我之前当input用的时候 03/18 00:11
5F:→ kitconan:也没有特别利用指令把他拉到H也是能认开关...那我要做 03/18 00:12
6F:→ kitconan:这动作的时机是...?...不好意思问题有点多..@@ 03/18 00:13
7F:→ kitconan:感谢大大的指教... 03/18 00:13
8F:→ ruemann:8051在reset後,全部的IO是放开的 = 输出1 = 输入pin 03/18 16:54
9F:→ ruemann:所以你不用做任何事也可以当input用,但如果你把它设成0之 03/18 16:55
10F:→ ruemann:後再去读,就恒为0,所以有些8051的范例会在读取前先写1 03/18 16:55
11F:→ ruemann:scan的原理你弄清楚後,就会知道它那个表为何要那样订 03/18 16:57