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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于4x4矩陣鍵盤單片機代碼修改,小白求助

[復制鏈接]
跳轉到指定樓層
樓主
問題:圖一是我仿真使用的矩陣鍵盤,仿真正常使用。在某一個寶買了一個圖二的矩陣鍵盤,行列原理圖是反著的請問我該如何修改我的單片機代碼
  1. #include "button.h"
  2. #include "stm32f10x.h"
  3. #include "delay.h"

  4. extern u8 pass_word_state;        //輸密碼時判斷是輸入了第幾位
  5. u8 Key_Data=0;  //按鍵按下的數據
  6. u8 Key_flag=0;  //按鍵按下標志位,區分按鍵按下一次的


  7. void KEY_Init(void)
  8. {
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);//開啟時鐘
  12.         
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  14.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //改變指定管腳的映射完全禁用(JTAG+SW-DP)
  15.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改變指定管腳的映射,JTAG-DP 禁用 + SW-DP 使能
  16.                
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //LED
  18.         GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1;
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  21.         LED0 = 0;
  22.         
  23.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //蜂鳴器(beep) 低電平觸發
  24.         GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
  25.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  26.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  27.         BEEP=1;
  28.         
  29.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //繼電器(relay) 高電平觸發
  30.         GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
  31.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  32.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  33.         RELAY=0;
  34. }

  35. //按鍵賦值,這里是將八個按鍵拼接成一組51單片機里面的Io,目前測試可行
  36. void Key_assignment(unsigned char z)
  37. {
  38.         Key_Data=0x00;   //清零
  39.         if(z==0)
  40.         {
  41.                 key_LowOutPutConfig();               
  42.                 key5_1;  key6_1;  key7_1;  key8_1;   //使用的方法是反轉法
  43.                
  44.                 delay_us(500);  //短延時一下
  45.                
  46.                 if(key1==1) Key_Data=Key_Data|0x8F;
  47.                 else if(key2==1) Key_Data=Key_Data|0x4F;
  48.                 else if(key3==1) Key_Data=Key_Data|0x2F;
  49.                 else if(key4==1) Key_Data=Key_Data|0x1F;
  50.                 else Key_Data=Key_Data|0x0F;

  51.         }
  52.         else
  53.         {               
  54.                 key_HighOutPutConfig();
  55.                 key1_1;  key2_1;  key3_1;  key4_1;//使用的方法是反轉法
  56.                 delay_us(500);  //短延時一下
  57.                
  58.                 if(key5==1) Key_Data=Key_Data|0xF8;
  59.                 else if(key6==1) Key_Data=Key_Data|0xF4;        
  60.                 else if(key7==1) Key_Data=Key_Data|0xF2;
  61.                 else if(key8==1) Key_Data=Key_Data|0xF1;
  62.                 else Key_Data=Key_Data|0xF0;
  63.         }
  64. }

  65. u8 Key_Scan() //按鍵掃描函數
  66. {
  67.                  u8 num=16;  //這里一定要先賦個用不到的值
  68.      u8 Key_x;
  69.             Key_assignment(1); //狀態 0 ,此時按鍵沒有按下的話是 0x0f
  70.            delay_us(100);   //短延時
  71.            if(Key_Data!=0xF0) //只要是按鍵按下,就會使得 Key_Data!=0x0f
  72.                  {
  73.                                 Key_flag=1; //有按鍵按下,標志位置1                        
  74.                           Key_x=Key_Data;//將此時的鍵值賦值
  75.                                  Key_assignment(0); //切換狀態 1
  76.                                  delay_us(100);  //短延時一下
  77.                                  Key_Data=Key_Data&Key_x;  //兩個數據按位與,就會產生獨一無二的數據
  78.         
  79. //當前情況下的鍵值        ,十六進制數據
  80. //   88 48 28 18    →            7          8          9           12(add)
  81. //   84 44 24 14    →            4          5          6           13(sub)
  82. //   82 42 22 12    →            1          2          3           14(enter)
  83. //         81 41 21 11           →    10(xx) 0   11(yy) 15(back)
  84.                                   switch(Key_Data)
  85.                                    {
  86.                                      case 0x11 : num=back;   break;
  87.                                      case 0x12 : num=enter;  break;
  88.                                      case 0x14 : num=sub;   break;
  89.                                      case 0x18 : num=add;  break;
  90.                
  91.                                      case 0x21 : num=yy;   break;
  92.                                      case 0x22 : num=3;   break;
  93.                                      case 0x24 : num=6;   break;
  94.                                      case 0x28 : num=9;  break;
  95.                
  96.                                      case 0x41 : num=0;   break;
  97.                                      case 0x42 : num=2;   break;
  98.                                      case 0x44 : num=5;   break;
  99.                                      case 0x48 : num=8;  break;
  100.                
  101.                                      case 0x81 : num=xx;  break;
  102.                                      case 0x82 : num=1;   break;
  103.                                      case 0x84 : num=4;  break;
  104.                                      case 0x88 : num=7;  break;
  105.                                    }
  106.                                 Key_assignment(0);
  107.                                 while(Key_Data!=0x0f)//松手檢測
  108.                                 {
  109.                                 Key_assignment(0);
  110.                                 }
  111.            }
  112.          return num;
  113. }

  114. void key_LowOutPutConfig(void)
  115. {
  116.         GPIO_InitTypeDef GPIO_InitStructure;
  117.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入
  118.         GPIO_InitStructure.GPIO_Pin =C1_pin;
  119.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  120.         GPIO_Init(C1_port, &GPIO_InitStructure);
  121.         
  122.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入
  123.         GPIO_InitStructure.GPIO_Pin =C2_pin;
  124.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  125.         GPIO_Init(C2_port, &GPIO_InitStructure);
  126.         
  127.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入
  128.         GPIO_InitStructure.GPIO_Pin =C3_pin;
  129.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  130.         GPIO_Init(C3_port, &GPIO_InitStructure);
  131.         
  132.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入
  133.         GPIO_InitStructure.GPIO_Pin =C4_pin;
  134.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  135.         GPIO_Init(C4_port, &GPIO_InitStructure);
  136.         
  137.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  138.         GPIO_InitStructure.GPIO_Pin =R1_pin;
  139.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  140.         GPIO_Init(R1_port, &GPIO_InitStructure);

  141.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出  
  142.         GPIO_InitStructure.GPIO_Pin =R2_pin;
  143.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  144.         GPIO_Init(R2_port, &GPIO_InitStructure);

  145.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出  
  146.         GPIO_InitStructure.GPIO_Pin =R3_pin;
  147.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  148.         GPIO_Init(R3_port, &GPIO_InitStructure);

  149.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出  
  150.         GPIO_InitStructure.GPIO_Pin =R4_pin;
  151.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  152.         GPIO_Init(R4_port, &GPIO_InitStructure);
  153. }
  154. void key_HighOutPutConfig(void)
  155. {
  156.         GPIO_InitTypeDef GPIO_InitStructure;
  157.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  158.         GPIO_InitStructure.GPIO_Pin =C1_pin;
  159.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  160.         GPIO_Init(C1_port, &GPIO_InitStructure);

  161.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  162.         GPIO_InitStructure.GPIO_Pin =C2_pin;
  163.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  164.         GPIO_Init(C2_port, &GPIO_InitStructure);

  165.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  166.         GPIO_InitStructure.GPIO_Pin =C3_pin;
  167.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  168.         GPIO_Init(C3_port, &GPIO_InitStructure);

  169.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  170.         GPIO_InitStructure.GPIO_Pin =C4_pin;
  171.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  172.         GPIO_Init(C4_port, &GPIO_InitStructure);

  173.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入
  174.         GPIO_InitStructure.GPIO_Pin =R1_pin;
  175.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  176.         GPIO_Init(R1_port, &GPIO_InitStructure);

  177.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入  
  178.         GPIO_InitStructure.GPIO_Pin =R2_pin;
  179.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  180.         GPIO_Init(R2_port, &GPIO_InitStructure);

  181.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入  
  182.         GPIO_InitStructure.GPIO_Pin =R3_pin;
  183.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  184.         GPIO_Init(R3_port, &GPIO_InitStructure);

  185.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //下拉輸入  
  186.         GPIO_InitStructure.GPIO_Pin =R4_pin;
  187.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  188.         GPIO_Init(R4_port, &GPIO_InitStructure);
  189. }
