標(biāo)題: 51單片機(jī)keypad鍵盤數(shù)據(jù)采集這個(gè)百思不得其解的問題 [打印本頁(yè)]

作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-3 21:58
標(biāo)題: 51單片機(jī)keypad鍵盤數(shù)據(jù)采集這個(gè)百思不得其解的問題
temp=KEY_ScanPort;                 //讀P1口      
        temp=temp&0xF0;
        temp=~((temp>>4)|0xF0);
        if(temp==1)
                key=0;
        else if(temp==2)
                key=1;
        else if(temp==4)
                key=2;
        else if(temp==8)
                key=3;
        
        KEY_ScanPort=0xFF;//去掉這一句,下面temp就采集不到正確數(shù)據(jù)了,為什么?
        
        KEY_ScanPort=0x0F; //   高四位置0,低四位設(shè)置為數(shù)據(jù)采集狀態(tài)            
         temp=KEY_ScanPort; //上面那句去掉,這里采集到的數(shù)據(jù)就是錯(cuò)的         
        temp=temp&0x0F;
        temp=~(temp|0xF0);        
        if(temp==1)
                key=key+0;
        else if(temp==2)
完整的代碼及電路在附件里。仿真觀察p2口數(shù)據(jù)顯示情況。如果去掉上面那一句,再對(duì)比觀察可知數(shù)據(jù)采集不正確。 keyboard.rar (72.86 KB, 下載次數(shù): 6)


作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-3 22:00
說明一下,不是延時(shí)等待電平穩(wěn)定問題。測(cè)試過了。
作者: cyi8    時(shí)間: 2024-11-4 08:22
回去好好看一下51單片機(jī)各口的定義,51單片機(jī)的各輸入輸出口只是準(zhǔn)雙向口,不是真正的雙向口,所以當(dāng)要接收外部數(shù)據(jù)輸入是,要先將輸入輸出口置1,然后讀取的數(shù)據(jù)才會(huì)正確,不置1的話,讀取到的數(shù)據(jù)就是內(nèi)部緩沖器的數(shù)據(jù),會(huì)不準(zhǔn)確,因?yàn)閮?nèi)部緩沖器的數(shù)據(jù)不一定是輸入的數(shù)據(jù),還有可能是內(nèi)部代碼產(chǎn)生的數(shù)據(jù)。
作者: lkc8210    時(shí)間: 2024-11-4 09:20
仿真不真,詳情看此貼:
解決某些版本Proteus陣列鍵盤失效的奇葩方法
作者: xiaobendan001    時(shí)間: 2024-11-4 09:42
這個(gè)不是前幾天剛問過?
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:12
cyi8 發(fā)表于 2024-11-4 08:22
回去好好看一下51單片機(jī)各口的定義,51單片機(jī)的各輸入輸出口只是準(zhǔn)雙向口,不是真正的雙向口,所以當(dāng)要接收 ...

KEY_ScanPort=0x0F; //   高四位置0,低四位設(shè)置為數(shù)據(jù)采集狀態(tài)
這一句,低4位就是置1,斷cmos門地,準(zhǔn)備好采集數(shù)據(jù)。   所以,不是你說的原因。
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:13
xiaobendan001 發(fā)表于 2024-11-4 09:42
這個(gè)不是前幾天剛問過?

謝謝還記得前面的問題。這個(gè)問題是新問題。跟前面那個(gè)不一樣。這次這個(gè)代碼是個(gè)很神奇的問題。
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:21
lkc8210 發(fā)表于 2024-11-4 09:20
仿真不真,詳情看此貼:
解決某些版本Proteus陣列鍵盤失效的奇葩方法

你這測(cè)試有意思。我還沒有去這么仿真測(cè)過。不過這自畫鍵盤,我畫過,沒有任何問題,所以沒有去進(jìn)一步研究。下次試試。這個(gè)帖子問的問題,只有才keypad這個(gè)鍵盤模板里才遇到。其它自畫鍵盤或真實(shí)鍵盤中,不存在這個(gè)問題的。所以,不知道是proteus 的keypad這個(gè)模型本身有問題還是,自己哪點(diǎn)沒有理解透。
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:24
cyi8 發(fā)表于 2024-11-4 08:22
回去好好看一下51單片機(jī)各口的定義,51單片機(jī)的各輸入輸出口只是準(zhǔn)雙向口,不是真正的雙向口,所以當(dāng)要接收 ...

KEY_ScanPort=0xFF;//真實(shí)鍵盤和其它仿真模型鍵盤,可以去掉這一句的。但keypad模型,刪除這一句,下面temp就采集不到正確數(shù)據(jù)了,為什么?
        
        KEY_ScanPort=0x0F; //   高四位置0,低四位設(shè)置為數(shù)據(jù)采集狀態(tài)            
         temp=KEY_ScanPort; //上面那句去掉,這里采集到的數(shù)據(jù)就是錯(cuò)的
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:24
這個(gè)還沒有解決,頂一下。
作者: 萬(wàn)家燈火51    時(shí)間: 2024-11-5 13:58
我把上面的問題,縮在這個(gè)圖片里,方便大家討論。如果刪掉,P3的值是0xf0.也就是P1,第二次讀不到按鍵數(shù)據(jù)。
作者: Graves    時(shí)間: 2024-11-5 17:11
既然都說真實(shí)鍵盤正常了,何必還糾結(jié)這個(gè)仿真?畢竟還得以實(shí)物為主。
作者: xiaobendan001    時(shí)間: 2024-11-6 07:35
萬(wàn)家燈火51 發(fā)表于 2024-11-5 13:13
謝謝還記得前面的問題。這個(gè)問題是新問題。跟前面那個(gè)不一樣。這次這個(gè)代碼是個(gè)很神奇的問題。

前幾天有人問過類似的問題,不是你問的,我是說那個(gè),你搜索一下就看到了。
作者: lkc8210    時(shí)間: 2024-11-6 11:01
萬(wàn)家燈火51 發(fā)表于 2024-11-5 13:21
你這測(cè)試有意思。我還沒有去這么仿真測(cè)過。不過這自畫鍵盤,我畫過,沒有任何問題,所以沒有去進(jìn)一步研究 ...

我仿真測(cè)試的就是自畫鍵盤啊,當(dāng)然keypad這個(gè)鍵盤模板也會(huì)出現(xiàn)同樣問題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1