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

標(biāo)題: 4x4矩陣按鍵stm32程序源碼 [打印本頁]

作者: sunfangming    時間: 2018-11-18 09:51
標(biāo)題: 4x4矩陣按鍵stm32程序源碼
4x4矩陣按鍵stm32程序源碼  keil程序

單片機(jī)源程序如下:
  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. }
復(fù)制代碼

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



作者: 51黑科技1314    時間: 2019-9-19 10:20
不行的啊
,還缺了一些東西





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲午夜小视频 | 国产伦精品一区二区三区高清 | 亚洲一区二区av在线 | 成人在线观看免费爱爱 | 国产免费xxx| 国产高清无av久久 | 亚洲精品在| 国产精品成av人在线视午夜片 | 日韩欧美视频 | 黄色国产在线播放 | 欧美日韩视频在线第一区 | 国产探花在线精品一区二区 | 韩国主播午夜大尺度福利 | 人人澡视频 | 在线观看av中文字幕 | 91精品国产91久久久久游泳池 | 欧美无乱码久久久免费午夜一区 | 九九九久久国产免费 | 麻豆久久久久 | 免费观看黄色片视频 | 午夜影院在线观看 | 国产精品日产欧美久久久久 | 国产精品不卡 | 久久精品小视频 | 国产欧美一区二区三区免费 | 欧美一区中文字幕 | 中文字幕日韩欧美 | 黄色av网站在线免费观看 | 人人鲁人人莫人人爱精品 | 91久久北条麻妃一区二区三区 | 91国内精品久久 | 国产亚洲精品a | 亚洲高清在线免费观看 | 亚洲一区二区三区四区五区中文 | av香港经典三级级 在线 | 亚洲综合五月天婷婷 | 在线精品亚洲欧美日韩国产 | 国产在线精品一区二区 | 欧美日韩一区在线观看 | 日本精品视频 | 亚洲永久免费观看 |