看板 ASM 關於我們 聯絡資訊
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
ruemann:你說的是一般按鈕的做法,4x4 keypad要用scan的方法去抓 02/10 14:53
ruemann:他沒有說明硬體是怎麼接,不過如果是單純的一根Pin對一個 02/10 14:54
ruemann:按鍵的話,P0最多只能跑8個鍵,總共有16個鍵,所以還是要 02/10 14:55
ruemann:用scan的方法去抓key 02/10 14:55