矩阵键盘程序代码(基于STM32F103)

矩阵键盘程序代码(基于STM32F103)本次上传主要展示了STM324X4矩阵键盘代码

本次上传主要展示了STM32 4X4矩阵键盘代码。

#include “bsp_button.h”
void SysTick_Delay_ms(uint32_t ms)
{

    uint32_t i;
    SysTick_Config(72000);
    for(i=0;i<ms;i++)
    {

        while (!((SysTick->CTRL)&(1<<16)));
    }
    SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}
void KEY_GPIO_Config(void)
{

    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APBxPeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
    //初始化行引脚
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIO_PORTC, &GPIO_InitStruct);
    //初始化列引脚
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four;
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_Init(GPIO_PORTA, &GPIO_InitStruct);
    
    GPIO_SetBits(GPIO_PORTA, GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four);                  //列引脚全为高电平
    GPIO_SetBits(GPIO_PORTC,GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four);               //行引脚全为高电平
}
int Key_Scan_Mode(void)
{

    GPIO_SetBits(GPIO_PORTA, GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four);                  //列引脚全为高电平
    GPIO_SetBits(GPIO_PORTC,GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four);               //行引脚全为高电平
    GPIO_ResetBits(GPIO_PORTC,GPIO_Pin_line_one);
    if(GPIO_Pin_row_one_read|GPIO_Pin_row_two_read|GPIO_Pin_row_three_read|GPIO_Pin_row_four_read==RESET)
    {

        SysTick_Delay_ms(10);
        if(GPIO_Pin_row_one_read==RESET)
        {

            return 13;
        }
        if(GPIO_Pin_row_two_read==RESET)
        {

            return 5;
        }
        if(GPIO_Pin_row_three_read==RESET)
        {

            return 9;
        }
        if(GPIO_Pin_row_four_read==RESET)
        {

            return 1;
        }
    }
    GPIO_SetBits(GPIO_PORTA, GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four);                 
    GPIO_SetBits(GPIO_PORTC,GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four);
    
    GPIO_ResetBits(GPIO_PORTC,GPIO_Pin_line_two);
    if(GPIO_Pin_row_one_read|GPIO_Pin_row_two_read|GPIO_Pin_row_three_read|GPIO_Pin_row_four_read==RESET)
    {

        SysTick_Delay_ms(10);
        if(GPIO_Pin_row_one_read==RESET)
        {

            return 15;
        }
        if(GPIO_Pin_row_two_read==RESET)
        {

            return 7;
        }
        if(GPIO_Pin_row_three_read==RESET)
        {

            return 11;
        }
        if(GPIO_Pin_row_four_read==RESET)
        {

            return 3;
        }
    }//3列
    GPIO_SetBits(GPIO_PORTA, GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four);                 
    GPIO_SetBits(GPIO_PORTC,GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four);
    
    GPIO_ResetBits(GPIO_PORTC,GPIO_Pin_line_three);
    if(GPIO_Pin_row_one_read|GPIO_Pin_row_two_read|GPIO_Pin_row_three_read|GPIO_Pin_row_four_read==RESET)
    {

        SysTick_Delay_ms(10);
        if(GPIO_Pin_row_one_read==RESET)
        {

            return 14;
        }
        if(GPIO_Pin_row_two_read==RESET)
        {

            return 6;
        }
        if(GPIO_Pin_row_three_read==RESET)
        {

            return 10;
        }
        if(GPIO_Pin_row_four_read==RESET)
        {

            return 12;
        }
    }
    GPIO_SetBits(GPIO_PORTA, GPIO_Pin_row_one|GPIO_Pin_row_two|GPIO_Pin_row_three|GPIO_Pin_row_four);                 
    GPIO_SetBits(GPIO_PORTC,GPIO_Pin_line_one|GPIO_Pin_line_two|GPIO_Pin_line_three|GPIO_Pin_line_four);
    
    GPIO_ResetBits(GPIO_PORTC,GPIO_Pin_line_four);
    if(GPIO_Pin_row_one_read|GPIO_Pin_row_two_read|GPIO_Pin_row_three_read|GPIO_Pin_row_four_read==RESET)
    {

        SysTick_Delay_ms(10);
        if(GPIO_Pin_row_one_read==RESET)
        {

            return 16;
        }
        if(GPIO_Pin_row_two_read==RESET)
        {

            return 8;
        }
        if(GPIO_Pin_row_three_read==RESET)
        {

            return 12;
        }
        if(GPIO_Pin_row_four_read==RESET)
        {

            return 4;
        }
    }
    return -1;
}

#ifndef _BSP_BUTTON_H
#define _BSP_BUTTON_H
#include “stm32f10x.h”

#define RCC_APBxPeriphClockCmd     RCC_APB2PeriphClockCmd

#define GPIO_PORTA                 GPIOA                   //列
#define GPIO_PORTC                 GPIOC                   //行

#define   GPIO_Pin_line_one          GPIO_Pin_3            //1行
#define   GPIO_Pin_line_two          GPIO_Pin_1            //2行
#define   GPIO_Pin_line_three        GPIO_Pin_2            //3行
#define   GPIO_Pin_line_four         GPIO_Pin_0            //4行

#define   GPIO_Pin_row_one           GPIO_Pin_4            //1列
#define   GPIO_Pin_row_two           GPIO_Pin_6            //2列
#define   GPIO_Pin_row_three         GPIO_Pin_5            //3列
#define   GPIO_Pin_row_four          GPIO_Pin_7            //4列

#define   GPIO_Pin_row_one_read      GPIO_ReadInputDataBit(GPIO_PORTA, GPIO_Pin_row_one)
#define   GPIO_Pin_row_two_read      GPIO_ReadInputDataBit(GPIO_PORTA, GPIO_Pin_row_two)
#define   GPIO_Pin_row_three_read    GPIO_ReadInputDataBit(GPIO_PORTA, GPIO_Pin_row_three)
#define   GPIO_Pin_row_four_read     GPIO_ReadInputDataBit(GPIO_PORTA, GPIO_Pin_row_four)

void SysTick_Delay_ms(uint32_t ms);
void KEY_GPIO_Config(void);
int Key_Scan_Mode(void);
void Key_Scan_Panduan(void);
#endif
#include “stm32f10x.h”
#include “bsp_usart.h”
#include “bsp_led.h”
#include “bsp_button.h”
void delay(uint32_t ms)
{

    uint32_t i;
    SysTick_Config(72000);
    for(i=0;i<ms;i++)
    {

        while (!((SysTick->CTRL)&(1<<16)));
    }
    SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}
int main()
{

    LED_GPIO_Config();
    USART_Mode_Config();
    KEY_GPIO_Config();
    while(1)
    {

        int k;
        k=Key_Scan_Mode();;
        printf(“%d\n”,k);
        delay(500);
    }
}

今天的文章矩阵键盘程序代码(基于STM32F103)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8500.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注