久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機4X4矩陣鍵盤掃描的proteus仿真和程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
4X4矩陣鍵盤掃描仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define SCANPORT P1
  5. sbit spk=P2^3;                                                                        //按鍵提示音驅動端口
  6. uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,
  7.                                          0x6d,0x7d,0x07,0x7f,0x6f,  //數碼管顯示代碼
  8.                                          0x77,0x7c,0x39,0x5e,0x79,
  9.                                          0x71};
  10. uchar a_LineScan[4]={0xEF,0xDF,0xBF,0x7F};            //列掃描賦值

  11. void delay(uchar x)
  12. {
  13.   uchar j;
  14.   while(x--)  
  15.   for(j=110;j>0;j--);
  16. }

  17. uchar KeyScan()                                                                    //掃描函數
  18. {
  19.         uchar Temp=0;                                 
  20.         uchar i=0,j=0;            

  21.         for(i=0;i<4;i++)       
  22.                 {
  23.                         SCANPORT=a_LineScan[i];                        //定義掃描端口          
  24.                         Temp=SCANPORT & 0x0F;                            //取低四位掃描信號
  25.                         if(Temp!=0)
  26.                         {
  27.                         delay(10);                                                    //消抖函數
  28.                         if(Temp!=0)
  29.                         {                                               
  30.                         if(Temp!=0x0F)                                             //掃描按鍵是否按下
  31.                                 {                                                                         
  32.                                 switch(Temp)
  33.                                         {
  34.                                         case 0x0E: j=10;break;            //第一列
  35.                                         case 0x0D: j=20;break;                //第二列
  36.                                         case 0x0B: j=30;break;                //第三列
  37.                                         case 0x07: j=40;break;                //第四列
  38.                                         default:   j=50;break;                //輸入錯誤
  39.                                         }
  40.                                 break;
  41.                                 }
  42.                         }
  43.                         }
  44.                 }
  45.         return i+j+1;                                                                 //送出返回值
  46. }
  47. void KeyProcess(unsigned char KeyCode)                    //數碼管顯示函數
  48. {
  49.                
  50.         switch(KeyCode)
  51.                 {                                                                                //j=10
  52.                 case 11:P0=table[0];spk=1;break;            //'0'
  53.                 case 12:P0=table[1];spk=1;break;                //'1'
  54.                 case 13:P0=table[2];spk=1;break;               
  55.                 case 14:P0=table[3];spk=1;break;               
  56.                                                                                                   //j=20
  57.                 case 21:P0=table[4];spk=1;break;                //'4'
  58.                 case 22:P0=table[5];spk=1;break;                //'5'
  59.                 case 23:P0=table[6];spk=1;break;
  60.                 case 24:P0=table[7];spk=1;break;
  61.                                                                                                   //j=30
  62.                 case 31:P0=table[8];spk=1;break;                //'8'
  63.                 case 32:P0=table[9];spk=1;break;                //'9'
  64.                 case 33:P0=table[10];spk=1;break;               
  65.                 case 34:P0=table[11];spk=1;break;               
  66.                                                                                                 //j=40
  67.                 case 41:P0=table[12];spk=1;break;                //'C'
  68.                 case 42:P0=table[13];spk=1;break;                //'d'
  69.                 case 43:P0=table[14];spk=1;break;               
  70.                 case 44:P0=table[15];spk=1;break;               

  71.                 default:break;                                                        //無法識別
  72.                 }
  73. }
  74. void main()
  75. {                                                                                                  
  76.         spk=0;                                                                                //揚聲器初始化
  77.         P0=0;
  78.         while(1)
  79.         {
  80.                 KeyProcess(KeyScan());
  81.                 spk=0;                                                                        //復位揚聲器
  82.         }
  83. }
復制代碼

所有資料51hei提供下載:

20161111144-李作鑫4×4鍵盤矩陣按鍵.rar (66.55 KB, 下載次數: 130)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:16695 發表于 2020-3-24 09:00 | 只看該作者
謝謝學習
回復

使用道具 舉報

板凳
ID:928738 發表于 2022-1-17 10:50 | 只看該作者
你好!請問一下,顏色怎么修改的?我試過了修改背景,但是沒有實現
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久99 | 欧美aaa一级片 | 亚洲国产精品一区二区久久 | 春色av| 欧美日本韩国一区二区 | 日韩乱码在线 | 久久这里只有 | 正在播放国产精品 | 国产91在线 | 亚洲 | 日日骚网 | 日本精品一区二区在线观看 | aaa一区| 精品电影| 成人免费黄视频 | 日本免费一区二区三区 | 九九久久99 | 久久青草av | 日本高清中文字幕 | 精品国产免费一区二区三区演员表 | 欧美精品在欧美一区二区 | 情侣黄网站免费看 | 一区二区三区在线观看视频 | 日本一区二区三区免费观看 | 国产精品亚洲精品久久 | 欧美精品网站 | 免费视频成人国产精品网站 | 国产一区 | 欧美日韩中文在线 | 精品在线一区二区三区 | 欧洲高清转码区一二区 | 7799精品视频天天看 | 国产乱xxav | 亚洲精品视频免费观看 | www.国产日本 | 日韩一区二区三区在线看 | 日韩在线免费视频 | 九九免费在线视频 | 我要看免费一级毛片 | 国产一级在线观看 | 亚洲久久在线 | 91视频大全|