|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
誰能告訴小弟的鍵盤掃描程序哪有問題? |
| 作者:yuke 欄目:單片機 |
使用的是ZILOG公司的L92CPU,I/O口為PC口。低4位定為高電平,設(shè)置為輸入狀態(tài),高4位設(shè)置為輸入,用來掃描(依次輸入1110,1101,1011,0111)。 以下是小弟的掃描程序,中斷源不夠,所以用掃描方式。使用中,大多數(shù)情況好使,但有時會出現(xiàn)列值加不上的問題(既0——15鍵碼的1,2,3返回0鍵,5,6,7返回4鍵……)。 //************************************** // // I/O口已設(shè)置好。 //************************************** uchar key_code(uchar keytype) {void delay (void); uchar key_sub(uchar pch); uchar key_scan(void); uchar code,sub,time=0; code=0; while(code==0) {if (time==0)update_ascii_time();time--; if(key_sub(0)!=0)//有鍵閉合 {delay(); delay(); if(key_sub(0)!=0) //延時后再判斷是否鍵閉合(去除抖動) {code=key_scan(); //得到鍵號 if (code==0xFF) //fail(鍵號為FF) code=0; //code=0 else //success {do {delay(); //判斷鍵釋放 sub=key_sub(0x00); } while(sub!=0); code=keyCodeTable[keytype][code]; } } else delay(); } else //無鍵閉合 delay(); } return(code); } uchar key_scan(void)//掃描得到鍵號 {uchar key_sub(uchar pch); uchar pcbuf,pch,col,row,colcount; pch=0xEF; //PC4=0(11101111) col=0; //鍵盤列 row=0; //鍵盤行 for (colcount=1;colcount<5;colcount++) //掃描列,共4列 {pcbuf=key_sub(pch);//PC高位賦值 if (pcbuf!=0) //PC值不為0,即有鍵按下 {while((pcbuf&0x01)==0) {pcbuf=pcbuf>>1;//換行 row+=4; //行值加4 } return(col+row); //掃描完.返回值 //break; colcount=5; } else //PC值為0,無鍵按下 {if (colcount<4) //4列未掃完,換列繼續(xù) {pch=pch<<1; col++; //列值加1 } else //4列掃完而無鍵按下,返回0xFF return(0xFF); } } } uchar key_sub(uchar pch) {uchar c; PC_DR=pch; //寫數(shù)到PC c=PC_DR; //讀PC c=(~c)&0x0F; return(c); //返回低4位反 } void delay (void)//延時程序 {uchar i; for(i=0;i<200;i++) {} } //********************************************* //********************************************* 剛畢業(yè),做東西很菜,望各 |
| 2樓: | >>參與討論 |
| 作者: wyz84557 于 2005/6/3 10:54:00 發(fā)布:
我也很菜。 我只學(xué)過C語言。沒學(xué)過C51提點我個人看法。我認為你的那句不太對 return(col+row); 開始你賦值col是0。而循環(huán)你是用colcount。變的值并不是col,我認為你把colcount改成col 看看可以不。;蛘吒某蓃eturn(colcount+row); |
|
| 3樓: | >>參與討論 |
| 作者: yuke 于 2005/6/4 13:45:00 發(fā)布:
謝啦。 調(diào)試了半天,好象是接口問題~~~~~汗 |
|
| 4樓: | >>參與討論 |
| 作者: luhuaren 于 2005/6/4 16:56:00 發(fā)布:
re 感覺你的鍵盤程序太難讀了 改改程序結(jié)構(gòu)吧 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |