[蓝桥杯国赛]第三届国赛题目模拟

发布时间:2023-10-02 18:30

出错点

①超声波测距里while后没有加分号
②超声波存储距离的变量需要定义u16
③Read_Key()函数里定义的key_return需要赋初值0

难点1

\"\"
我的思路:定一个记录持续时间的变量,每秒加1,并将当前记时赋给一个变量past_relay_sustain_time(用作当不满足小于30cm时候接着定时,直到5s关闭蜂鸣器)当5s后去关掉蜂鸣器
但是存在一个问题就是触发蜂鸣器亮时,满足距离小于30,但是触发后就物体就离开了,此时距离不小于30,所以在else里使用past_relay_sustain_time模仿距离小于30时触发继电器的操作

if(sonic_get_distance<30 )		//费了点时间,实现这个亮5s后自动熄灭的功能,学习一下别人怎么实现的!!!
{
	if(relay_sustain_time==0)
	relay_flag=1;
	if(relay_one_sec_flag==1)
	{
		relay_one_sec_flag=0;
		relay_sustain_time++;
		if(relay_sustain_time==6)
		{
			relay_flag=0;
		}
	}
	past_relay_sustain_time=relay_sustain_time;
}
else
{
	if(past_relay_sustain_time!=0)
	{
		relay_sustain_time=0;
	}
	if(relay_one_sec_flag==1)
	{
		relay_one_sec_flag=0;
		past_relay_sustain_time++;
		if(past_relay_sustain_time==6)
		{
			relay_flag=0;
		}
	}
}

难点2

\"[蓝桥杯国赛]第三届国赛题目模拟_第1张图片\"
如何实现依次显示?
我的思路如下:定义一个index,让按下一次按键就进行加一,然后将此按键按下对应的数字赋给一个数组

case 5:
if(menjin_mode==2)
{
	mima_index++;	
	mimamen_menu[mima_index+1]=smg_duan[8];	//用来数码管显示
	input_password[input_index]=8;	//用来与正确密码对比的密码数组
	input_index++;
}

难点3

\"[蓝桥杯国赛]第三届国赛题目模拟_第2张图片\"
我的思路:
将输入的数字存到一个数组里,定义一个正确密码的数组,然后定义一个函数用来比较两个数组是否相等,通过返回值来反映是否数组相等

//0:不相等 1:两个相等
u8 judge_array(u8 a[],u8 b[])
{
	u8 i=0;
	for(i=0;i<6;i++)	//第三个数组到第八个数组
	{
		if(a[i]!=b[i])return 0;
	}
	return 1;
}

参考他人思路后所收心得

mode定义依据

别人是根据大方向设置了mode,然后如果一个mode里还有小界面就会设置一个新的变量作为另一个模式变量。按下如下操作即可,set_mode == 0的话就是mode == 0本身的界面,如果set_mode == 1的话就是小界面1,如果set_mode == 2就是小界面2
//数码管显示程序如下
\"[蓝桥杯国赛]第三届国赛题目模拟_第3张图片\"

按键内所写

每一个按键有自己的功能,强烈建议在这里按键case里先只写相关函数
在一个按键中就写相应功能,思路十分清晰
\"[蓝桥杯国赛]第三届国赛题目模拟_第4张图片\"
我的错误思绪(十分的麻烦):
\"\"这样不好的思路也就会让我要写一堆标志去保证逻辑的畅通。
case 12题目中说了是确认按键,那么就判断是密码正确的,那里面就应该写一个判断是否正确的函数

做题流程

整体做题目步骤,分模式的话,一个模式一个模式的写,先写按键方面的模式,因为按键的逻辑比较复杂,先复杂再简单

几秒后自动关闭类型

例如超声波距离小于30cm时候,door_flag=1;
否则的door_flag=0;
在中断里这样判断,如果door_flag1则开始加
\"\"
!!下图中door_flag=5000改成door_count5000

//下图是中断里记时部分
\"[蓝桥杯国赛]第三届国赛题目模拟_第5张图片\"
//下图是door_flag触发及触发后实现功能部分
\"[蓝桥杯国赛]第三届国赛题目模拟_第6张图片\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号