六、半小时三等奖

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qqGHJ/article/details/87221701

网上盛传蓝桥杯半小时获得三等奖,我们来唠一下;

既为应试考试尤其是选拔类的自然会有很多应试技巧,废话不多说,我们稍稍整理一下。

1、就嵌入式比赛而言如果提前进入考场,会看到电脑上有一个加密的压缩包和若干软件

在正式比赛前,我们可以先做些准备工作(当然我是指程序部分),首先建议自建工程,具体步骤见前文一、工程的建立和流水灯的实现

2、之后我们可以新建文本文档将一些必考的内容写上包括按键、led等

void KEY_Scan
{
if(RB1==0)
{
Delay_Ms(10);
if(RB1==0)
{
...
}



while(!RB1);

}

else if(RB2==0)
{
Delay_Ms(10);
if(RB2==0)
{
...
}



while(!RB2);

}

else if(RB3==0)
{
Delay_Ms(10);
if(RB3==0)
{
...
}



while(!RB3);

}

else if(RB4==0)
{
Delay_Ms(10);
if(RB4==0)
{
...
}



while(!RB4);

}



}

3、之后正式开始考试文档包括以下内容

添加文件后将工程建完, 另外将文档中给的参考例程都添加进去一般都会用到

完整的工程如下

4、板子和电脑的注意事项

我们在考场上是会有lcd的完整工程的我们可以先用它来检查板子的部分功能如果有问题可以提前更换,减小损失;建议询问监考老师确定电脑哪个盘不会被清空在关机之后以防意外,毕竟考5个小时对人对电脑都挺考验的。拿到试卷后我们有两个选择先做客观题(如果不出意外,以后的客观题应该没有电路图和流程图),视情况而定不过先选择客观题应该将时间保持在30min之内,给程序留下足够的时间;

5、其他基本功能的初始化

首先是滴答定时器,可以参照文档给的lcd历程,在it.c和main函数中添加相应语句同时修改lcd.c的延时方式,具体参考前文;

然后自定义一个lcd初始化函数

void LCD_Init(void)
{
    STM3210B_LCD_Init();
	LCD_Clear(Blue);
	LCD_SetBackColor(Blue);
	LCD_SetTextColor(White);
	
	SysTick_Config(SystemCoreClock/1000);


	LCD_DisplayStringLine(Line0,"                    ");	
	LCD_DisplayStringLine(Line1,"    Liquid Level    ");	
	LCD_DisplayStringLine(Line2,"                    ");
    LCD_DisplayStringLine(Line3,"  Height:           ");
	LCD_DisplayStringLine(Line4,"                    ");	
	LCD_DisplayStringLine(Line5,"  ADC:              ");
	LCD_DisplayStringLine(Line6,"                    ");
	LCD_DisplayStringLine(Line7,"  Level:            ");	
	LCD_DisplayStringLine(Line8,"                    ");
	LCD_DisplayStringLine(Line9,"                    ");	
	


}

在主函数前声明,在函数体中定义,其次是led和key的为了简洁我们将其统写在一起同时要是用到其他引脚也方便添加(像adc、蜂鸣器)

void GPIO_Int(void)
{

	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);

  //LED
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | 
    GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

	

	//KEY

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
/**************************************************************************************/
	GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| 
    GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
	GPIO_SetBits(GPIOD,GPIO_Pin_2);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);


}

然后是我们之前在文本文档写的KEY_Scan函数,对了RB1-RB4分别对应宏定义#define RB1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define RB2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
#define RB3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define RB4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)

