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

出错点

①超声波测距里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


如何实现依次显示?
我的思路如下:定义一个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


我的思路:
将输入的数字存到一个数组里,定义一个正确密码的数组,然后定义一个函数用来比较两个数组是否相等,通过返回值来反映是否数组相等

//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
//数码管显示程序如下

按键内所写

每一个按键有自己的功能,强烈建议在这里按键case里先只写相关函数
在一个按键中就写相应功能,思路十分清晰

我的错误思绪(十分的麻烦):
这样不好的思路也就会让我要写一堆标志去保证逻辑的畅通。
case 12题目中说了是确认按键,那么就判断是密码正确的,那里面就应该写一个判断是否正确的函数

做题流程

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

几秒后自动关闭类型

例如超声波距离小于30cm时候,door_flag=1;
否则的door_flag=0;
在中断里这样判断,如果door_flag1则开始加

!!下图中door_flag=5000改成door_count5000

//下图是中断里记时部分

//下图是door_flag触发及触发后实现功能部分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值