[問題] 請問4x4鍵盤的掃描法

看板ASM (組合語言)作者 (不再在乎)時間15年前 (2010/03/16 22:44), 編輯推噓1(1010)
留言11則, 2人參與, 最新討論串1/1
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

03/17 14:50, , 1F
8051的IO架構是open-drain,這種架構只有拉low的能力,因
03/17 14:50, 1F

03/17 14:51, , 2F
此寫1時相當於設成input,scanln的值應該是0xFE 0xFD 吧?
03/17 14:51, 2F

03/18 00:10, , 3F
沒錯沒錯,如你所說的,那是不是就代表0xfe的時候P1.0是當
03/18 00:10, 3F

03/18 00:11, , 4F
output在用??另外我想再請問一下,我之前當input用的時候
03/18 00:11, 4F

03/18 00:12, , 5F
也沒有特別利用指令把他拉到H也是能認開關...那我要做
03/18 00:12, 5F

03/18 00:13, , 6F
這動作的時機是...?...不好意思問題有點多..@@
03/18 00:13, 6F

03/18 00:13, , 7F
感謝大大的指教...
03/18 00:13, 7F

03/18 16:54, , 8F
8051在reset後,全部的IO是放開的 = 輸出1 = 輸入pin
03/18 16:54, 8F

03/18 16:55, , 9F
所以你不用做任何事也可以當input用,但如果你把它設成0之
03/18 16:55, 9F

03/18 16:55, , 10F
後再去讀,就恒為0,所以有些8051的範例會在讀取前先寫1
03/18 16:55, 10F

03/18 16:57, , 11F
scan的原理你弄清楚後,就會知道它那個表為何要那樣訂
03/18 16:57, 11F
文章代碼(AID): #1BdvbC59 (ASM)
文章代碼(AID): #1BdvbC59 (ASM)