当然有人建议将这些宏定义连同led灯(类似#define LED1 GPIO_Pin_8)写在另外的一个文件中命名为init.h(头文件的格式应当注意些)当然可以将初始化的其他内容写在init.c文件中,笔者发现往年那些大神们很多都选择这样做;

6、其他

现在的文档都是建立在没有看试卷的前提下的,所以要想三等奖还得接着做,但无疑基本功能的实现为下面的程序奠定了基础(对了,每个功能写完都应该烧进去测试一下稳扎稳打)

基本上每次试卷都要求板子上电 后显示特定内容我们可以放在lcd的初始化函数中,然后是其他类似led灯在某种情况下会亮(假如是按键)我们可以在KEY_Scan函数中写

void KEY_Scan(void)
{

if(RB1==0)
{
Delay_Ms(10);
if(RB1==0)
{
LCD_DisplayStringLine(Line5,"           11       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}


while(!RB1);

}

else if(RB2==0)
{
Delay_Ms(10);
if(RB2==0)
{
LCD_DisplayStringLine(Line5,"           22       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_10);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB2);

}

else if(RB3==0)
{
Delay_Ms(10);
if(RB3==0)
{
LCD_DisplayStringLine(Line5,"           33       ");

GPIO_ResetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);

GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB3);

}

else if(RB4==0)
{
Delay_Ms(10);
if(RB4==0)
{
LCD_DisplayStringLine(Line5,"           44       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
//GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 |GPIO_Pin_15);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB4);

}


}

然后再把其他一些小功能像蜂鸣器实现;当然根据试题而论我们甚至可以做点小弊,毕竟监考老师不一定每个人的程序都仔细看。不过只要你准备的足够充分,自然不会在意这些小把戏,好好准备还有一个多月的时间就要考试了!!!

附上完整代码

#include "stm32f10x.h"
#include "lcd.h"
#include <stdio.h>

#define RB1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define RB2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
#define RB3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define RB4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)


u32 TimingDelay = 0;

void Delay_Ms(u32 nTime);
void LCD_Init(void);
void GPIO_Int(void);
void KEY_Scan(void);



int main(void)
{


 LCD_Init();
 GPIO_Int();
 


  while (1)
  {
  KEY_Scan();
  }
}

void KEY_Scan(void)
{

if(RB1==0)
{
Delay_Ms(10);
if(RB1==0)
{
LCD_DisplayStringLine(Line5,"           11       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}


while(!RB1);

}

else if(RB2==0)
{
Delay_Ms(10);
if(RB2==0)
{
LCD_DisplayStringLine(Line5,"           22       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_10);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB2);

}

else if(RB3==0)
{
Delay_Ms(10);
if(RB3==0)
{
LCD_DisplayStringLine(Line5,"           33       ");

GPIO_ResetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);

GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB3);

}

else if(RB4==0)
{
Delay_Ms(10);
if(RB4==0)
{
LCD_DisplayStringLine(Line5,"           44       ");

GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
//GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 |GPIO_Pin_15);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}



while(!RB4);

}


}


void GPIO_Int(void)
{

	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);

  //LED
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

	

	//KEY

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_SetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11 | GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15);
	GPIO_SetBits(GPIOD,GPIO_Pin_2);
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);


}

void LCD_Init(void)
{
    STM3210B_LCD_Init();
	LCD_Clear(Blue);
	LCD_SetBackColor(Blue);
	LCD_SetTextColor(White);
	
	SysTick_Config(SystemCoreClock/1000);


	LCD_DisplayStringLine(Line0,"                    ");	
	LCD_DisplayStringLine(Line1,"    Liquid Level    ");	
	LCD_DisplayStringLine(Line2,"                    ");
    LCD_DisplayStringLine(Line3,"  Height:           ");
	LCD_DisplayStringLine(Line4,"                    ");	
	LCD_DisplayStringLine(Line5,"  ADC:              ");
	LCD_DisplayStringLine(Line6,"                    ");
	LCD_DisplayStringLine(Line7,"  Level:            ");	
	LCD_DisplayStringLine(Line8,"                    ");
	LCD_DisplayStringLine(Line9,"                    ");	
	


}
void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

猜你喜欢

转载自blog.csdn.net/qqGHJ/article/details/87221701