作者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