历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2018年03月07日 | STM32 矩阵键盘扫描程序

2018-03-07 来源:eefocus

    #define __JUZHENJIANPAN_H

    extern u8 KeysCAN(void);

    extern void GPIO_Config(void);

    #endif

    #include "stm32f10x.h"

    #include"juzhenjianpan.h"

    #include"gpiobitmap.h"

    #define PC0 PCo_0

    #define PC1 PCo_1

    #define PC2 PCo_2

    #define PC3 PCo_3

    #define PC4 PCo_4

    void GPIO_Config(void)

    {

    RCC_APB2PeriphCLOCkCmd(RCC_APB2Periph_GPIOC ,ENABLE);

    }

    u8 Keyscan(void)

    {

    u8 key;

    u16 temp;

    key=0;

    GPIOC->CRL&=0X00000000;//将PC0设置成out——pp输出

    GPIOC->CRL|=0X33333333;

    GPIOC->ODR|=0x00ff;

    GPIOC->CRL&=0x00000000; /////去除将PCx设置成out——pp输出是的某些设置位

    GPIOC->CRL|=0X44444444; /////配置为浮空输入了

    GPIOC->CRL&=0XFFFFFFF0;//将PC0设置成out——pp输出

    GPIOC->CRL|=0X00000003;

    PC0=0;

    temp=GPIOC->IDR;

    temp&=0x00ff;

    if(temp!=0x00fe)

    {

    switch(temp)

    {

    case 0x00ee: key=4;break;

    case 0x00de: key=3;break;

    case 0x00be: key=2;break;

    case 0x007e: key=1;break;

    }

    temp=GPIOC->IDR;

    temp&=0x00f0;

    while(temp!=0xf0)

    {

    temp=GPIOC->IDR;

    temp&=0x00f0;

    }

    }

    GPIOC->CRL&=0X00000000;//将PC0设置成out——pp输出

    GPIOC->CRL|=0X33333333;

    GPIOC->ODR|=0x00ff;

    GPIOC->CRL&=0x00000000;

    GPIOC->CRL|=0X44444444;

    GPIOC->CRL&=0XFFFFFF0F; //PC0设置成out——pp输出

    GPIOC->CRL|=0X00000030;

    PC1=0;

    temp=GPIOC->IDR;

    temp&=0x00ff;

    if(temp!=0x00fd)

    {

    switch(temp)

    {

    case 0x00ed: key=8;break;

    case 0x00dd: key=7;break;

    case 0x00bd: key=6;break;

    case 0x007d: key=5;break;

    }

    temp=GPIOC->IDR;

    temp&=0x00f0;

    while(temp!=0xf0)

    {

    temp=GPIOC->IDR;

    temp&=0x00f0;

    }

    }

    GPIOC->CRL&=0X00000000;//将PC0设置成out——pp输出

    GPIOC->CRL|=0X33333333;

    GPIOC->ODR|=0x00ff;

    GPIOC->CRL&=0x00000000;

    GPIOC->CRL|=0X44444444;

    GPIOC->CRL&=0XFFFFF0FF;//PC0设置成out——pp输出

    GPIOC->CRL|=0X00000300;

    PC2=0;

    temp=GPIOC->IDR;

    temp&=0x00ff;

    if(temp!=0x00fb)

    {

    switch(temp)

    {

    case 0x00eb: key=12;break;

    case 0x00db: key=11;break;

    case 0x00bb: key=10;break;

    case 0x007b: key=9;break;

    }

    temp=GPIOC->IDR;

    temp&=0x00f0;

    while(temp!=0xf0)

    {

    temp=GPIOC->IDR;

    temp&=0x00f0;

    }

    }

    GPIOC->CRL&=0X00000000;

    GPIOC->CRL|=0X33333333; //将PC0设置成out——pp输出

    GPIOC->ODR|=0x00ff;

    GPIOC->CRL&=0x00000000;

    GPIOC->CRL|=0X44444444;

    GPIOC->CRL|=0X00003000;

    PC3=0;

    temp=GPIOC->IDR;

    temp&=0x00ff;

    if(temp!=0x00f7)

    {

    switch(temp)

    {

    case 0x00e7: key=16;break;

    case 0x00d7: key=15;break;

    case 0x00b7: key=14;break;

    case 0x0077: key=13;break;

    }

    temp=GPIOC->IDR;

    temp&=0x00f0;

    while(temp!=0xf0)

    {

    temp=GPIOC->IDR;

    temp&=0x00f0;

    }

    }

    return key;

    }

    #ifndef __GPIOBITMAP_H

    #define __GPIOBITMAP_H

    #include "stm32f10x.h"

    //IO口操作宏定义

    #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

    #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))

    #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))

    //IO口地址映射

    #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C

    #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C

    #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C

    #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C

    #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C

    #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C

    #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C

    #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808

    #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08

    #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008

    #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408

    #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808

    #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08

    #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08

    //IO口操作,只对单一的IO口!

    //确保n的值小于16!

    #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出

    #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入

    #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出

    #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入

    #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出

    #define PCIn(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入

    #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出

    #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入

    #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出

    #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入

    #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出

    #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入

    #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出

    #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入

    /*------------------------------

    *******************************

    各GPIO输出口地址定义

    ********************************

    --------------------------------*/

    #define PAo_0 PAout(0)

    #define PAo_1 PAout(1)

    #define PAo_2 PAout(2)

    #define PAo_3 PAout(3)

    #define PAo_4 PAout(4)

    #define PAo_5 PAout(5)

    #define PAo_6 PAout(6)

    #define PAo_7 PAout(7)

    #define PAo_8 PAout(8)

    #define PAo_9 PAout(9)

    #define PAo_10 PAout(10)

    #define PAo_11 PAout(11)

    #define PAo_12 PAout(12)

    #define PAo_13 PAout(13)

    #define PAo_14 PAout(14)

    #define PAo_15 PAout(15)

    //----------------------------------//

    #define PBo_0 PBout(0)

    #define PBo_1 PBout(1)

    #define PBo_2 PBout(2)

    #define PBo_3 PBout(3)

    #define PBo_4 PBout(4)

    #define PBo_5 PBout(5)

    #define PBo_6 PBout(6)

    #define PBo_7 PBout(7)

    #define PBo_8 PBout(8)

    #define PBo_9 PBout(9)

    #define PBo_10 PBout(10)

    #define PBo_11 PBout(11)

    #define PBo_12 PBout(12)

    #define PBo_13 PBout(13)

    #define PBo_14 PBout(14)

    #define PBo_15 PBout(15)

    //--------------------------------//

    #define PCo_0 PCout(0)

    #define PCo_1 PCout(1)

    #define PCo_2 PCout(2)

    #define PCo_3 PCout(3)

    #define PCo_4 PCout(4)

    #define PCo_5 PCout(5)

    #define PCo_6 PCout(6)

    #define PCo_7 PCout(7)

    #define PCo_8 PCout(8)

    #define PCo_9 PCout(9)

    #define PCo_10 PCout(10)

    #define PCo_11 PCout(11)

    #define PCo_12 PCout(12)

    #define PCo_13 PCout(13)

    #define PCo_14 PCout(14)

    #define PCo_15 PCout(15)

    //---------------------------//

    #define PDo_0 PDout(0)

    #define PDo_1 PDout(1)

    #define PDo_2 PDout(2)

    #define PDo_3 PDout(3)

    #define PDo_4 PDout(4)

    #define PDo_5 PDout(5)

    #define PDo_6 PDout(6)

    #define PDo_7 PDout(7)

    #define PDo_8 PDout(8)

    #define PDo_9 PDout(9)

    #define PDo_10 PDout(10)

    #define PDo_11 PDout(11)

    #define PDo_12 PDout(12)

    #define PDo_13 PDout(13)

    #define PDo_14 PDout(14)

    #define PDo_15 PDout(15)

    //------------------------------//

    #define PEo_0 PEout(0)

    #define PEo_1 PEout(1)

    #define PEo_2 PEout(2)

    #define PEo_3 PEout(3)

    #define PEo_4 PEout(4)

    #define PEo_5 PEout(5)

    #define PEo_6 PEout(6)

    #define PEo_7 PEout(7)

    #define PEo_8 PEout(8)

    #define PEo_9 PEout(9)

    #define PEo_10 PEout(10)

    #define PEo_11 PEout(11)

    #define PEo_12 PEout(12)

    #define PEo_13 PEout(13)

    #define PEo_14 PEout(14)

    #define PEo_15 PEout(15)

    //---------------------------//

    #define PFo_0 PFout(0)

    #define PFo_1 PFout(1)

    #define PFo_2 PFout(2)

    #define PFo_3 PFout(3)

    #define PFo_4 PFout(4)

    #define PFo_5 PFout(5)

    #define PFo_6 PFout(6)

    #define PFo_7 PFout(7)

    #define PFo_8 PFout(8)

    #define PFo_9 PFout(9)

    #define PFo_10 PFout(10)

    #define PFo_11 PFout(11)

    #define PFo_12 PFout(12)

    #define PFo_13 PFout(13)

    #define PFo_14 PFout(14)

    #define PFo_15 PFout(15)

    //---------------------------//

    #define PGo_0 PGout(0)

    #define PGo_1 PGout(1)

    #define PGo_2 PGout(2)

    #define PGo_3 PGout(3)

    #define PGo_4 PGout(4)

    #define PGo_5 PGout(5)

    #define PGo_6 PGout(6)

    #define PGo_7 PGout(7)

    #define PGo_8 PGout(8)

    #define PGo_9 PGout(9)

    #define PGo_10 PGout(10)

    #define PGo_11 PGout(11)

    #define PGo_12 PGout(12)

    #define PGo_13 PGout(13)

    #define PGo_14 PGout(14)

    #define PGo_15 PGout(15)

    /*------------------------------

    ********************************

    各GPIO输入口地址定义

    ********************************

    --------------------------------*/

    #define PAi_0 PAin(0)

    #define PAi_1 PAin(1)

    #define PAi_2 PAin(2)

    #define PAi_3 PAin(3)

    #define PAi_4 PAin(4)

    #define PAi_5 PAin(5)

    #define PAi_6 PAin(6)

    #define PAi_7 PAin(7)

    #define PAi_8 PAin(8)

    #define PAi_9 PAin(9)

    #define PAi_10 PAin(10)

    #define PAi_11 PAin(11)

    #define PAi_12 PAin(12)

    #define PAi_13 PAin(13)

    #define PAi_14 PAin(14)

    #define PAi_15 PAin(15)

    //---------------------------------//

    #define PBi_0 PBin(0)

    #define PBi_1 PBin(1)

    #define PBi_2 PBin(2)

    #define PBi_3 PBin(3)

    #define PBi_4 PBin(4)

    #define PBi_5 PBin(5)

    #define PBi_6 PBin(6)

    #define PBi_7 PBin(7)

    #define PBi_8 PBin(8)

    #define PBi_9 PBin(9)

    #define PBi_10 PBin(10)

    #define PBi_11 PBin(11)

    #define PBi_12 PBin(12)

    #define PBi_13 PBin(13)

    #define PBi_14 PBin(14)

    #define PBi_15 PBin(15)

    //---------------------------------//

    #define PCi_0 PCin(0)

    #define PCi_1 PCin(1)

    #define PCi_2 PCin(2)

    #define PCi_3 PCin(3)

    #define PCi_4 PCin(4)

    #define PCi_5 PCin(5)

    #define PCi_6 PCin(6)

    #define PCi_7 PCin(7)

    #define PCi_8 PCin(8)

    #define PCi_9 PCin(9)

    #define PCi_10 PCin(10)

    #define PCi_11 PCin(11)

    #define PCi_12 PCin(12)

    #define PCi_13 PCin(13)

    #define PCi_14 PCin(14)

    #define PCi_15 PCin(15)

    //-------------------------------------//

    #define PDi_0 PDin(0)

    #define PDi_1 PDin(1)

    #define PDi_2 PDin(2)

    #define PDi_3 PDin(3)

    #define PDi_4 PDin(4)

    #define PDi_5 PDin(5)

    #define PDi_6 PDin(6)

    #define PDi_7 PDin(7)

    #define PDi_8 PDin(8)

    #define PDi_9 PDin(9)

    #define PDi_10 PDin(10)

    #define PDi_11 PDin(11)

    #define PDi_12 PDin(12)

    #define PDi_13 PDin(13)

    #define PDi_14 PDin(14)

    #define PDi_15 PDin(15)

    //-------------------------------------//

    #define PEi_0 PEin(0)

    #define PEi_1 PEin(1)

    #define PEi_2 PEin(2)

    #define PEi_3 PEin(3)

    #define PEi_4 PEin(4)

    #define PEi_5 PEin(5)

    #define PEi_6 PEin(6)

    #define PEi_7 PEin(7)

    #define PEi_8 PEin(8)

    #define PEi_9 PEin(9)

    #define PEi_10 PEin(10)

    #define PEi_11 PEin(11)

    #define PEi_12 PEin(12)

    #define PEi_13 PEin(13)

    #define PEi_14 PEin(14)

    #define PEi_15 PEin(15)

    //---------------------------------//

    #define PFi_0 PFin(0)

    #define PFi_1 PFin(1)

    #define PFi_2 PFin(2)

    #define PFi_3 PFin(3)

    #define PFi_4 PFin(4)

    #define PFi_5 PFin(5)

    #define PFi_6 PFin(6)

    #define PFi_7 PFin(7)

    #define PFi_8 PFin(8)

    #define PFi_9 PFin(9)

    #define PFi_10 PFin(10)

    #define PFi_11 PFin(11)

    #define PFi_12 PFin(12)

    #define PFi_13 PFin(13)

    #define PFi_14 PFin(14)

    #define PFi_15 PFin(15)

    //---------------------------------//

    #define PGi_0 PGin(0)

    #define PGi_1 PGin(1)

    #define PGi_2 PGin(2)

    #define PGi_3 PGin(3)

    #define PGi_4 PGin(4)

    #define PGi_5 PGin(5)

    #define PGi_6 PGin(6)

    #define PGi_7 PGin(7)

    #define PGi_8 PGin(8)

    #define PGi_9 PGin(9)

    #define PGi_10 PGin(10)

    #define PGi_11 PGin(11)

    #define PGi_12 PGin(12)

    #define PGi_13 PGin(13)

    #define PGi_14 PGin(14)

    #define PGi_15 PGin(15)

    //---------------------------------//

    ///////////////////////////////////////////////////////////////////

    //Ex_NVIC_Config专用定义

    #define GPIO_A 0

    #define GPIO_B 1

    #define GPIO_C 2

    #define GPIO_D 3

    #define GPIO_E 4

    #define GPIO_F 5

    #define GPIO_G 6

    #define FTIR 1 //下降沿触发

    #define RTIR 2 //上升沿触发

    #endif


