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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問下這段單片機按鍵函數什么意思?

[復制鏈接]
跳轉到指定樓層
樓主
ID:508795 發表于 2019-4-10 15:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "key_m.h"


//函數聲明        
unsigned char Key_Map(unsigned char _key);
#if KEYVALUE_MIR_123A
unsigned char KEY_Mir_123A(unsigned char _key);
#endif
#if KEYVALUE_MIR_ABCD
unsigned char KEY_Mir_ABCD(unsigned char _key);
#endif
#if KEYVALUE_ROT_CW90
unsigned char KEY_Rot_CW90(unsigned char _key);
#endif


//------------------------------------------------
// 函數介紹: 掃描矩陣鍵盤,并返回按鍵值
// 輸入參數: mode:0不支持連續按鍵;1支持連按
// 返 回 值: 0無按鍵,其他有對應按鍵按下
// 修訂版本:V1.1
//------------------------------------------------
unsigned char KeyScan(bit mode)
{
        unsigned char KeyValue = 0;
    static bit key_up = 1;
        char a = 0;
        GPIO_KEY=0x0f;//P1.7|P1.6|P1.5|P1.4拉低
        if((GPIO_KEY!=0x0f)&&key_up)//讀取按鍵是否按下
        {
                key_up = mode;
        delay_ms(10);//延時10ms進行消抖
                if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
                {                        
                        //測試列
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0x80;break;
                                case(0X0b):        KeyValue=0x40;break;
                                case(0X0d): KeyValue=0x20;break;
                                case(0X0e):        KeyValue=0x10;break;
                        }
                        //測試行
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue+0x08;break;
                                case(0Xb0):        KeyValue=KeyValue+0x04;break;
                                case(0Xd0): KeyValue=KeyValue+0x02;break;
                                case(0Xe0):        KeyValue=KeyValue+0x01;break;
                        }
                }
        }
    else if(GPIO_KEY==0x0f)//按鍵松手檢測
    {
        key_up = 1;
    }
          //以上返回為16進制行列值(1,2,4,8)X(1,2,4,8)
    KeyValue = Key_Map(KeyValue); //返回字符按鍵值


//對于按鍵的鏡像和旋轉都可以用這3個函數組合而實現   
#if KEYVALUE_MIR_123A
        KeyValue = KEY_Mir_123A(KeyValue);
#endif
#if KEYVALUE_MIR_ABCD
        KeyValue = KEY_Mir_ABCD(KeyValue);
#endif
#if KEYVALUE_ROT_CW90
    KeyValue = KEY_Rot_CW90(KeyValue);
#endif


    return KeyValue;

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

使用道具 舉報

沙發
ID:508795 發表于 2019-4-10 15:17 | 只看該作者
KEY_M.H

當前版本V1.4

按鍵分布:
P14 P15 P16 P17
  |   |   |   |
--1---2---3---A--P10
  |   |   |   |
--4---5---6---B--P11
  |   |   |   |
--7---8---9---C--P12
  |   |   |   |  
--*---0---#---D--P13
  |   |   |   |
  
矩陣鍵盤掃描函數
返回值為位行列位置,如0x14位第1行第2列按鍵按下;
如果為0則無按鍵按下

可以配置按鍵值重映射為字符‘0’,‘1’,‘2’,,,‘D’
#define KEYVALUE_REMAPE 1

如果分布不正確,可以定義旋轉和鏡像分布


Copyright (c) 2017-2027 Quan's technology, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef _KEY_M_H_
#define _KEY_M_H_
#include <reg52.h>
#include "delay.h"

//如果使用按鍵重映射,定義為非0
//無按鍵事件返回值為數值0x00
#define KEYVALUE_MIR_123A 1 //123A方向鏡像分布
#define KEYVALUE_MIR_ABCD 0        //ABCD方向鏡像分布
#define KEYVALUE_ROT_CW90 1        //順時針旋轉90度



//--定義使用的IO口--//       
#define GPIO_KEY P1

//矩陣鍵盤掃描函數
unsigned char KeyScan(bit mode);

#endif

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久久久久久久 | 国产欧美日韩一区 | 久久不卡 | 一本色道精品久久一区二区三区 | 精产国产伦理一二三区 | 中文字幕欧美一区 | 99精品在线观看 | 国产日韩91 | 97久久精品| 欧美成人一区二区三区 | av天空 | 国产精品中文字幕一区二区三区 | 国产亚洲一区二区精品 | 国产美女一区二区 | 365夜爽爽欧美性午夜免费视频 | 亚洲免费精品 | 天天看天天爽 | 日韩视频在线观看中文字幕 | 日韩色在线 | 二区三区视频 | 欧美亚洲成人网 | 国产精品美女www爽爽爽视频 | 久久国内 | 99在线资源 | 国产一级片网站 | 久久久久久久一区二区三区 | 亚洲视频自拍 | 日韩欧美视频 | 亚洲高清在线免费观看 | 在线观看免费观看在线91 | 午夜精品导航 | 中文字幕成人av | 成人av网站在线观看 | 精品欧美乱码久久久久久 | 午夜精品视频一区 | 日韩影院在线观看 | 国产成人精品免费视频大全最热 | 亚洲午夜精品视频 | 黄色片在线观看网址 | 国产日韩一区二区 | 中文字幕 在线观看 |