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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2916|回復: 3
收起左側

用51單片機矩陣鍵盤輸出0~F到靜態數碼管

[復制鏈接]
ID:372961 發表于 2018-7-17 01:09 | 顯示全部樓層 |閱讀模式
  1. /*******************************************************************************
  2. *  標題:                  矩陣鍵盤顯示數字到靜態數碼管                         *
  3. *  時間                      2018年7月17日00:45:03                                                   *
  4. *                                                                                                                                                           *
  5. *  實驗說明:用矩陣鍵盤上的16個按鍵,分別為0、1、3、4、5、6、7、8、9、a、b、c  *
  6. d、e、f顯示到靜態數碼管上                                   *                                   *
  7. ********************************************************************************
  8. * 實驗心得:                                                                                                                               *
  9. 1.測試行(row)的時候就是線是豎著的的那一列為1,測試列(col)的時候就是                   *
  10. 線是橫著的那幾行為1                                                                                                                           *
  11. 2.調用函數void KeyScan(void);時,調用的時候只需要寫KeyScan就行,不然調試不成功 *
  12. ********************************************************************************/


  13. #include <reg52.h>

  14. #define GPIO_KEY P1
  15. #define GPIO_SHOW P2

  16. unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
  17.                                  0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
  18. void KeyScan(void);
  19. void Delay10ms(unsigned int c);
  20. unsigned int KeyValue=-1;
  21. void main()
  22. {

  23.    while(1)
  24.   {
  25.      
  26.     KeyScan();
  27.         switch(KeyValue)
  28.         {
  29.                  case(0):
  30.                  P2=~DIG_CODE[0];
  31.                  break;       
  32.                  case(1):
  33.                  P2=~DIG_CODE[1];
  34.                  break;
  35.                  case(2):
  36.                  P2=~DIG_CODE[2];
  37.                  break;       
  38.                  case(3):
  39.                  P2=~DIG_CODE[3];
  40.                  break;       
  41.                  case(4):
  42.                  P2=~DIG_CODE[4];
  43.                  break;       
  44.                  case(5):
  45.                  P2=~DIG_CODE[5];
  46.                  break;       
  47.                  case(6):
  48.                  P2=~DIG_CODE[6];
  49.                  break;       
  50.                  case(7):
  51.                  P2=~DIG_CODE[7];
  52.                  break;       
  53.                  case(8):
  54.                  P2=~DIG_CODE[8];
  55.                  break;       
  56.                  case(9):
  57.                  P2=~DIG_CODE[9];
  58.                  break;       
  59.                  case(10):
  60.                  P2=~DIG_CODE[10];
  61.                  break;       
  62.                  case(11):
  63.                  P2=~DIG_CODE[11];
  64.                  break;       
  65.                  case(12):
  66.                  P2=~DIG_CODE[12];
  67.                  break;       
  68.                  case(13):
  69.                  P2=~DIG_CODE[13];
  70.                  break;       
  71.                  case(14):
  72.                  P2=~DIG_CODE[14];
  73.                  break;       
  74.                  case(15):
  75.                  P2=~DIG_CODE[15];
  76.                  break;       
  77.                  default:
  78.                  P2=~DIG_CODE[1];
  79.                  break;
  80.         }

  81.    


  82.         /******************************************************
  83.         *******************************************************
  84.         if語句的算法
  85.          if(KeyValue==0)
  86.          P2=~DIG_CODE[0];
  87.          if(KeyValue==1)
  88.          P2=~DIG_CODE[1];
  89.          if(KeyValue==2)
  90.          P2=~DIG_CODE[2];
  91.          if(KeyValue==3)
  92.          P2=~DIG_CODE[3];
  93.          if(KeyValue==4)
  94.          P2=~DIG_CODE[4];
  95.          if(KeyValue==5)
  96.          P2=~DIG_CODE[5];
  97.          if(KeyValue==6)
  98.          P2=~DIG_CODE[6];
  99.          if(KeyValue==7)
  100.          P2=~DIG_CODE[7];
  101.          if(KeyValue==8)
  102.          P2=~DIG_CODE[8];
  103.          if(KeyValue==9)
  104.          P2=~DIG_CODE[9];
  105.          if(KeyValue==10)
  106.          P2=~DIG_CODE[10];
  107.          if(KeyValue==11)
  108.          P2=~DIG_CODE[11];
  109.          if(KeyValue==12)
  110.          P2=~DIG_CODE[12];
  111.          if(KeyValue==13)
  112.          P2=~DIG_CODE[13];
  113.          if(KeyValue==14)
  114.          P2=~DIG_CODE[14];
  115.          if(KeyValue==15)
  116.          P2=~DIG_CODE[15];
  117.         *************************************************/
  118.    }
  119. }

  120. void KeyScan(void)          //測試行(row)的時候就是線是豎著的的那一列為1,測試列(col)的時候就是線是橫著的那幾行為1
  121. {
  122.         char a = 0;
  123.         GPIO_KEY=0x0f;
  124.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  125.         {
  126.                 Delay10ms(1);//延時10ms進行消抖
  127.                 if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
  128.                 {
  129.                        
  130.                         //測試列
  131.                         GPIO_KEY=0X0F;
  132.                         switch(GPIO_KEY)
  133.                         {
  134.                                 case(0X07):        KeyValue=0;break;
  135.                                 case(0X0b):        KeyValue=4;break;
  136.                                 case(0X0d): KeyValue=8;break;
  137.                                 case(0X0e):        KeyValue=12;break;
  138.                         }
  139.                         //測試行
  140.                         GPIO_KEY=0XF0;
  141.                         switch(GPIO_KEY)
  142.                         {
  143.                                 case(0X70):        KeyValue=KeyValue+3;break;
  144.                                 case(0Xb0):        KeyValue=KeyValue+2;break;
  145.                                 case(0Xd0): KeyValue=KeyValue+1;break;
  146.                                 case(0Xe0):        KeyValue=KeyValue;break;
  147.                         }
  148.                         while((a<50) && (GPIO_KEY!=0xf0))         //檢測按鍵松手檢測
  149.                         {
  150.                                 Delay10ms(1);
  151.                                 a++;
  152.                         }
  153.                 }
  154.         }
  155. }

  156. /*******************************************************************************
  157. * 函 數 名         : Delay10ms
  158. * 函數功能                   : 延時函數,延時10ms
  159. * 輸    入         : 無
  160. * 輸    出         : 無
  161. *******************************************************************************/

  162. void Delay10ms(unsigned int c)   //誤差 0us
  163. {
  164.     unsigned char a, b;

  165.         //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
  166.     for (;c>0;c--)
  167.         {
  168.                 for (b=38;b>0;b--)
  169.                 {
  170.                         for (a=130;a>0;a--);
  171.                 }         
  172.         }      
  173. }

