部分程序更新-蓝桥杯嵌入式第十五届4T模拟赛程序设计题


前言

因为之前发的那篇博客存在一定的问题,所以这篇文章就是针对于前面那篇做出的一些调整(but 不是说完全调整了哈,因为本身能力还是不太行,所以就只把自己能够调整的进行了调整)

一、调整部分说明

本次调整修改了LED灯的显示部分

二、具体调整程序块

1.回调函数(计时)

由于前面两个定时器的使用并没有达到程序要的效果,所以这次我直接没有用定时器计时1s,而是转用了HAL库的函数HAL_Delay();

这里要提到的一个点就是,我在程序中使用的是HAL_Delay(1000);(在后面会给出来的),因为我之前了解到的这个函数延时的单位是1ms,所以直接就1000了。

但是我在查的时候有许多博主说它存在一个1ms延时的情况,所以在平时使用的时候需要注意。

因为这里的参数比较大,所以1ms可以忽略,就直接了。

(以上只是我目前了解到的一些,所以会存在一些认知错误的地方,希望懂的博主告知~~~~~)

2.LED模块函数

单个LED灯的亮灭情况改变:

void Change_One_Led(unsigned char led ,unsigned char value)
{
	HAL_GPIO_WritePin(GPIOC,led<<8,value==1?GPIO_PIN_RESET:GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

HAL_GPIO_WritePin函数有三个参数,分别是所属的GPIO组,该GPIO组中的哪个引脚,该引脚要设置的高低电平

检测合格时对应LED的亮灭情况:

void Led_Check_Qulify()
{
	if(qulify_37==1)
		{
			Change_One_Led(0x01,1);
			HAL_Delay(1000);
			Change_One_Led(0x01,0);
			qulify_37=0;
		}
	if(qulify_38==1)
		{
			Change_One_Led(0x02,1);
			HAL_Delay(1000);
			Change_One_Led(0x02,0);
			qulify_38=0;
		}
}

这里就用到了我上面提到的HAL_Delay()函数。调整的地方就是把这个小的功能单独用了一个函数封装起来,一定要记得的就是在运行之后要把检测合格对应的标志初始一下。

显示界面时对应LED的亮灭:

void Change_Menu_Led(uint8_t menu)
{
	if(menu%3==0)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	}
	
	else if(menu%3==1)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	}
	
	else
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	}
	
	
}

这里就实现比较简单基础了(原谅我的小小实现,米有那么“高大”)主要注意的就是每当切换了一个显示界面,要记得把上个显示界面对应的LED灯熄灭。

LED灯与LCD显示冲突:

这个情况是我在运行的时候发现的一个点,当时不太明白,以为是我的程序有问题,但是后面别人提醒了一下,所以才知道是因为这个两个在使用时会有冲突。具体的原因可以去看这篇文章(也是一个很厉害的大佬^^)

http://t.csdnimg.cn/q0rh5

调整之后的初始化函数:

void sys_work()
{		
		
		Usart_Function();
		Get_ADC(37);
		Get_ADC(38);
		Key_Proc();
		Display_Lcd();
		HAL_GPIO_WritePin(GPIOC,0xff00,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
		Change_Menu_Led(menu);
}

总结

好啦,以上就是我目前的一些调整,希望在记录自己的过程中可以有一点点灵感给你们。

(再唠叨一下,有不对的地方,非常欢迎告知

  • 45
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值