2024年4月 蓝桥杯 嵌入式复习资料

本文针对有一定HAL库开发基础的人,进行蓝桥杯嵌入式硬件开发复习。涵盖LED控制、按键控制、ADC、LCD液晶屏、IIC协议应用等内容,介绍了各部分的原理、注意事项及代码编写方法,如LED控制需打开锁存器,按键要消抖等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文针对于具有一定HAL库开发基础的人复习,如有侵权,我表示抱歉,请联系作者更改或删除,谢谢。本资料大部分来源于蚂蚁科技资料,已购买!!!!

Day一、LED

LED与LCD会发生冲突,在初始化LCD之后需要关闭LED。单独编写操作LED的函数。

    LCD_Init();//LCD 初始化
	LED_Control(0x00);//关闭LED控制

db4494c02bb44c099daa059488f1f8eb.png

根据此原理图,我们控制LED时需要打开锁存器后才能控制LED,即先打开锁存器(拉高PD2电平),再关闭锁存器 (拉低PD2电平),Q端的数据就可以稳定输出。

设置关于LED 的IO口全为低电平输出模式

1.编写单独的LED控制函数:

#include "led.h"


void LED_Control(u8 led_ctrl)
{
    //先熄灭所有LED灯  //HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);	//让PC8~PC15输出高电平,熄灭LED
    HAL_GPIO_WritePin(GPIOC, 0xff00, GPIO_PIN_SET);         //让PC8~PC15输出高电平,熄灭LED
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);     //打开锁存器
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);   //关闭锁存器

    //根据led_ctrl来点亮对应的LED
    HAL_GPIO_WritePin(GPIOC, led_ctrl << 8, GPIO_PIN_RESET);//根据led_ctrl输出低电平,点亮LED
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);     //打开锁存器
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);   //关闭锁存器
}

使用示例:我的板子是0x55为 0101 0101      0是咩,1时亮,请注意你的板子引脚设置

  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
    LED_Control(0xff);//全开
    HAL_Delay(500);	//延时500毫秒
    LED_Control(0x00);//全关
    HAL_Delay(500);	//延时500毫秒
  }

另一种方法更为高效,采用滴答定时器的方式,编写单独的LED函数,在主循环里调用该函数任务即可。

// LED执行程序
__IO uint32_t ledTick = 0; 
u8 led_ctrl = 0xff; 
void LED_Process(void) 
{ 
    if(uwTick - ledTick < 100) return ; //不阻塞状态延时100ms
        ledTick = uwTick; 
    LED_Control(led_ctrl); 
    led_ctrl = ~led_ctrl; 
}

要采用不阻塞状态延时,需要创建一个函数,本质上是满足技术到达设定值时才可运行下面的条件任务,否则直接return退出函数,继续执行其他任务命令

Day二、按键控制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂北研猛男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值