Re: [請益] 4X4的 keyboard 寫法

看板ASM (組合語言)作者 (小D(滴))時間15年前 (2010/02/10 00:42), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串2/3 (看更多)
P0為接收。採用低態驅動 表示 LOW動作。 所以P0的腳位 用 電阻 PUSH HIGH(5V)。 按鈕按下導通後讓他接地。(目地按下按鈕能讓準位拉地) 若沒示波器 就用 三用電錶 量MCU的P0腳。看每隻腳是否按下按鈕會拉LOW。 PS:不知道你硬體是否看書接的? ※ 引述《kinkipikachu (提琴手的無弦之聲)》之銘言: : 小弟知道網路上跟書上有很多,我自己試寫了一個 : 用 keil c 寫的 keypad 程式,但是七段就是不會亮, : 請大大指點一下我錯誤的觀念,我不知錯再哪裡? : 硬體架構: : OUTPUT 接收 : 89S51 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 : 採用低態驅動 : P2 接 7段顯示器 : 程式: : #include <AT89X51.H> : char keypad(void); : code char : table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, : 0x83,0xc6,0xa1,0x86,0x8e,0xff}; : main() : { : char n; : while(1) : { : n=table[keypad()]; : P2=~n; : } : } : char keypad(void) : { : char key=16; : if (P0==0x77) : { : key=0; : return key; : } : else if (P0==0x7b) : { : key=1; : return key; : } : else if (P0==0x7c) : { : key=2; : return key; : } : else if (P0==0x7e) : { : key=3; : return key; : } : else if (P0==0xb7) : { : key=4; : return key; : } : else if (P0==0xbb) : { : key=5; : return key; : } : else if (P0==0xbc) : { : key=6; : return key; : } : else if (P0==0xbe) : { : key=7; : return key; : } : else if (P0==0xc7) : { : key=8; : return key; : } : else if (P0==0xcb) : { : key=9; : return key; : } : else if (P0==0xce) : { : key=10; : return key; : } : else if (P0==0xc7) : { : key=11; : return key; : } : else if (P0==0xe7) : { : key=12; : return key; : } : else if (P0==0xeb) : { : key=13; : return key; : } : else if (P0==0xec) : { : key=14; : return key; : } : else if (P0==0xee) : { : key=15; : return key; : } : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.80.6

02/10 14:53, , 1F
你說的是一般按鈕的做法,4x4 keypad要用scan的方法去抓
02/10 14:53, 1F

02/10 14:54, , 2F
他沒有說明硬體是怎麼接,不過如果是單純的一根Pin對一個
02/10 14:54, 2F

02/10 14:55, , 3F
按鍵的話,P0最多只能跑8個鍵,總共有16個鍵,所以還是要
02/10 14:55, 3F

02/10 14:55, , 4F
用scan的方法去抓key
02/10 14:55, 4F
文章代碼(AID): #1BSP1tdE (ASM)
討論串 (同標題文章)
文章代碼(AID): #1BSP1tdE (ASM)