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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7782|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久精品一区二区三区 | 色婷婷亚洲 | 一本一道久久a久久精品蜜桃 | 中文视频在线 | 综合久久av | jizz视频 | 99国内精品久久久久久久 | 国产精品久久久久久久久久 | 一区二区精品 | 美女久久久久久久 | 日韩一区二区三区在线观看 | 成人h视频在线 | 欧美激情在线精品一区二区三区 | 久久精品99 | 国产精品免费播放 | 狠狠干天天干 | 国内精品一区二区三区 | 国产精品99久久久精品免费观看 | www.99精品 | 黄色一级视频 | 精品视频网 | 91直接看| 日韩av在线一区 | 久久久久久av | 日韩欧美一区二区在线播放 | 国产精品国产精品国产专区不卡 | 在线永久看片免费的视频 | 国产精品夜夜夜一区二区三区尤 | 国产一区二区在线播放视频 | 伊人久久免费视频 | 婷婷久久五月天 | 91亚洲国产成人精品一区二三 | 欧美aⅴ | 午夜精品一区二区三区在线 | 日韩精品在线一区 | 精品国产91乱码一区二区三区 | 男人的天堂在线视频 | 欧美综合国产精品久久丁香 | 欧美成人一区二区三区 | 亚洲三区在线观看 | 青娱乐国产 |