4x4矩阵键盘 扫描程序

一:不排除第四位异常处理

uchar JuzhenkeyScan()
{
//    P3=0xfe;
//    temp=P3;
//    while(temp!=0xfe)
//    {
//        temp=P3;
//        switch(temp)
//    {
//        case 0xee:num=10;
//        break;
//        case 0xde:num=3;
//        break;
//        case 0xbe:num=2;
//        break;
//        case 0x7e:num=1;
//        break;
//    }
//    delayms(10);
//    }

    P3=0xfd;//1111 1110
    temp=P3;
    while(temp!=0xfd)
    {
    temp=P3;
    switch(temp)
    {
        case 0xed:num=11;
        break;
        case 0xdd:num=6;
        break;
        case 0xbd:num=5;
        break;
        case 0x7d:num=4;
        break;
    }
    delayms(10);
    }

    P3=0xfb;
    temp=P3;
    while(temp!=0xfb)
    {
    temp=P3;
    switch(temp)
    {
        case 0xeb:num=12;
        break;
        case 0xdb:num=9;
        break;
        case 0xbb:num=8;
        break;
        case 0x7b:num=7;
        break;
    }
    delayms(10);
    }

    P3=0xf7;
    temp=P3;
    while(temp!=0xf7)
    {
    temp=P3;
    switch(temp)
    {
        case 0xe7:num=13;
        break;
        case 0xd7:num=14;
        break;
        case 0xb7:num=0;
        break;
        case 0x77:num=14;
        break;
    }
    delayms(10);
    }
    return num;
}

二:排除第四位异常处理

  1 uchar keyscan()
  2 {
  3     P3=0xfe;
  4     tempkey=P3;
  5     tempkey=tempkey&0xf0;
  6     while(tempkey!=0xf0)
  7     {
  8         delayms(5);
  9         tempkey=P3;
 10         tempkey=tempkey&0xf0;
 11         while(tempkey!=0xf0)
 12         {
 13             tempkey=P3;
 14             switch(tempkey)
 15             {
 16                 case 0xee:num=10; //A
 17                 break;
 18                 case 0xde:num=3;
 19                 break;
 20                 case 0xbe:num=2;
 21                 break;
 22                 case 0x7e:num=1;
 23                 break;
 24             }
 25             while(tempkey!=0xf0)
 26             {
 27                 tempkey=P3;
 28                 tempkey=tempkey&0xf0;
 29             }
 30
 31         }
 32     }
 33
 34
 35
 36
 37             P3=0xfd;
 38             tempkey=P3;
 39             tempkey=tempkey&0xf0;
 40             while(tempkey!=0xf0)
 41                 {
 42                     delayms(5);
 43                     tempkey=P3;
 44                     tempkey=tempkey&0xf0;
 45                     while(tempkey!=0xf0)
 46                     {
 47                         tempkey=P3;
 48                     switch(tempkey)
 49                         {
 50                             case 0xed:num=11;//B
 51                                 break;
 52                             case 0xdd:num=6;
 53                                 break;
 54                             case 0xbd:num=5;
 55                                 break;
 56                             case 0x7d:num=4;
 57                                 break;
 58                         }
 59                     while(tempkey!=0xf0)
 60                         {
 61                             tempkey=P3;
 62                             tempkey=tempkey&0xf0;
 63                         }
 64
 65                     }
 66                 }
 67
 68
 69             P3=0xfb;
 70             tempkey=P3;
 71             tempkey=tempkey&0xf0;
 72             while(tempkey!=0xf0)
 73                 {
 74                     delayms(5);
 75                     tempkey=P3;
 76                     tempkey=tempkey&0xf0;
 77                     while(tempkey!=0xf0)
 78                     {
 79                         tempkey=P3;
 80                     switch(tempkey)
 81                         {
 82                             case 0xeb:num=12; //C
 83                                 break;
 84                             case 0xdb:num=9;
 85                                 break;
 86                             case 0xbb:num=8;
 87                                 break;
 88                             case 0x7b:num=7;
 89                                 break;
 90                         }
 91                     while(tempkey!=0xf0)
 92                         {
 93                             tempkey=P3;
 94                             tempkey=tempkey&0xf0;
 95                         }
 96
 97                     }
 98                 }
 99
100
101             P3=0xf7;
102             tempkey=P3;
103             tempkey=tempkey&0xf0;
104             while(tempkey!=0xf0)
105                 {
106                     delayms(5);
107                     tempkey=P3;
108                     tempkey=tempkey&0xf0;
109                     while(tempkey!=0xf0)
110                     {
111                         tempkey=P3;
112                     switch(tempkey)
113                         {
114                             case 0xe7:num=13;
115                                 break;
116                             case 0xd7:num=14;
117                                 break;
118                             case 0xb7:num=0;
119                                 break;
120                             case 0x77:num=14;
121                                 break;
122                         }
123                     while(tempkey!=0xf0)
124                         {
125                             tempkey=P3;
126                             tempkey=tempkey&0xf0;
127                         }
128                     }
129                 }
130
131
132 }

