【蓝桥杯嵌入式】基础模块

一、LED

1.原理图

在这里插入图片描述

2.CubeMx配置

将时钟频率配置成80kHz。
在这里插入图片描述
配置Led1-Led8的引脚为推挽输出模式(PC8-PC15),将初始电平配置成高电平。
在这里插入图片描述

3.代码

led.c

/*
函数名:LED_Disp
入口参数:ucLed
返回值:void
函数功能:Led8-Led0对应的8个数
*/
void LED_Disp(unsigned char ucLed)
{
   
	//熄灭所有的LED
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	
	// 8个Led占据GPIOC的高八位
	HAL_GPIO_WritePin(GPIOC,ucLed<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

二、KEY

1.原理图

在这里插入图片描述

2.CubeMx配置

配置引脚PB0、PB1、PB2、PA0为输入模式。
在这里插入图片描述

3.代码

/*
函数名:Key_Scan
入口参数:void
返回值:unsigned char 被按下的键值
函数功能:扫描按键返回被按下的键值
*/
unsigned char Key_Scan(void)
{
   
	unsigned char unKey_Val = 0;
	
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 1;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET)
		unKey_Val = 2;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == GPIO_PIN_RESET)
		unKey_Val = 3;
	
	if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 4;	
	
	return unKey_Val;
}

三、LCD

此模块用的是官方给的示范代码,只需会用即可。

1.原理图

在这里插入图片描述

2.代码

void Lcd_Proc(void)
{
   
		if(uwTick-uwTick_Lcd_Set_Point<100)		//减速
		return;
	  uwTick_Lcd_Set_Point = uwTick;
		
	//	LCD_Clear(White); //
		count++;
		sprintf((char *)buf,"    %d",count);
		LCD_DisplayStringLine(Line1,buf);	//显示一行字符 Linel0-Line9
}

四、ADC

1.原理图

在这里插入图片描述

2.CubeMx配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码

在adc.c中加入下面的函数:

uint16_t getADC1(void)
{
   
	uint16_t adc = 0;
	
	HAL_ADC_Start(&hadc1);
	adc = HAL_ADC_GetValue(&hadc1);
	
	return adc;
}


uint16_t getADC2(void)
{
   
	uint16_t adc = 0;
	
	HAL_ADC_Start(&hadc2);
	adc = HAL_ADC_GetValue(&hadc2);
	
	return adc;
}

main.c

void Lcd_Proc(void)
{
   
		if(uwTick-uwTick_Lcd_Set_Point<100)		//减速
		return;
	    uwTick_Lcd_Set_Point = uwTick;
		// 12位采样,将3.3V电压分成4096份
		sprintf((char *)buf,"      ADC1:%0.3f",(((float)getADC1())/4096)*3.3);
		LCD_DisplayStringLine(Line2,buf);
		sprintf((char *)buf,"      ADC2:%0.3f",(((float)getADC2())/4096)*3.3);
}

五、IIC

1.原理图

在这里插入图片描述

2. 代码

#include "iic.h"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值