標(biāo)題: 新人求助:做一個(gè)4*4矩陣鍵盤(pán)按鍵識(shí)別的仿真和編程,可是弄完還是仿真不了 [打印本頁(yè)]

作者: xjacob    時(shí)間: 2018-3-19 13:11
標(biāo)題: 新人求助:做一個(gè)4*4矩陣鍵盤(pán)按鍵識(shí)別的仿真和編程,可是弄完還是仿真不了

這是仿真原理圖


#include<reg51.h>
void delay_5ms()
{
        unsigned char i,j;
        for(i=0;i<=25;i++)
          for(j=0;j<=200;j++);
}
unsigned char key_scan()
{
        unsigned char key_temp0,key_temp1;
        unsigned char key_num=0;
        P1=0x0f;
        key_temp0=P1;
        if(key_temp0!=0x0f)
        {
                delay_5ms();
                key_temp0=P1;
                if(key_temp0!=0x0f)
                {
                        P1=0xf0;
                        key_temp1=P1;
                        if(key_temp0==0x0e)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=4;break;
                                        case 0xd0: key_num=3;break;
                                        case 0xb0: key_num=2;break;
                                        case 0x70: key_num=1;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x0d)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=8;break;
                                        case 0xd0: key_num=7;break;
                                        case 0xb0: key_num=6;break;
                                        case 0x70: key_num=5;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x0b)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=12;break;
                                        case 0xd0: key_num=11;break;
                                        case 0xb0: key_num=10;break;
                                        case 0x70: key_num=9;break;
                                        default:key_num=0;break;
                                }
                        }
                        else if(key_temp0==0x07)
                        {
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=16;break;
                                        case 0xd0: key_num=15;break;
                                        case 0xb0: key_num=14;break;
                                        case 0x70: key_num=13;break;
                                        default:key_num=0;break;
                                }
                        }
                }
        }
return key_num;
}
void main()
{
        unsigned char key_num;
        do
        {
                key_num=key_scan();
                P2=key_num/10;
                P3=key_num%10;
        }while(1);
}



這是程序代碼


不知道錯(cuò)在哪里,很迷茫,在這里請(qǐng)教各位大神了

作者: xjacob    時(shí)間: 2018-3-19 13:15
要實(shí)現(xiàn)按下按鍵1時(shí)顯示1, 按下2時(shí)顯示2......按下16時(shí)顯示16
作者: wildxie    時(shí)間: 2018-3-19 14:58
你要把你的問(wèn)題說(shuō)清楚,是按鍵沒(méi)反應(yīng),還是不顯示,還是什么?   一步一步的排除問(wèn)題,先是把主程序里面的keynum設(shè)置成全局變量隨便賦一個(gè)值,屏蔽按鍵掃描,先看看能不能顯示你設(shè)置的值,能顯示再處理按鍵
作者: xjacob    時(shí)間: 2018-3-19 15:17
wildxie 發(fā)表于 2018-3-19 14:58
你要把你的問(wèn)題說(shuō)清楚,是按鍵沒(méi)反應(yīng),還是不顯示,還是什么?   一步一步的排除問(wèn)題,先是把主程序里面的ke ...

調(diào)試的時(shí)候沒(méi)有顯示
作者: QWER01234    時(shí)間: 2018-3-19 15:59
key_temp1=P1;
                        if(key_temp0==0x0e)
                        {
                                 key_temp1=P1;//新加的
                                switch(key_temp1)
                                {
                                        case 0xe0: key_num=4;break;
                                        case 0xd0: key_num=3;break;
                                        case 0xb0: key_num=2;break;
                                        case 0x70: key_num=1;break;
                                        default:key_num=0;break;
                                }
                        }
四段都是同樣的問(wèn)題以這段為例,我講一下我看出的問(wèn)題,首先你在switch之前應(yīng)當(dāng)對(duì) key_temp1賦值,如果不賦值的話(huà)你可以debuy一下應(yīng)該key_temp1都是0xf0,你可以試一下看
作者: wildxie    時(shí)間: 2018-3-19 17:02
剛剛沒(méi)注意看圖,74LS47下面的幾個(gè)pin都要拉高,然后key_num/10和%10得到的是十進(jìn)制數(shù),要轉(zhuǎn)換成BCD碼(8421最常用)發(fā)給74LS47,可以先用撥碼開(kāi)關(guān)把顯示調(diào)試好
作者: zl2168    時(shí)間: 2018-3-19 21:10
本帖最后由 zl2168 于 2018-3-19 21:11 編輯

實(shí)例75  4×4矩陣式鍵盤(pán)
Proteus仿真一下,確認(rèn)有效。
實(shí)例75 4×4矩陣式鍵盤(pán).rar (44.8 KB, 下載次數(shù): 30)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1.。書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。





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