找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5315|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

新手自學(xué)求幫助!定時中斷掃描矩陣鍵盤。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:92512 發(fā)表于 2015-10-15 13:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用單片機(jī)定時中斷完成矩陣鍵盤的掃描,但是總是不對。下面是我的程序。求,高手指證。。!
(鍵盤我只用了前四個)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,0xef,
0xdf,0xbf,0x7f};

sbit dula=P2^6;
sbit wela=P2^7;



void delay(uint z)                 //延時函數(shù)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=114;y>0;y--);
}


void display(uchar num)
{          
                dula=1;
                P0=table[num];
                dula=0;
                P0=0xff;
               
                wela=1;
                P0=0xfe;
                wela=0;
                delay(5);       
}



void main()
{
        uchar num;
        TMOD=0x01;
     TH0=(65536-1000)/256;
     TL0=(65536-1000)%256;
     EA=1;
     ET0=1;
         TR0=1;
         while(1)
         {
                display(num);       
         }
         
                
         
         
       
}

void IT_0()interrupt 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        if((P1&0xf0)!=0xf0)
        {
                uchar temp,key;
                P3=0xfe;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        delay(5);
                        if(temp!=0xf0)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xee:
                                                key=0;
                                                break;
                                        case 0xde:
                                                key=1;
                                                break;
                                        case 0xbe:
                                                key=2;
                                                break;
                                        case 0x7e:
                                                key=3;
                                                break;
                                }       
                                while(temp!=0xf0)
                                {
                                        temp=P3;
                                        temp=temp&0xf0;
                                }
                       
                        display(key);       
                        }
                }
        }



}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:92512 發(fā)表于 2015-10-15 13:07 | 只看該作者
自己頂一下。
回復(fù)

使用道具 舉報

板凳
ID:92512 發(fā)表于 2015-10-15 13:14 | 只看該作者

求解答
回復(fù)

使用道具 舉報

地板
ID:7485 發(fā)表于 2015-10-15 14:40 | 只看該作者
定時器中斷間隔太短了,加大到20000~50000都可以。
回復(fù)

使用道具 舉報

5#
ID:92512 發(fā)表于 2015-10-15 18:19 | 只看該作者
ahshmj 發(fā)表于 2015-10-15 14:40
定時器中斷間隔太短了,加大到20000~50000都可以。

試了,不行啊,語法上有沒有什么錯誤?
回復(fù)

使用道具 舉報

6#
ID:27916 發(fā)表于 2015-10-16 09:03 | 只看該作者
呵呵,按鍵程序沒看懂哈
說一下顯示吧,每次給P0賦值都應(yīng)該延遲一定的時間喲,我看你給P0送了兩次值,在顯示的地方,但是前一次給完了馬上又在給一次了,,,這里我也不知道你要做什么
再,像你這個程序,不用在中斷里面調(diào)用display程序,你可以在程序里面改變num的值就可以了,當(dāng)然, NUM應(yīng)該要改成全局變量
回復(fù)

使用道具 舉報

7#
ID:92512 發(fā)表于 2015-10-25 18:43 | 只看該作者
青蘋果 發(fā)表于 2015-10-16 09:03
呵呵,按鍵程序沒看懂哈
說一下顯示吧,每次給P0賦值都應(yīng)該延遲一定的時間喲,我看你給P0送了兩次值,在顯 ...

嗯,搞好了
回復(fù)

使用道具 舉報

8#
ID:94113 發(fā)表于 2015-10-30 19:39 | 只看該作者
好吧 我也是新人
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表