粤嵌stm32f407zet6开发板:一个简单的按键测试,按键值通过老师给的oled显示函数显示出来

做着玩玩(做这个的时候感觉有点像参加蓝桥杯之前做的那些测试,当时看的B站上一个叫小蜜蜂的老师),为智能门锁小项目做个准备。

一、原理图

按键key0对应PA0引脚,key1、2、3分别是PE2、3、4引脚。

二、相关主要代码

1、key.c文件

#include "key.h"
#include "stm32f4xx.h"                  // Device header
#include "oled.h"
#include "delay.h"

void key_init(void)
{
	// GPIO信息配置结构体
	GPIO_InitTypeDef  GPIO_InitStructure;

	// 1、GPIO硬件使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

	// 2、GPIO信息配置
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;							// 引脚:第1根引脚
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;						// 模式:输入模式						              
	GPIO_Init(GPIOA, &GPIO_InitStructure);				            	// 通过此函数,将配置的信息写入到相应的寄存器中                
                                         
	GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;	// 引脚:第1根引脚            
	GPIO_Init(GPIOE, &GPIO_InitStructure);				            	// 通过此函数,将配置的信息写入到相应的寄存器中    	                
}

unsigned char check_key(void)
{
	if(key0==0)
	{delay_ms(20);while(key0==0);return 1;}
	
	if(key1==0)
	{delay_ms(20);while(key1==0);return 2;}
	
	if(key2==0)
	{delay_ms(20);while(key2==0);return 3;}
	
	if(key3==0)
	{delay_ms(20);while(key3==0);return 4;}
	
	return 0;
}

unsigned char keynum;
void show_keynum(void)
{
	unsigned char s;
	s=check_key();
	if(s!=0)
	{keynum=s;}
	OLED_ShowCHinese(0,0,keynum);
}

这里这样子弄想起了当时蓝桥杯自己做的笔记:(偏新手了23333)

2、key.h文件

#ifndef __key_h__
#define __key_h__

extern void key_init(void);
#define key0 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
#define key1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)
#define key2 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)
#define key3 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)

unsigned char check_key(void);
void show_keynum(void);

#endif

3、main.c文件

#include "work.h"
#include "oled.h"
#include "key.h"
int main(void)
{
	system_init();
	while(1)
	{
		show_keynum();
	}
}

注意:函数system_init()作为初始化用,里面包含相关的初始化函数信息——(函数system_init()存放在work.h文件里)

void system_init(void)
{
	SysTick_Init(168);
	OLED_Init();					// oled模块引脚初始化
	OLED_Clear(); 					// oled模块清屏(清全屏)
	led_init();
	key_init();
}

4、oled的汉字库(只展示相关部分,因为其它用不上)

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00},/*"1",1*/
/* (8 X 16 , 宋体 )*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",2*/
/* (8 X 16 , 宋体 )*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00},/*"3",3*/
/* (8 X 16 , 宋体 )*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24},/*"4",4*/
/* (8 X 16 , 宋体 )*/

三、运行效果

 可以看到显示初始为0,按下按键后0.96寸oled显示屏一直显示所设置的按键值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值