推荐阅读

史海拾趣

Bomar Interconnect公司的发展小趣事

为了确保产品质量和稳定性,Bomar Interconnect公司建立了严格的质量管理体系。公司引进了先进的质量检测设备和方法,对原材料、生产过程、成品进行全面检测和控制。同时,公司还加强了员工培训,提高了员工的质量意识和操作技能。这些措施有效提升了产品的质量水平,降低了不良品率,为客户提供了更加可靠的产品和服务。

C.K TOOLS公司的发展小趣事

随着电子行业的快速发展,不同企业对生产工具的需求也日益多样化。C.K TOOLS敏锐地捕捉到了这一市场变化,开始提供定制化服务。他们根据客户的具体需求,量身定制工具,满足电子制造过程中的特殊需求。这种定制化服务不仅提高了客户的生产效率,也进一步巩固了C.K TOOLS在电子行业中的地位。

ASI [ASI Semiconductor, Inc]公司的发展小趣事

随着技术的不断进步和市场的不断扩大,ASI开始积极拓展全球市场。通过设立分支机构和与全球各地的客户建立合作关系,ASI的产品和服务逐渐覆盖了几十个国家。同时,ASI始终坚持以客户为中心的理念,不断提升客户服务的水平和质量。无论是售前咨询、技术支持还是售后服务,ASI都致力于为客户提供最优质、最专业的服务。

