熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2021-10-26 15:24
正文摘要:#include<reg51.h> void delay50ms() { unsigned t; for(t=0;t<0x01;t++) { & ... |
這種矩陣鍵盤用反轉(zhuǎn)法比較簡單,給你一個(gè)參考代碼。 { P1 = 0x0f; //行置低,列置高(讀列) if(P1!=0x0f) { // P1 = 0x0f; delaym(40); //延時(shí)去抖。約60MS,可根據(jù)實(shí)際情況修改 if(P1!=0x0f) { switch(P1)//掃描列 { case 0x07:i=3;break; case 0x0b:i=2;break; case 0x0d:i=1;break; case 0x0e:i=0;break; default:break; } //反轉(zhuǎn)行列電平,讀行 P1 = 0xf0; switch(P1) { case 0x70:j=3;break; case 0xb0:j=2;break; case 0xd0:j=1;break; case 0xe0:j=0;break; default:break; } while(P1!=0xf0); //等待鍵釋放 return key_word[i][j];//返回鍵值 } |
![]()
|
![]() ![]()
|
個(gè)人覺得你的代碼邏輯有很大的問題,沒有理解按鍵檢測的原理。 首先,你定義了一個(gè)temp,然后P1=0x0f,怎么突然之間就跳到while(temp!=0x0f)了?中間不應(yīng)該有個(gè)temp=P1的過程? 其次,檢測到temp!=0x0f后,為什么讓P1=0xfe<<1?這也不會(huì)令P1最終得到真實(shí)的按鍵狀態(tài)啊。最終只會(huì)導(dǎo)致P1==0x00。 最后,switch(temp)這,temp并沒有得到真實(shí)的按鍵狀態(tài)(P1口)對(duì)應(yīng)的電平狀態(tài),自然會(huì)導(dǎo)致switch(temp)下面的語句沒起任何作用。 建議找本教材,比如郭天祥的,看看按鍵檢測的原理以及例程。或者看看視頻的講解,理解原理之后再寫代碼。 |
Powered by 單片機(jī)教程網(wǎng)