找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7036|回復: 6
打印 上一主題 下一主題
收起左側

單片機矩形鍵盤

[復制鏈接]
跳轉到指定樓層
樓主
ID:128038 發(fā)表于 2016-6-25 19:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我想問一下為什麼接線端口 從10到17   32到39   是怎麼對應的   Rp1是電阻嗎  ?  有什麼作用  矩陣鍵盤的工作原理?  那邊是高點位這16個鍵盤都是表示的什麼數(shù)字
   


#define uchar unsigned char
#define uint  unsigned int
sbit we = P2^7;           這一行是什麼意思
sbit du = P2^6;
uchar code leddata[]={       這一行是什麼意思

                0x3F,  //"0"           這一行是什麼意思
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義

                         };
void delay(uint z)                       這一行是什麼意思
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}


uchar KeyScan()        //帶返回值的子函數(shù)
{
        uchar cord_l,cord_h;//聲明列線和行線的值的儲存變量
        P3 = 0x0f;//0000 1111
        if( (P3 & 0x0f) != 0x0f)//判斷是否有按鍵按下
        {
                delay(5);//軟件消抖
                if( (P3 & 0x0f) != 0x0f)//判斷是否有按鍵按下
                {
                          cord_h = P3 & 0x0f;// 儲存行線值
                          P3 = cord_l | 0xf0;
                          cord_l = P3 & 0xf0;// 儲存列線值
                          while( (P3 & 0xf0) != 0xf0 );//松手檢測
                          return (cord_l + cord_h);//返回鍵值碼
                }       
        }
               
}

void KeyPro()
{
        switch( KeyScan() )
        {
                 //第一行鍵值碼
                case 0xee: P0 = leddata[0];                break;          這一行是什麼意思   
                case 0xde: P0 = leddata[1];                break;
                case 0xbe: P0 = leddata[2];                break;
                case 0x7e: P0 = leddata[3];                break;
               
                //第二行鍵值碼
                case 0xed: P0 = leddata[4];                break;
                case 0xdd: P0 = leddata[5];                break;
                case 0xbd: P0 = leddata[6];                break;
                case 0x7d: P0 = leddata[7];                break;

                //第三行鍵值碼
                case 0xeb: P0 = leddata[8];                break;
                case 0xdb: P0 = leddata[9];                break;
                case 0xbb: P0 = leddata[10];        break;
                case 0x7b: P0 = leddata[11];        break;

                //第四行鍵值碼
                case 0xe7: P0 = leddata[12];        break;
                case 0xd7: P0 = leddata[13];        break;
                case 0xb7: P0 = leddata[14];        break;
                case 0x77: P0 = leddata[15];        break;
                //獨立鍵盤
                case 0xfe: P0 = leddata[16];        break;
                case 0xfd: P0 = leddata[17];        break;
                case 0xfb: P0 = leddata[18];        break;
                case 0xf7: P0 = leddata[19];        break;
        }       
}

void main()
{
        we = 1;//打開位選
        P0 = 0;//八位數(shù)碼管全顯示
        we = 0;//鎖存位選

        du = 1;//打開段選端
        P0 = leddata[22];
        while(1)
        {
               
                 KeyPro();//提取鍵值碼并且送不同數(shù)值給數(shù)碼管顯示



矩陣.jpg (11.69 KB, 下載次數(shù): 121)

矩陣.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:127330 發(fā)表于 2016-6-25 21:15 | 只看該作者
其實還可以加幾個數(shù)碼管的
回復

使用道具 舉報

板凳
ID:111634 發(fā)表于 2016-6-26 14:12 | 只看該作者
本帖最后由 zl2168 于 2016-6-26 14:13 編輯

實例62  4×4矩陣式鍵盤


Proteus仿真一下,確認有效。
實例62 4×4矩陣式鍵盤.rar (44.79 KB, 下載次數(shù): 17)



以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版

書中電路和程序設計有詳細說明,程序語句條條有注解。




回復

使用道具 舉報

地板
ID:111634 發(fā)表于 2016-6-26 14:14 | 只看該作者
本帖最后由 zl2168 于 2016-6-26 14:16 編輯

上述電路在許多單片機教材和技術資料中被介紹,但實際上該電路連接存在問題。當同一行有多鍵同時按下(帶鎖),且該行其中一鍵所在列又有多鍵同時按下時,會發(fā)生信號傳遞路徑出錯。例如,K1、K2、K8、K9同時按下,當P1.4行掃描輸出低電平時,按理,僅有P1.2、P1.1會因K2、K1閉合而得到低電平列信號。但由于K2與K9同列且K8與K9同行,P1.4輸出的低電平信號會通過K1→K9→K8傳遞到P1.0,產(chǎn)生低電平列信號,引起出錯。同理,當P1.6行掃描輸出低電平時,其低電平信號會通過K9→K1→K2傳遞到P1.2,產(chǎn)生低電平列信號,引起出錯。不出錯的條件是多鍵行與多鍵列不交叉。因此,這種矩陣式鍵盤電路適用于無鎖按鍵時相對合理。



以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


回復

使用道具 舉報

5#
ID:111634 發(fā)表于 2016-6-26 14:16 | 只看該作者
實例63  8279擴展8×8鍵盤和8位顯示


Proteus仿真一下,確認有效。
實例63 8279擴展鍵盤和顯示.rar (63.08 KB, 下載次數(shù): 6)







以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


書中電路和程序設計有詳細說明,程序語句條條有注解。


回復

使用道具 舉報

6#
ID:111634 發(fā)表于 2016-6-26 14:18 | 只看該作者
本帖最后由 zl2168 于 2016-6-26 14:25 編輯

實例64  74HC595+165擴展8×8鍵盤


Proteus仿真一下,確認有效。
實例64 74LS595 165擴展8×8鍵盤.rar (65.5 KB, 下載次數(shù): 6)






回復

使用道具 舉報

7#
ID:128038 發(fā)表于 2016-6-26 21:01 | 只看該作者
zl2168 發(fā)表于 2016-6-26 14:12
實例62  4×4矩陣式鍵盤

你好  
uchar KeyScan()        //帶返回值的子函數(shù)
{
        uchar cord_l,cord_h;//聲明列線和行線的值的儲存變量
        P3 = 0x0f;//0000 1111我把這行變成了P3 = 0xf0;//0000 1111,單片機應該有什麼變化?  我試驗了  沒找到呀
du = 1;//打開段選端
        P0 = leddata[22];而且 我把這行22  改成了 P0 = leddata[2]但是單片機根本沒變化  是怎麼回事?





回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表