Fractus公司的发展小趣事

Fractus公司的创新之路可以追溯到上世纪八十年代后期,在加泰罗尼亚理工大学(UPC)的研究实验室中,关于天线技术的早期研究拉开了序幕。这一时期的学术研究为后来Fractus的技术创新奠定了坚实的基础。随着研究的深入,Fractus逐渐掌握了几何结构天线设计的核心技术,并开始探索其在无线通信领域的应用潜力。

无锡友达公司的发展小趣事

无锡友达深知技术创新的重要性,因此不断加大对研发团队的投入。公司拥有一支经验丰富、技术实力雄厚的研发团队,以及一流的成套设计工具和测试设备。这些团队和工具为公司开发具有自主知识产权的产品提供了有力保障。在数模混合信号处理领域,无锡友达拥有自己的系统设计体系和核心技术,产品研发技术和量产能力处于国内前列。

Data Delay Devices公司的发展小趣事

在竞争激烈的电子行业中,质量管理是企业生存和发展的关键。DDD公司高度重视产品质量管理,建立了完善的质量管理体系和检测机制。公司从原材料采购、生产过程到成品检验都实行严格的质量控制,确保每一件产品都符合客户的要求和行业标准。这种对质量的执着追求使得DDD公司的产品在市场上赢得了良好的口碑和信誉。

