看板 ASM 關於我們 聯絡資訊
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
ruemann:8051的IO架構是open-drain,這種架構只有拉low的能力,因 03/17 14:50
ruemann:此寫1時相當於設成input,scanln的值應該是0xFE 0xFD 吧? 03/17 14:51
kitconan:沒錯沒錯,如你所說的,那是不是就代表0xfe的時候P1.0是當 03/18 00:10
kitconan:output在用??另外我想再請問一下,我之前當input用的時候 03/18 00:11
kitconan:也沒有特別利用指令把他拉到H也是能認開關...那我要做 03/18 00:12
kitconan:這動作的時機是...?...不好意思問題有點多..@@ 03/18 00:13
kitconan:感謝大大的指教... 03/18 00:13
ruemann:8051在reset後,全部的IO是放開的 = 輸出1 = 輸入pin 03/18 16:54
ruemann:所以你不用做任何事也可以當input用,但如果你把它設成0之 03/18 16:55
ruemann:後再去讀,就恒為0,所以有些8051的範例會在讀取前先寫1 03/18 16:55
ruemann:scan的原理你弄清楚後,就會知道它那個表為何要那樣訂 03/18 16:57