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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32的4*4矩陣鍵盤驅動程序

  [復制鏈接]
跳轉到指定樓層
樓主
用于4*4矩陣鍵盤的驅動,可直接修改
添加很簡單,直接把.c和.h加上去就可以

該驅動是針對4x4矩陣鍵盤的,支持連按和不連按兩種模式
a=KEY_Scan(0);    調用它 0是不連按 1是連按

引腳根據需要自己自改,為了讓大家盡量不改引腳我選擇了不常用的8個連續引腳
矩陣鍵盤直接就可以插到咱們統一購買的最小系統版上

有關返回值說明:
正面朝上黑引腳為行,白引腳為列
1-9返回 1-9
A、B 、C 、D  分別返回 10 11 12 13
*為 14
#為 15
0為 16


引腳說明:
PB14
PD8 10 12 14
PG2 4 6
順著插就可以
無按鍵按下返回0


單片機源程序如下:
  1. /************************************************************
  2. 正面朝上黑引腳為行,白引腳為列
  3. A、B 、C 、D  分別返回 10 11 12 13
  4. *為 14
  5. #為 15
  6. 0為 16
  7. 無按鍵按下返回0
  8. *************************************************************/

  9. #include "key.h"
  10. #include "delay.h"
  11. //矩陣鍵盤引腳初始化
  12. void Key_init(void)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;

  15.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG,ENABLE);//使能PORTB,PORTD,PORTG時鐘
  16.         //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//關閉jtag,使能SWD,可以用SWD模式調試,引腳比較可能存在占用
  17.        
  18.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;                        //鍵盤輸出
  19.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  20.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  21.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  22.        
  23.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;  //鍵盤輸出
  24.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  25.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  26.         GPIO_Init(GPIOG,&GPIO_InitStructure);
  27.        
  28.        
  29.        
  30.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;                       //鍵盤輸入
  31.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  32.     GPIO_Init(GPIOB,&GPIO_InitStructure);
  33.        
  34.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_12; //鍵盤輸入
  35.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  36.     GPIO_Init(GPIOD,&GPIO_InitStructure);
  37.        
  38.        
  39.        
  40. }




  41. //mode:0,不支持連續按;1,支持連續按;
  42. u8 KEY_Scan(u8 mode)
  43. {
  44.         static u8 key0_up=1;//按鍵按松開標志
  45.         static u8 key1_up=1;//按鍵按松開標志
  46.         static u8 key2_up=1;//按鍵按松開標志
  47.         static u8 key3_up=1;//按鍵按松開標志
  48.         static u8 key4_up=1;//按鍵按松開標志
  49.         static u8 key5_up=1;//按鍵按松開標志
  50.         static u8 key6_up=1;//按鍵按松開標志
  51.         static u8 key7_up=1;//按鍵按松開標志
  52.         static u8 key8_up=1;//按鍵按松開標志
  53.         static u8 key9_up=1;//按鍵按松開標志
  54.         static u8 keyA_up=1;//按鍵按松開標志
  55.         static u8 keyB_up=1;//按鍵按松開標志
  56.         static u8 keyC_up=1;//按鍵按松開標志
  57.         static u8 keyD_up=1;//按鍵按松開標志
  58.         static u8 keyX_up=1;//按鍵按松開標志
  59.         static u8 keyJ_up=1;//按鍵按松開標志
  60.        
  61.         if(mode)
  62.         {
  63.                 key0_up=1;
  64.         key1_up=1;
  65.             key2_up=1;
  66.         key3_up=1;
  67.         key4_up=1;
  68.         key5_up=1;
  69.         key6_up=1;
  70.         key7_up=1;
  71.         key8_up=1;
  72.         key9_up=1;
  73.         keyA_up=1;
  74.         keyB_up=1;
  75.         keyC_up=1;
  76.         keyD_up=1;
  77.         keyX_up=1;
  78.         keyJ_up=1;       
  79.         }
  80.        
  81.     //第一行
  82.         Hang_00_L;//把第一行輸出低電平
  83.         Hang_01_H;
  84.         Hang_02_H;
  85.         Hang_03_H;
  86.                 if(key1_up&&Lie_00_V==0)
  87.                 {   
  88.                    delayMs(jpys); //延時20秒,軟件消抖
  89.                        
  90.                    key1_up=0;
  91.                    if(Lie_00_V==0) //如果第一列是低電平,說明有鍵被按下,如果沒有直接退出if語句
  92.                    {
  93.                           return 1;
  94.                    }
  95.                 }else if(Lie_00_V==1)key1_up=1;
  96.          
  97.                 if(key2_up&&Lie_01_V==0)//如果第二列是低電平,
  98.                 {   
  99.                    delayMs(jpys);//延時20秒,軟件消抖
  100.                    key2_up=0;
  101.                    if(Lie_01_V==0)//如果第二列是低電平,說明有鍵被按下,如果沒有直接退出if語句
  102.                    {
  103.                           return 2;
  104.                    }
  105.                 }else if(Lie_01_V==1)key2_up=1;
  106.          
  107.                 if(key3_up&&Lie_02_V==0)
  108.                 {   
  109.                    delayMs(jpys);
  110.                    key3_up=0;
  111.                    if(Lie_02_V==0)
  112.                    {
  113.                           return 3;
  114.                    }
  115.                 }else if(Lie_02_V==1)key3_up=1;
  116.          
  117.                 if(keyA_up&&Lie_03_V==0)//如果第四列是低電平
  118.                 {   
  119.                    delayMs(jpys);
  120.                    keyA_up=0;
  121.                    if(Lie_03_V==0)//如果第四列是低電平,說明有鍵被按下,如果沒有直接退出if語句
  122.                    {
  123.                           return 10;
  124.                    }
  125.                 }else if(Lie_03_V==1)keyA_up=1;

  126.         //第二行
  127.         Hang_00_H;
  128.         Hang_01_L;//把第二行拉低
  129.         Hang_02_H;
  130.         Hang_03_H;
  131.                 if(key4_up&&Lie_00_V==0)//如果第一列是低電平
  132.                 {   
  133.                    delayMs(jpys);
  134.                    key4_up=0;
  135.                    if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
  136.                    {
  137.                                 return 4;
  138.                    }
  139.                 }else if(Lie_00_V==1)key4_up=1;
  140.                  
  141.                 if(key5_up&&Lie_01_V==0)
  142.                 {   
  143.                    delayMs(jpys);
  144.                    key5_up=0;
  145.                    if(Lie_01_V==0)
  146.                    {
  147.                        return 5;
  148.                    }
  149.                 }else if(Lie_01_V==1)key5_up=1;
  150.                  
  151.                 if(key6_up&&Lie_02_V==0)
  152.                 {   
  153.                    delayMs(jpys);
  154.                    key6_up=0;
  155.                    if(Lie_02_V==0)
  156.                    {
  157.                            return 6;
  158.                    }
  159.                 }else if(Lie_02_V==1)key6_up=1;
  160.                  
  161.                 if(keyB_up&&Lie_03_V==0)
  162.                 {   
  163.                    delayMs(jpys);
  164.                    keyB_up=0;
  165.                    if(Lie_03_V==0)
  166.                    {
  167.                        return 11;  
  168.                    }
  169.                 }else if(Lie_03_V==1)keyB_up=1;

  170.         //第三行
  171.         Hang_00_H;
  172.         Hang_01_H;
  173.         Hang_02_L;//把第三行置低
  174.         Hang_03_H;
  175.                 if(key7_up&&Lie_00_V==0) //如果第一列是低電平
  176.                 {   
  177.                    delayMs(jpys);//延時20秒
  178.                    key7_up=0;
  179.                    if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
  180.                    {
  181.                            return 7;
  182.                    }
  183.                 }else if(Lie_00_V==1)key7_up=1;
  184.                  
  185.                 if(key8_up&&Lie_01_V==0)
  186.                 {   
  187.                    delayMs(jpys);
  188.                    key8_up=0;
  189.                    if(Lie_01_V==0)
  190.                    {
  191.                        return 8;
  192.                    }
  193.                 }else if(Lie_01_V==1)key8_up=1;
  194.                  
  195.                 if(key9_up&&Lie_02_V==0)
  196.                 {   
  197.                    delayMs(jpys);
  198.                    key9_up=0;
  199.                    if(Lie_02_V==0)
  200.                    {
  201.                        return 9;
  202.                    }
  203.                 }else if(Lie_02_V==1)key9_up=1;
  204.                  
  205.                 if(keyC_up&&Lie_03_V==0)
  206.                 {   
  207.                    delayMs(jpys);
  208.                    keyC_up=0;
  209.                    if(Lie_03_V==0)
  210.                    {
  211.                        return 12;
  212.                    }
  213.                 }else if(Lie_03_V==1)keyC_up=1;

  214.         //第四行
  215.         Hang_00_H;
  216.         Hang_01_H;
  217.         Hang_02_H;
  218.         Hang_03_L;//把第四行置低
  219.                 if(keyX_up&&Lie_00_V==0)//如果第一列是低電平
  220.                 {   
  221.                    delayMs(jpys);
  222.                    keyX_up=0;
  223.                    if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
  224.                    {
  225.                        return 14;
  226.                    }
  227.                 }else if(Lie_00_V==1)keyX_up=1;
  228.                  
  229.                 if(key0_up&&Lie_01_V==0)
  230.                 {   
  231.                    delayMs(10);
  232.                    key0_up=0;
  233.                    if(Lie_01_V==0)
  234.                    {
  235.                        return 16;
  236.                    }
  237.                 }else if(Lie_01_V==1)key0_up=1;
  238. ……………………

  239. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
TopApex_4x4矩陣鍵盤.rar (355.67 KB, 下載次數: 701)






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

使用道具 舉報

沙發
ID:298924 發表于 2018-3-29 15:47 | 只看該作者
stm32能用么
...
回復

使用道具 舉報

板凳
ID:301979 發表于 2018-4-5 09:59 | 只看該作者
為什么回復的人不多?
回復

使用道具 舉報

地板
ID:317046 發表于 2018-4-26 15:09 | 只看該作者
好嗎?
回復

使用道具 舉報

5#
ID:21025 發表于 2018-5-15 14:52 | 只看該作者
下載看看,可能會有幫助
回復

使用道具 舉報

6#
ID:74949 發表于 2018-6-4 10:18 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:330367 發表于 2018-6-4 17:18 來自觸屏版 | 只看該作者
厲害,這么復雜,比51麻煩多了
回復

使用道具 舉報

8#
ID:247945 發表于 2018-6-7 22:42 | 只看該作者
請問用的都是什么版本的開發軟件
回復

使用道具 舉報

9#
ID:354323 發表于 2018-6-19 16:22 | 只看該作者
謝謝分享!!
回復

使用道具 舉報

10#
ID:360147 發表于 2018-6-27 12:00 | 只看該作者
不錯不錯
回復

使用道具 舉報

11#
ID:365579 發表于 2018-7-15 19:52 | 只看該作者
這個是STM32的代碼么??
回復

使用道具 舉報

12#
ID:376111 發表于 2018-8-17 15:00 | 只看該作者
謝謝分享
回復

使用道具 舉報

13#
ID:385388 發表于 2018-8-22 18:08 | 只看該作者
嵌套在 SWITCH內就不行了

WHILE()
{
     SCANKEY();
     執行鍵盤輸入語句;  //這個地方的程序可以正常實現鍵盤輸入功能
      SWITCH(SCANKEY())
           {
                CASE 16: 執行鍵盤輸入語句;//這個地方的同樣的語句不能正常實現鍵盤輸入功能,值永遠都是16
          }
}
回復

使用道具 舉報

14#
ID:88787 發表于 2018-9-1 21:43 | 只看該作者
謝謝,這么好的代碼
回復

使用道具 舉報

15#
ID:88787 發表于 2018-9-1 21:56 | 只看該作者
謝謝分享!
回復

使用道具 舉報

16#
ID:393077 發表于 2018-9-3 17:52 | 只看該作者
謝謝分享!
回復

使用道具 舉報

17#
ID:347371 發表于 2018-11-28 17:57 | 只看該作者
還行,有點復雜,但是功能看起來挺全
回復

使用道具 舉報

18#
ID:278722 發表于 2018-11-29 16:00 | 只看該作者
下來看看
回復

使用道具 舉報

19#
ID:435881 發表于 2018-11-29 16:52 | 只看該作者
謝謝分享
回復

使用道具 舉報

20#
ID:496939 發表于 2019-3-24 00:54 | 只看該作者
怎么根本就不管用,我想知道主函數是什么
回復

使用道具 舉報

21#
ID:151151 發表于 2019-4-12 19:16 | 只看該作者
試一下看看可以用嗎
回復

使用道具 舉報

22#
ID:128463 發表于 2019-4-13 10:05 | 只看該作者

謝謝分享!
回復

使用道具 舉報

23#
ID:413504 發表于 2019-5-5 20:54 | 只看該作者
謝謝分享!
回復

使用道具 舉報

24#
ID:434759 發表于 2019-5-17 17:56 | 只看該作者
感覺太復雜了
回復

使用道具 舉報

25#
ID:543162 發表于 2019-6-1 17:44 | 只看該作者
謝謝分享
回復

使用道具 舉報

26#
ID:581729 發表于 2019-7-11 20:43 | 只看該作者
為什么下不了呢
回復

使用道具 舉報

27#
ID:597469 發表于 2019-8-8 09:26 | 只看該作者
感謝分享!
回復

使用道具 舉報

28#
ID:367448 發表于 2019-8-8 16:43 | 只看該作者
謝謝分享!
回復

使用道具 舉報

29#
ID:595740 發表于 2019-8-9 00:35 | 只看該作者
您好,請問如何使用矩陣鍵盤輸入任意值呀
回復

使用道具 舉報

30#
ID:597761 發表于 2019-8-9 08:05 | 只看該作者
謝謝分享
回復

使用道具 舉報

31#
ID:455112 發表于 2019-8-9 13:07 | 只看該作者
厲害厲害
回復

使用道具 舉報

32#
ID:552668 發表于 2019-8-9 15:10 | 只看該作者
學習一下,謝謝分享
回復

使用道具 舉報

33#
ID:373892 發表于 2019-8-9 21:01 | 只看該作者
謝謝學習一下,謝謝分享
回復

使用道具 舉報

34#
ID:373892 發表于 2019-8-9 21:02 | 只看該作者
沒積分咋辦
回復

使用道具 舉報

35#
ID:667065 發表于 2019-12-18 10:29 | 只看該作者

感覺很好用,謝謝大佬分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久a丨 | 国产一区二区自拍 | 精品亚洲一区二区三区 | 一区二区三区日 | 久久福利电影 | 999热精品 | 97av视频在线 | 国产99久久精品一区二区300 | 欧美色999| 久久精品成人 | 欧美一区二区三区久久精品 | 国产三级电影网站 | 国产精品久久久久久52avav | 国产欧美日韩精品一区 | 亚洲精品9999久久久久 | 中文字幕av一区 | 久久亚洲国产精品 | 超碰在线播 | 国产色婷婷精品综合在线播放 | 久久99精品久久久久久噜噜 | 国产视频中文字幕在线观看 | 国产高清免费 | 免费在线a视频 | 黄色成人在线观看 | 国产一区二区欧美 | 在线看片福利 | 日本免费视频 | 亚洲精品一区二区冲田杏梨 | 精品成人免费一区二区在线播放 | 国产精品久久久久久久7电影 | 国产成人精品网站 | 久久久久久久久淑女av国产精品 | 日韩一区二区三区四区五区 | 欧美日产国产成人免费图片 | 国产99久久精品一区二区永久免费 | 亚洲国产精品一区二区三区 | 欧美精品一级 | 99精品一区二区三区 | 日日操网站 | 国产精品毛片一区二区三区 | 狠狠爱免费视频 |