时间: 2024-07-29 01:12:07

4x4矩阵键盘 扫描程序的相关文章

4X4矩阵键盘扫描程序

4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读取列线GIO的值,可确定是哪一个按键: 电路图如下: 注意: 1. 图中用作输入的GIO,一定要有一个上拉电阻. 2. 芯片中的每一个引脚是否用作了GPIO口来用,需配置芯片的寄存器,使引脚当作GPIO口来使用,才会有效. 测试代码如下: #define KEY_GIO_ROW_1 37 #define KEY_GIO_R

4x4矩阵键盘扫描

4x4矩阵键盘扫描 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了 Win10 IoT 如何对本地 IoT 设备内嵌 SQLite 数据库进行 CURD 操作 ,这章我们来学习如何使用 GPIO Pin 扫描4x4矩阵键盘按键状态.如果对安装部署过程还不熟悉可以参考前几篇文章,Raspberry安装 IoT系统及搭建开发环境(http:/

Win10 IoT C#开发 6 - 4x4矩阵键盘扫描

Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了 Win10 IoT 如何对本地 IoT 设备内嵌 SQLite 数据库进行 CURD 操作 ,这章我们来学习如何使用 GPIO Pin 扫描4x4矩阵键盘按键状态.如果对安装部署过程还不熟悉可以参考前几篇文章,Raspberry安装 IoT系统及搭建开发环境(http://www.cnblo

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十六:4X4矩阵键盘模块(轻触式按键) 矩阵键盘 是单片机外部设备中所使用的排布类似于矩阵的键盘组.矩阵式结构的键盘显

STM32 4x4矩阵键盘

可同时识别两个键值,并分别显示,用了自己的12864显示,有些注释的地方有乱码请忽略.基于STM32f103vct6. 主函数: #include "Rect_key.h" #include "12864.h" int main() { u16 keynum=0; delay_init(); lcd_gpio_init(); lcd_init(); Rect_key_Init(); lcd_6x8(0,0,"STM32 4x4 KEY Test :&quo

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可. 1.键盘原理图: 2.STM32 cubemx 引脚配置图: 这里用外部晶振内部晶振都可以,时钟对这个没什么影响,不用开中断,所以其他的配置就不细说了,下面再说一下这8个GPIO的配置. 4个引脚配推挽输出,这4个配输出的引脚内部上下拉不用配置:另外4个配成输入,内部上拉. 3.生成代码后,开始编写逻辑: 编写之前我们先做一下头文件的定义,把一些要用到的宏定

矩阵键盘扫描算法

函数的主体 unsigned char GetKey() { unsigned char i,j,k; static unsigned char backup[4][4]={ {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1} }; EA=1; TMOD=0x01;//设置T0为模式1 TH0=0xF8; TL0=0xCD; ET0=1;//使能T0中断 TR0=1;//启动T0 while(1) { for(i=0;i<4;i++)//循环检测4×4的矩阵按键 {

4*4键盘扫描程序--去抖加长按

前阵子做的是一个叫精密电压源的项目,使用了4*4的键盘,使用了8个GPIO,是比较简单的做法了,之前在网上看到一个老外已经能用3个GPIO实现多达25个按键的控制了,对应的接线图如下 使用的是新塘某Cortex-M0单片机,(讲真,单片机这部分虽然我水平不行但是我是写腻了),从网上找了些按键扫描程序又结合当前的项目写了一个按键扫描的程序,不用延迟来去抖,也可以添加长按功能,废话不多说,直接上代码 uint8_t b_key_scan;uint8_t b_key_debounce;uint8_t

单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面.想要的结果是按第0个按键,数码管显示0,以此类推.注意,这里的数码管是共阳极的. #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa