蓝桥杯十三届第二场程序设计

文章目录

  • 前言
  • 一、第二场程序设计赛题
    • 1.赛题
    • 2.编程逻辑思路
  • 二、程序步骤
    • 1.页面切换
    • 2.页面数据
    • 3.测试所有按键
    • 4.得到超声波,ADC, DAC的数据
    • 5.写代码时遇到的一些小bug
  • 总结


前言

第一场代码讲解
本人这次参加蓝桥杯第二场线下比赛,对这套赛题有着独特见解,总的来说,难度和往届持平,但是因为省赛第一次考超声波模块,难免会让大家觉得难度会很难。接下来给大家讲解一下我的程序。


一、第二场程序设计赛题

1.赛题

蓝桥杯十三届第二场程序设计_第1张图片
蓝桥杯十三届第二场程序设计_第2张图片
蓝桥杯十三届第二场程序设计_第3张图片
蓝桥杯十三届第二场程序设计_第4张图片

2.编程逻辑思路

1.先将按键做到可以页面切换;
2.将每个页面的数据使用数字代替完成;
3.测试按键和页面全部功能实现;
4.测试每个所需要的模块;
5.将超声波,ADC模块的到的数据放在相应的页面里;
6.完成相应的程序;
7.将DAC代码插入到程序中,根据题意得到想要的;
8.再将LED插入到代码里;
9.最后根据题意检查bug,修改,重复,修改;

二、程序步骤

1.页面切换

代码如下:

void Key4_Driver()
{
	key4++;
	switch(key4)
	{
		case(1):
		key4_down = 1;
		led_flag = 2;break;//测距界面
		case(2):
		menu_index = 2;choose_value = 1;key4_down = 0;key5 = 0;//清除key5按下次数
		allow_value = 1;led_flag = 3;save_Value = 1;break;//参数  进入参数界面  选择上限值  参数失效
		case(3):
		menu_index = 1;allow_value = 0;//
		led_flag = 1;save_Value = 0;key4 = 0;break;//电压   参数生效
	}
}

2.页面数据

void Smg_Show()
{//电压
	menu1[0] = smgduan[12];
	menu1[1] = smgduan[11];
	menu1[2] = smgduan[11];
	menu1[3] = smgduan[11];
	menu1[4] = smgduan[11];
	menu1[5] = smgduan[ui_volt/100%10]&0x7f;
	menu1[6] = smgduan[ui_volt/10%10];
	menu1[7] = smgduan[ui_volt%10];
	//参数
	menu2[0] = smgduan[13];
	menu2[1] = smgduan[11];
	menu2[2] = smgduan[11];
	menu2[3] = smgduan[Vmax/10%10]&0x7f;
	menu2[4] = smgduan[Vmax%10];
	menu2[5] = smgduan[11];
	menu2[6] = smgduan[Vmin/10%10]&0x7f;
	menu2[7] = smgduan[Vmin%10];
		//测距L
	menu3[0] = smgduan[14];
	menu3[1] = smgduan[11];
	menu3[2] = smgduan[11];
	menu3[3] = smgduan[11];
	menu3[4] = smgduan[11];
	if(distance>99)
	{
		menu3[5] = smgduan[distance/100%10];
		menu3[6] = smgduan[distance/10%10];
		menu3[7] = smgduan[distance%10];
	}
	else if(distance<=99&&distance>9)
	{
		menu3[5] = smgduan[11];
		menu3[6] = smgduan[distance/10%10];
		menu3[7] = smgduan[distance%10];
	}
	else if(distance<=9)
	{
		menu3[5] = smgduan[11];
		menu3[6] = smgduan[11];
		menu3[7] = smgduan[distance%10];
	}
		//测距A
	menu4[0] = smgduan[14];
	menu4[1] = smgduan[11];
	menu4[2] = smgduan[11];
	menu4[3] = smgduan[11];
	menu4[4] = smgduan[11];
	menu4[5] = smgduan[15];
	menu4[6] = smgduan[15];
	menu4[7] = smgduan[15];
}

3.测试所有按键


uchar key4;
uchar key5;
bit key4_down;
void Key4_menu()
{
	if(key4_down == 1)
	{
	if(view == 0){menu_index = 3;}
	else if(view == 1){menu_index = 4;}
	}
}

void Key4_Driver()
{
	key4++;
	switch(key4)
	{
		case(1):
		key4_down = 1;
		led_flag = 2;break;//测距界面
		case(2):
		menu_index = 2;choose_value = 1;key4_down = 0;key5 = 0;//清除key5按下次数
		allow_value = 1;led_flag = 3;save_Value = 1;break;//参数  进入参数界面  选择上限值  参数失效
		case(3):
		menu_index = 1;allow_value = 0;//
		led_flag = 1;save_Value = 0;key4 = 0;break;//电压   参数生效
	}
}

void Key5_Driver()
{
	key5++;
	switch(key5)
	{
		case(1):choose_value = 0;break;//下限
		case(2):choose_value = 1;key5 = 0;break;//上限
	}
}

void Key6_Driver()
{
	if(allow_value==1)
	{
		if(choose_value == 0)
		{
			Vmin=Vmin+5;
			if(Vmin>50)
				Vmin = 5;
		}
		else if(choose_value == 1)
		{
			Vmax=Vmax+5;
			if(Vmax>50)
				Vmax = 5;
		}
	}
}
void Key7_Driver()
{
	if(allow_value==1)
	{
		if(choose_value == 0)
		{
			Vmin=Vmin-5;
			if(Vmin<5)
				Vmin = 50;
		}
		else if(choose_value == 1)
		{
			Vmax=Vmax-5;
			if(Vmax<5)
				Vmax = 50;
		}
	}
}

4.得到超声波,ADC, DAC的数据

主循环里代码

while(1)
	{
		Key4_Proc();
		if(adc_flag)
		{
			adc_flag = 0;
			volt = IIC_RDate(0x03);
			ui_volt = volt*1.96;
		}
		if(ultra_flag)
		{
			ultra_flag = 0;
			distance = Wave_Recv();
		}
		if(save_Value==0)//参数生效
		{
			ADC_Value_judge();
		}
		DAC_Value_judge();
		LED_judge();
		Key4_menu();
		Smg_Show();
	}``

5.写代码时遇到的一些小bug

1.LED微亮
2.DAC电压值输出较低

总结

以上就是今天要讲的内容,本文仅仅简单介绍了第十三届第二场程序的解决思路,本人写的代码还是有一些小bug的,希望有大佬能够帮忙指正,谢谢大家!!!

全部代码附上链接。

你可能感兴趣的:(蓝桥杯,蓝桥杯,单片机,职场和发展)