问答坊 | AI 解惑

VxWorks5.4->6.5移植--ifLib

目前在做VxWorks的应用程序代码移植,从5.4到6.5,在5.4的代码使用了ifLib库里的函数,如ifunit()、ifAddrGet()等;而在VxWorks6.5中,ifLib库已经没用,请问是用别的库来代替?若是,可否有针对性的对ifunit()做个移植的解释?谢谢!…

查看全部问答>

WINCE字体的问题!

请问:修改WINCE的字体变使它变小后,窗口上文字又显示不清晰!有什么好办法解决呀!谢谢了!…

查看全部问答>

求单片机控制程序源代码

各位大侠帮忙啊~ 求单片机控制程序源代码,单片机控制状态的转移  就是实现标签和阅读器的控制 希望做过有经验的 帮帮忙啊  感谢感谢…

查看全部问答>

自动控制原理

有没有对自动控制原理感兴趣的大师啊,交流下.…

查看全部问答>

测试设备,寻求合作!

水位、温度测试,用单片机实现,体积要小,数据传送800米,最好用mcs1200,熟悉者联系:437175689,诚求合作…

查看全部问答>

请问谁有 MST710 芯片驱动

请问谁有MSG710芯片驱动(最好是linux下面的)的,现在正在做模拟屏的驱动,第一次做芯片驱动又比较急,不知道该怎么下手,想要一份参考一下。谢谢。 luogk@magliving.com …

