蓝桥杯嵌入式——第十一届-省赛模拟试题

蓝桥杯嵌入式——第十一届-省赛模拟试题

一、赛题分析

系统框图如下,这一届主要用到了LCD、LED、USART、按键、EEPROM等模块。这些模块的配置都是比较常规的,只是涉及了一个按键的长按短按的考点,对于按键的长按和短按,只需要开辟一个变量,记录一下按键按下的时间,再判断是否是长按。然后对与LCD还考了一下高亮显示,这个在我的另外一篇博客中详细说明,点我跳转在这里插入图片描述

二、问题总结

  1. 将按键的扫描放在中断里面,这样的话按键会触发的比较及时,扫面的时间也更加精准。
    尽量不要把延时放在按键里面,因为按键是放在中断里面的,中断里面不能有延时。在这次做赛题的过程中就遇到了一个问题,我在按键扫描程序里面向eeprom写数据,然后导致程序卡死,就是因为延时比较长,所以以后需要注意。
  2. 如下图,赛题有个这样的要求,那么实际测试的时候不是用的我们自己的开发板,那么读出来的数据不久不符合要求了。所以我考虑的是,首先向eeprom的某个字节或者某几个字节写一些特定的数据,就相当于是我自己的一个专有标识了。开发板上电的时候,我们先从这些位置读取数据出来看看是不是自己设置的标识,如果不是,就表示这个开发板是第一次上电,就向里面写入我们的标识,如果是,就表示这个就是自己的开发板,并且不是第一次上电。在这里插入图片描述
if(eeprom_read(7) == 21 && eeprom_read(8) == 43 && eeprom_read(9) == 65)
{
    
    
	int temp;
	temp = eeprom_read(0);
	if(temp < 24)
		time_alarm.hour = temp;
	temp = eeprom_read(1);
	if(temp < 60)
		time_alarm.min = temp;
	temp = eeprom_read(2);
	if(temp < 60)
		time_alarm.sec = temp;
	
	RTC_SETTING_cnt = eeprom_read(3);
	ALARM_SETTING_cnt = eeprom_read(3);
}
else
{
    
    
	eeprom_write(7,21);
	Delay_Ms(5);
	eeprom_write(8,43);
	Delay_Ms(5);
	eeprom_write(9,65);
	Delay_Ms(5);
	eeprom_write(0,12);
	Delay_Ms(5);
	eeprom_write(1,0);
	Delay_Ms(5);
	eeprom_write(2,0);
	Delay_Ms(5);
	eeprom_write(3,0);
	Delay_Ms(5);
	eeprom_write(4,0);
	Delay_Ms(5);
}

三、代码

码云
GitHub

猜你喜欢

转载自blog.csdn.net/qq_43715171/article/details/115316989