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

看板ASM (組合語言)作者 (提琴手的無弦之聲)時間15年前 (2010/02/13 20:54), 編輯推噓3(301)
留言4則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《kinkipikachu (提琴手的無弦之聲)》之銘言: 對不起...我想再補充一下圖... P0.4 P0.5 P0.6 P0.7 | | | | B| B| B| B| P0.3 -------------------------------------------R-------VCC B| B| B| B| P0.2 -------------------------------------------R-------VCC B| B| B| B| P0.1 -------------------------------------------R-------VCC B| B| B| B| P0.0 -------------------------------------------R-------VCC 我是採用書本上的高態動做... P0.4 ~ P0.7 是做 SCAN... P0.3 ~ P0.0 是做 接收.... 課本我是可以做的出來... 但是換成我自己的想法所打的程式.. 卻不能執行.....但是我不知道我的觀念錯在那裡 ??? 如果是 P0.4 送出 0 而且 P0.3 接收到0 所以就想 P0 = 0xe7 送出 key=3 但是好像不是我所想的容易 ???? 煩請有經驗的大大 解答我的疑惑 謝謝.... : 小弟知道網路上跟書上有很多,我自己試寫了一個 : 用 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: 59.104.150.236

02/13 21:32, , 1F
高態動做的話,你的電路會導致CPU混亂分辨不出誰被按了
02/13 21:32, 1F

02/13 21:44, , 2F
8051並不合適採HIGH ACTIVE但是仍然想用高動作最好用P1P2
02/13 21:44, 2F

02/13 23:02, , 3F
我倒覺得這個電路還OK,只是他程式中P0.4~P0.7沒有做輸出
02/13 23:02, 3F

02/13 23:03, , 4F
也就是沒有做scan的動作……
02/13 23:03, 4F
文章代碼(AID): #1BTg3y4Z (ASM)
討論串 (同標題文章)
文章代碼(AID): #1BTg3y4Z (ASM)