查看全部问答>

EE_FPGA基础教程系列 --NO.3-- 玩转LED

Table of Contents 1.        剧情回放        4 2.        玩转LED        4   2.1        硬件连接        4 ...…

查看全部问答>

用PADS logic做原理图封装时出现如下问题,请赐教

Error: Signal pin number invalid - Pin number 1 already exists on Gate A, Logical pin 1.Error: Signal pin number invalid - Pin number 2 already exists on Gate A, Logical pin 2.Error: Signal pin number invalid - Pin number 3 alread ...…

查看全部问答>

用MSP430 内置传感器测试温度时为什么在串口上显示的数据不对

我想用430内置传感器测试环境温度的变化,但是为什么在串口上现实的数据不变化呢 ?哪位高人给指点下,下面的程序有什么错误啊?     #include <msp430x14x.h>#define CPU_F ((double)8000000) #define delay_us(x) __delay_cycle ...…

查看全部问答>

STM32的RTC问题 难搞啊

被STM32的RTC搞晕的过来看看本来打算放弃内置的RTC而采用DS1302了,无奈1302的通信太慢,屡次不成功,就把扔在一边的老板子拿来又试了试,这次没用自己原来的程序,在网上又新找了一个,结果程序都不用动的居然就行了··· 芯片是VCT6,晶振是那 ...…

查看全部问答>