復制代碼

51hei圖片_20240403150406.png (29.18 KB, 下載次數: 42)

這個是我仿真使用的矩陣鍵盤

這個是我仿真使用的矩陣鍵盤

矩陣2.png (424.29 KB, 下載次數: 35)

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

使用道具 舉報

沙發
ID:712097 發表于 2024-4-7 17:08 | 只看該作者
感覺一模一樣啊,不用改。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情精品久久久久 | 亚洲在线中文字幕 | 免费观看一级特黄欧美大片 | 国产日韩欧美另类 | 午夜免费福利影院 | 亚洲欧美日韩国产综合 | 日韩精品免费一区 | 欧美极品视频 | 国产中文 | 国内精品久久影院 | 国产在线精品一区二区 | 黄色一级毛片免费看 | 欧美综合网 | 日韩欧美一区二区三区 | 国产中文字幕亚洲 | 国产一区二区精 | 国产一区二区小视频 | 欧美视频精品 | 国产精品色av | 日韩日b视频| 亚洲精选久久 | 日韩久久精品 | 国产精品视频一二三 | 国产精品久久久久免费 | 中文字幕在线免费观看 | 日韩成人在线观看 | 欧美一级做性受免费大片免费 | 国产高清免费视频 | 91天堂网| 国产精品久久久久久影视 | 久久国产精品网站 | 中文字幕成人av | 国产 日韩 欧美 中文 在线播放 | gav成人免费播放视频 | 成av人电影在线 | 91成人免费看片 | av中文字幕在线 | 亚洲一区二区三区在线免费观看 | 天天天堂 | 日韩一区二区三区视频 | 做a视频|