復制代碼


矩陣鍵盤.rar

16.42 KB, 下載次數: 14, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-7-17 02:22 | 顯示全部樓層
樓主補一下原理圖吧
回復

使用道具 舉報

ID:372961 發表于 2018-7-17 18:48 | 顯示全部樓層
程序有點啰嗦了,今天發現,有可以優化的地放
回復

使用道具 舉報

ID:372961 發表于 2018-7-17 20:11 | 顯示全部樓層
admin 發表于 2018-7-17 02:22
樓主補一下原理圖吧

額,重新補發了一篇
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费观看www7722午夜电影 | 天天久久 | 亚洲精品久久久久久久不卡四虎 | 久久国产综合 | 三级av网址 | xx视频在线 | 亚洲精品国产成人 | 久久欧美精品 | 国产乱码精品一品二品 | 亚洲精品乱码久久久久久按摩观 | 成人免费观看男女羞羞视频 | 日韩成人在线免费视频 | 男女黄网站 | 国产一区不卡 | 超碰天天 | 99精品国产在热久久 | 色综合99| 五月激情综合 | 欧美成人aaa级毛片在线视频 | 视频二区在线观看 | 国产毛片久久久久久久久春天 | 中文字幕在线一区 | 91中文字幕在线观看 | 国产激情91久久精品导航 | 亚洲精品国产成人 | 91精品久久久久久久久中文字幕 | 亚洲综合99 | 精品久久久久香蕉网 | 97精品超碰一区二区三区 | 久在线视频播放免费视频 | 日韩精品一区二区三区免费视频 | 久久综合久久综合久久 | 国产成人免费在线 | 亚洲精品成人av久久 | 中文字幕第一页在线 | 中文字幕 国产精品 | 91视频在线| 国产日韩免费视频 | 日韩电影免费观看中文字幕 | 午夜影院视频 | 一区二区影院 |