datasheet

STM32键盘-库函数

2019-06-24来源: eefocus关键字:STM32键盘  库函数  寄存器

昨天晚上老大回来看我频繁使用寄存器写程序给出指点,告诉我尽量使用库函数,少使用寄存器,毕竟寄存器在后面使用的时候还要一个一个查找手册可能太麻烦了,nice!


这次使用库函数操作键盘,很基础的实验,其中掺杂了之前的蜂鸣器和LED内容。


感觉基础键盘实验比较有价值的还是那个键盘操作函数,以下给出标准模板,mode作为参数时置0为不支持连续摁键,置1时为支持连续摁键。


//摁键函数,0为不支持连摁,1为支持连摁

u8 Key_Scan(u8 mode) 

{

    static u8 flag = 1;

    if(mode) flag = 1;

    if(flag && (KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || WK_UP == 1)) {

        flag = 0;

        if(KEY0 == 0) return 1;

        else if(KEY1 == 0) return 2;

        else if(KEY2 == 0) return 3;

        else if( WK_UP == 1) return 4;

    } else if(KEY0 == 1 && KEY1 == 1 && KEY2 == 1 && WK_UP == 0) flag = 1;

    return 0;

}

 


其余的无非是RCC时钟使能、GPIO初始化、各个功能的初始化、执行相关功能的操作,以下主要给出key.h、key.c、main.c


 


1.key.h


#ifndef __KEY_H

#define __KEY_H

#include "sys.h"


#define KEY0 PEin(4)

#define KEY1 PEin(3)

#define KEY2 PEin(2)

#define WK_UP PAin(0)


#define KEY0_PRES 1

#define KEY1_PRES 2

#define KEY2_PRES 3

#define WKUP_PRES 4



void key_init(void);


u8 Key_Scan(u8 mode);


#endif

 


2.key.c


#include "key.h"


void key_init()

{

    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;


    GPIO_Init(GPIOE, &GPIO_InitStructure);

    GPIO_SetBits(GPIOE, GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);



    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;


    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_SetBits(GPIOA, GPIO_Pin_0);

}


//摁键函数,0为不支持连摁,1为支持连摁

u8 Key_Scan(u8 mode) 

{

    static u8 flag = 1;

    if(mode) flag = 1;

    if(flag && (KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || WK_UP == 1)) {

        flag = 0;

        if(KEY0 == 0) return 1;

        else if(KEY1 == 0) return 2;

        else if(KEY2 == 0) return 3;

        else if( WK_UP == 1) return 4;

    } else if(KEY0 == 1 && KEY1 == 1 && KEY2 == 1 && WK_UP == 0) flag = 1;

    return 0;

}



 


3.main.c


#include "led.h"

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "beep.h"

#include "key.h"


int main()

{

u8 temp;

delay_init(168);

LED_Init();

key_init();

beep_init();

while(1) {

temp = Key_Scan(0);

switch(temp) {

case KEY0_PRES : 

LED0 = !LED0; 

break;

case KEY1_PRES : 

LED1 = !LED1;

break;

case KEY2_PRES :

LED0 = !LED0; 

LED1 = !LED1;

break;

case WKUP_PRES :

BEEP = !BEEP;

break;

default : 

delay_ms(20);

continue;

}

}


}



关键字:STM32键盘  库函数  寄存器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic465589.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32串口通信实验-库函数
下一篇:STM32蜂鸣器-寄存器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32 USB HID 键盘

USB的HID键盘 报告0x05, 0x01,   //   USAGE_PAGE (Generic Desktop)0x09, 0x06,   //   USAGE (Keyboard)0xa1, 0x01,   //   COLLECTION (Application)0x05, 0x07,   //USAGE_PAGE (Keyboard)0x19, 0x29,   //USAGE_MINIMUM (Keyboard ESCAPE)0x29, 0xe7,  
发表于 2017-07-13

stm32_ps2键盘显示测试程序

[cpp] view plaincopy   //PS2键盘测试程序,可换行,按shift不放接着输入   //可输出大写,按下CAPS输出大写,再次按下输出小写   //此程序只用来测试,代码冗余,仅供参考,可根据需要自行删减   //PA13->PS2.CLK  PA15->PS2.DATA      #include <stm32f10x_lib.h>   #include "
发表于 2016-01-11

stm32_ps2键盘显示测试程序

;   Stm32_Clock_Init(9);//系统时钟设置       delay_init(72);     //延时初始化       uart_init(72,9600); //串口1初始化         EXTIX_Init();       LED_Init(); 
发表于 2015-09-09

【嵌入式】STM32的库函数使用

使用编译环境为MDK5,烧录器将会使用JTAG和串口两种,芯片为STM32F103C8T6零、前准备1.MDK5编译环境2.JTAG驱动或串口驱动一、建立工程模板,写一个简单的小程序1).创建工程目录这里就会使用MDK创建工程了,由于STM32的工程已经比较大了,所以在工程目录下将会再创建多个目录,以便整理。(说明一下,其实随便放都可以,只要工程都能包含以下说到的文件即可)这里工程名就叫template吧(.代表工程目录):.CORE 存放芯片内核驱动文件;.FWLIB 使用库函数的话存放库函数;.OBJ 存放编译生成文件;.SYSTEM 存放系统代码;.USER 存放工程文件,应用程序等。新建好后就可以先把将会用到的文件放进去
发表于 2019-07-19
【嵌入式】STM32的库函数使用

STM32入门之旅(第二天)-------开发环境搭建、库函数使用

一.如何学习STM32学好STM32的编程,学好它提供好的库函数就可以了。ST公司会提供STM32的所有库函数的源码与使用手册!1)C语言2)阅读库函数与帮助文档,告诉函数的调用次序,详细实现的功能。3)使用Keil工具,集合可视化编写代码、编译代码、下载运行、程序仿真用于跟踪代码。4)熟悉外围设备使用,阅读时序图、英文文档二、搭建ARM Cortex-M4的开发环境1、安装Keil公司第五代软件开发板平台,Keil 5 或 MDK 5,版本MDK5.14,可以编写代码、编译代码、下载程序。a.安装mdk514.exeb.看情况是否去破解软件1)如果当前编译的程序小于32KB,可以不用破解软件。如果大于32KB,就得破解该软件
发表于 2019-07-10

再造STM32---第六部分:自己写库—构建库函数雏形

和 F4 之间的程序移植,只需要小修改即可。而如果要移植用寄存器写的程序,我只想说:“呵呵”。       用库来进行开发,市场已有定论,用户群说明了一切,但对于 STM32 的学习仍然有人认为用寄存器好,而且汇编不是还没退出大学教材么?认为这种方法直观,能够了解到是配置了哪些寄存器,怎样配置寄存器。事实上,库函数的底层实现恰恰是直接配置寄存器方式的最佳例子,它代替我们完成了寄存器配置的工作,而想深入了解芯片是如何工作的话,只要直接查看库函数的最底层实现就能理解,相信你会为它严谨、优美的实现方式而陶醉, 要想修炼 C 语言,就从 ST 的库开始吧。 所以在以后的章节中,使用软件库是我们的重点
发表于 2019-06-28
再造STM32---第六部分:自己写库—构建库函数雏形

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved