音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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è)置為輸入,用來掃描(依次輸入11101101,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
我也很菜。
我只學(xué)過C語言。沒學(xué)過C51提點我個人看法。我認為你的那句不太對
return(col+row);  開始你賦值col是0。而循環(huán)你是用colcount。變的值并不是col,我認為你把colcount改成col 看看可以不。;蛘吒某蓃eturn(colcount+row);  


3樓: >>參與討論
yuke
謝啦。
調(diào)試了半天,好象是接口問題~~~~~汗

4樓: >>參與討論
luhuaren
re
感覺你的鍵盤程序太難讀了  改改程序結(jié)構(gòu)吧

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
用什么方法可以實現(xiàn)按鈕的自鎖功能。ㄒ笞詈唵蔚模
新手請教幾個問題
PCF8583
我是新手,請大家?guī)蛶兔Γ?/a>
誰能用匯編把1869FH轉(zhuǎn)化成十進制的99999?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號