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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4x4矩陣按鍵stm32程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:428545 發(fā)表于 2018-11-18 09:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
4x4矩陣按鍵stm32程序源碼  keil程序

單片機源程序如下:
  1. #include "key.h"

  2. /**
  3. ** PB5-PB8,列,輸出。 PB10-PB14,行,輸入
  4. **/
  5. void Key_Config(void)
  6. {
  7.    GPIO_InitTypeDef GPIO_InitStructure;   
  8.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  9.    
  10.          /********4行輸出*********/
  11.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
  12.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  13.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.    GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.          
  16.          /********4列輸入*********/
  17.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  18.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;         
  19.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.    GPIO_Init(GPIOB, &GPIO_InitStructure);       
  21. }

  22. int KeyScan(void)
  23. {
  24.    uchar KeyVal;
  25.        
  26.    GPIO_Write(GPIOB, (GPIOB->ODR & 0xf0ff | 0x0f00));         //不管其余12位0xf0ff,先讓PB8到PB11全部輸出高。
  27.           
  28.          if((GPIOB->IDR & 0xf000)==0x0000)                                                                    //如果PB12到PB15全為零則沒有按鍵按下
  29.                   return -1;
  30.          else
  31.          {       
  32.             Delay_ms(5);    //延時5ms去抖動
  33.             if((GPIOB->IDR & 0xf000)==0x0000)
  34.             return -1;
  35.          }
  36.          
  37.          GPIO_Write(GPIOB,(GPIOB->ODR & 0xf0ff | 0x0100));        //僅將PB8置高         
  38.          switch(GPIOB->IDR & 0xf000)        //第一行,由低到高,同理,不贅述
  39.          {
  40.              case 0x1000: KeyVal=0; break;
  41.                         case 0x2000: KeyVal=1;        break;
  42.                         case 0x4000: KeyVal=2;        break;
  43.                         case 0x8000: KeyVal=3;        break;
  44.    }
  45.          while((GPIOB->IDR & 0xf000)        > 0);     //等待按鍵釋放
  46.          
  47.          GPIO_Write(GPIOB,(GPIOB->ODR & 0xf0ff | 0x0200));        //僅將PB9置高
  48.                 switch(GPIOB->IDR & 0xf000)                        
  49.                 {
  50.                         case 0x1000: KeyVal=4;        break;
  51.                         case 0x2000: KeyVal=5;        break;
  52.                         case 0x4000: KeyVal=6;        break;
  53.                         case 0x8000: KeyVal=7;        break;
  54.                 }
  55.     while((GPIOB->IDR & 0xf000)        > 0);
  56.                
  57.           GPIO_Write(GPIOB,(GPIOB->ODR & 0xf0ff | 0x0400));        //僅將PB10置高
  58.                 switch(GPIOB->IDR & 0xf000)                        
  59.                 {
  60.                         case 0x1000: KeyVal=8;        break;
  61.                         case 0x2000: KeyVal=9;        break;
  62.                         case 0x4000: KeyVal=10;        break;
  63.                         case 0x8000: KeyVal=11;        break;
  64.                 }
  65.     while((GPIOB->IDR & 0xf000)        > 0);
  66.                
  67.           GPIO_Write(GPIOB,(GPIOB->ODR & 0xf0ff | 0x0800));        //僅將PB11置高
  68.                 switch(GPIOB->IDR & 0xf000)                        
  69.                 {
  70.                         case 0x1000: KeyVal=12;        break;
  71.                         case 0x2000: KeyVal=13;        break;
  72.                         case 0x4000: KeyVal=14;        break;
  73.                         case 0x8000: KeyVal=15;        break;
  74.                 }
  75.                 while((GPIOB->IDR & 0xf000)        > 0);
  76.           
  77.                 return KeyVal;
  78. }

  79. /************************************
  80. 按鍵表盤為:                0  1  2  3
  81.                                                         4  5  6  7
  82.                                                         8  9  10 11
  83.                                                         12 13 14 15
  84. ************************************/
  85. void GetKeyVal(void)
  86. {
  87.     int num;
  88.           num = KeyScan();
  89.           switch(num)
  90.           {
  91.         case 0: printf("0\n"); break;                                                                               
  92.                                 case 1: printf("1\n"); break;                                                                                 
  93.                                 case 2: printf("2\n"); break;                                                                               
  94.                                 case 3: printf("3\n"); break;                                                                               
  95.                                 case 4: printf("4\n"); break;                                                
  96.                                 case 5: printf("5\n"); break;                                                                               
  97.                                 case 6: printf("6\n"); break;                                                                               
  98.                                 case 7: printf("7\n"); break;                                                                        
  99.                                 case 8: printf("8\n"); break;                                                                                        
  100.                                 case 9: printf("9\n"); break;                                                                                                     
  101.                           case 10: printf("10\n"); break;                                                                                                      
  102.                                 case 11: printf("11\n"); break;                                                                              
  103.                                 case 12: printf("12\n"); break;                                                                                                      
  104.                           case 13: printf("13\n"); break;                                                                                                       
  105.                                 case 14: printf("14\n"); break;                                                                              
  106.                                 case 15: printf("15\n"); break;                                                                      
  107.     }
  108. }
復制代碼

所有資料51hei提供下載:
KEY4x4.rar (294.53 KB, 下載次數(shù): 146)


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

使用道具 舉報

沙發(fā)
ID:608923 發(fā)表于 2019-9-19 10:20 | 只看該作者
不行的啊
,還缺了一些東西
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久免费毛片精品 | 一区二区在线不卡 | 国产91在线播放 | 成人激情视频免费在线观看 | 亚洲+变态+欧美+另类+精品 | chinese中国真实乱对白 | a级黄色网 | 国产精品久久免费观看 | 日韩欧美在线一区 | 在线观看你懂的网站 | 四虎在线观看 | 久久免费精品视频 | 日韩欧美在线免费观看 | 九一在线 | 蜜月aⅴ国产精品 | 国产视频在线一区二区 | 欧美一级欧美一级在线播放 | 亚洲精品视频在线 | 国产欧美一区二区三区久久 | 日韩精品一区二区三区中文在线 | 成人免费淫片aa视频免费 | 国内自拍偷拍 | 伊人久操 | 在线91 | 久久精品亚洲精品 | 久久久精彩视频 | a级大片免费观看 | 一区二区三区国产视频 | a级大片免费观看 | 丝袜一区二区三区 | av在线天堂网 | 国产一区在线免费 | 九九精品久久久 | 热久久久| 国产欧美精品一区二区 | 亚洲aⅴ精品 | 成人综合视频在线观看 | 在线观看国产 | 欧美激情黄色 | 成人精品一区二区 | 久久久久国产精品午夜一区 |