欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6482|回復: 9
收起左側

單片機行列反轉法實現矩陣鍵盤掃描的源程序+仿真

[復制鏈接]
ID:531603 發表于 2019-5-28 17:53 | 顯示全部樓層 |閱讀模式
《上次發過一次,這次程序寫法不同。供大家參考參考》

//希望不要再有不懂裝懂的人再說成逐行掃描,不知道就不要瞎BB   (此行為注釋

*實現效果16個按鍵數碼管對應顯示0~f
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
1.png

程序:
  1. #include <reg51.h>

  2. void delay(unsigned int i)                //延時函數
  3. {
  4.         unsigned int k;
  5.         for(k = 0; k < i; k++);
  6. }

  7. unsigned char table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};                                        //數碼管顯示碼0~f
  8. unsigned char code key_code[] ={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};  //鍵盤掃描碼
  9. char keyscan();                //行列反轉法實現的矩陣鍵盤掃描函數


  10. void main()
  11. {
  12.         char i;
  13.         P0=0x00;
  14.         while(1)
  15.         {
  16.                 i=keyscan();
  17.                 if(i!=-1)                                                //當有按鍵被按下
  18.                 {
  19.                         P0=table[i];
  20.                         delay(10000);
  21.                 }
  22.         }
  23.         
  24. }


  25. char keyscan()
  26. {
  27.         char scan1,scan2,keycode,j,key;
  28.         key =-1;                                                                                                        //按鍵值初值為-1,如果沒有掃描到按鍵,函數返回-1
  29.         P2 =0xf0;                                                                                                        //寫:行為全1,列為全0
  30.         scan1 =P2;                                                                                                //讀:行列值
  31.         if(scan1 !=0xf0)                                                                        //如果讀入值不為0xf0,則表示有按鍵按下
  32.         {
  33.                 delay(1200);
  34.                 scan1 = P2;                                                                                        //再次讀入
  35.                 if(scan1 != 0xf0)                                                                //再次判斷是否有按鍵按下,去除抖動
  36.                 {
  37.                         P2 =0x0f;                                                                                        //行列反轉,寫:行為全0,列為全1
  38.                         scan2 =P2;                                                                                //讀入行列值
  39.                         keycode = scan1 | scan2;                        //合并行列值,得到掃描碼
  40.                         for(j=0;j<16;j++)                                                        //由掃描碼表得到按鍵值
  41.                         {        
  42.                                 if(keycode ==key_code[j])
  43.                                 {key =j;
  44.                                         break;
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49.         return (key);                //返回按鍵值
  50. }
復制代碼
全部資料51hei下載地址:
行列反轉法矩陣鍵盤掃描.rar (83.25 KB, 下載次數: 81)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:552373 發表于 2019-6-5 08:04 | 顯示全部樓層
仿真在哪里??里面只有c程序啊
回復

使用道具 舉報

ID:555241 發表于 2019-6-5 09:31 | 顯示全部樓層
這個怎么仿真操作啊
回復

使用道具 舉報

ID:555406 發表于 2019-6-5 11:04 | 顯示全部樓層
2,4,5,9,d, 都顯示不全
2.PNG
4.PNG
5.PNG
9.PNG
d.PNG
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
ID:531603 發表于 2019-6-30 10:34 | 顯示全部樓層
ywdmas 發表于 2019-6-5 11:04
2,4,5,9,d, 都顯示不全

顯示不全可能是單片機頻率不夠,或者限流電阻過大哈;再有可能就是該字符的顯示碼有錯誤喲,,可以再檢查檢查程序;;;我發的是沒問題的喲
2.png
4.png
5.png
9.png
d.png
回復

使用道具 舉報

ID:531603 發表于 2019-6-30 10:35 | 顯示全部樓層
2.png 4.png 5.png 9.png d.png

我發的是沒有問題的喲,顯示不全可能是字符碼有錯誤,或者電阻過大引起電流不夠造成的哈
回復

使用道具 舉報

ID:701002 發表于 2020-3-2 13:43 | 顯示全部樓層
這個仿真用proteus7.7打不開啊
回復

使用道具 舉報

ID:531603 發表于 2020-3-24 13:33 | 顯示全部樓層
huaxinfeng 發表于 2020-3-2 13:43
這個仿真用proteus7.7打不開啊

我用的是proteus8,7.7版本可能存在不兼容問題
回復

使用道具 舉報

ID:771701 發表于 2020-6-8 18:11 | 顯示全部樓層
{        
                                if(keycode ==key_code[j])
                                {key =j;
請問這三步是什么意思?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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