蓝桥杯物联网竞赛_STM32L071_4_按键控制

文章讲述了如何在CubMX和Keil环境下配置硬件,使用按键S1控制程序,通过Function.c和.h中的函数实现OLED的字符显示,包括GPIO引脚检测和I2C通信。提到实验板特性及头文件的使用注意事项。

原理图:

在这里插入图片描述
在这里插入图片描述
当按键S1按下PC14接GND,为低电平

CubMX配置:

在这里插入图片描述

Keil配置:

main函数:

while (1)
  {
    /* USER CODE END WHILE */
		 
		OLED_ShowString(24, 0, "<KeyCheck>", 16);
		 
    if(Function_KEY_S1Check() == 1){ 
			OLED_ShowString(32, 2, "key:", 16);
			OLED_ShowString(64, 2, "PR", 16);
		}
		else{
			OLED_ShowString(32, 2, "key:", 16);
			OLED_ShowString(64, 2, "RL", 16);
		}
		 
    /* USER CODE BEGIN 3 */
  }

Function.c和.h函数:

#include "Function.h"
#include "i2c.h"
#include "oled.h"

void OLED_Write(unsigned char type, unsigned char data){
	unsigned char Write_Data[2];
	Write_Data[0] = type;
	Write_Data[1] = data;
	HAL_I2C_Master_Transmit(&hi2c3, 0x78, Write_Data, 2, 0xff);
}


void Function_OledEnable(unsigned char ms){
	HAL_GPIO_WritePin(OLED_Power_GPIO_Port, OLED_Power_Pin, GPIO_PIN_RESET);
	HAL_Delay(ms);
	OLED_Init();
}

uint8_t Function_KEY_S1Check(void){
	if(HAL_GPIO_ReadPin(KEY_S1_GPIO_Port, KEY_S1_Pin) == GPIO_PIN_RESET) return (uint8_t) 1;
	else return (uint8_t) 0;
}

#ifndef __FUNCTION__
#define __FUNCTION__
#include <stdint.h>

void OLED_Write(unsigned char type, unsigned char data);
void Function_OledEnable(unsigned char ms);
uint8_t Function_KEY_S1Check(void);
#endif

效果:

按键松开:
在这里插入图片描述
按下:

在这里插入图片描述
OLED显示:

对于6*8的字符,纵向最多输出四行,横向最多输出16个
在这里插入图片描述

对于8*16的字符,每个字符战占两行,纵向最多输出两行,横向最多输出16个
在这里插入图片描述
对于本Oled屏幕其横向占128位,纵向估计为32位

至于为什么6*8字符打印横向最多也是16个,这是因为OLED_ShowString是按照每8字节打印一个字符,理论上如果用ShowChar函数横向最多能打印21个
在这里插入图片描述
还有一点就是打印超出部分会换行继续打印

在这里插入图片描述

拓展:

1.实验板GPIO引脚无论是上拉还是下拉都可以检测出外界输入的高电平还是低电平,这和模拟电路不一样模拟电路是1&01&1来判断,当模拟电路引脚默认电平为低即0,那么外界输入为1或者0它都不能判断,而实验板是通过输入电平是否能改变本引脚的电平大小来判断,外界输入电平导致本引脚电平变高,所以外界为高电平,外界输入导致本引脚变低外界为低电平

2.代码引用的头文件比较有意思,理论上通过头文件能将零散代码连在一起,个别报错还是能运行例如:
在这里插入图片描述

这里oled.c没有引用Function.h文件所以有个函数没有定义,报了红线

但是在main函数中这些代码通过头文件组合在一起了,能运行:
在这里插入图片描述
3.oled使能函数一定要放在i2c初始化函数后面,因为先将i2c初始化了才能传递信息,才能被oled接收,才能被显示:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值