蓝桥杯单片机历年真题汇总-以及参考代码-含第十五届蓝桥杯单片机大赛真题以及参考工程

        内容题干: 

第十四届省二以及第十五届参赛待定选手,目前刚刚比赛完第十五届比赛,还好准备的充分。刚好三个小时就完成了所有的题目,个人感觉题目难度是下降了不少。第十五届和十四届参考源码是我自己写的。提供几个很有用的技巧点吧。

        总结技巧如下:

        1、对138译码器的控制:

我们是通过P25、P26以及P27实现对LED灯(Y4)和蜂鸣器、继电器(Y5)和数码管的位选(Y6)和段选(Y7)的控制。实现精准控制的要点在于:要对数码管的刷新、LED和蜂鸣器的控制进行分开使用-即分别统一运行。比如在while(1)循环里按照特定的顺序运行程序:如下

我是使用上述的运行逻辑分别编写了第十四届和第十五届的比赛题目,都可以完美的流畅运行,不会出现数码管显示不清晰或者是按键不跟手等情况。 其中第十四届就很有含金量表明我这个方法足够好用。

        其次就是对于数据的更新步骤要明确,在我们使用LED灯和数码管和蜂鸣器、继电器时通常要刷入数据。我们知道对于上述器件的控制,通常是数据导入之后,即使没有选通该器件,该器件也会继续工作。这是因为器件的控制时序的问题,数据通过P0口写入对应的寄存器之后,138译码器的选通只是将P0口的数据更新到寄存器的开关。因此我们要注意,数据的刷入方式是:先写P0口的数据,再选通对应器件的开关。然后再添加一条什么都不选中的语句,防止数据刷入错乱。方法如下:

void select_138(unsigned char x)
{
	switch(x)
	{
		case 4: P2 = (P2&0x1f)|0x80;break;
		case 5: P2 = (P2&0x1f)|0xa0;break;
		case 6: P2 = (P2&0x1f)|0xc0;break;
		case 7: P2 = (P2&0x1f)|0xe0;break;
		case 0: P2 = (P2&0x1f);break;
	}
}

         上述的case0:表示的是什么器件都不选中,防止数据刷入错误。使用方法如下:

void sys_init(void)
{
	P0 = 0xff;select_138(4);select_138(0);
	P0 = 0x00;select_138(5);select_138(0);
}

        这里是上电初始化板子的操作,在关闭LED之后我们执行case0:操作,这样就能避免P0=0xff这一数据进入(Y5)-继电器和蜂鸣器中。

        2、定时器的使用:

一般来说定时器里不能执行太过复杂的函数。我一般使用定时器都是用来翻转标志位的。这里提供一个巨好用的方法,来定时执行翻转标志位的操作。我应该是全网独一个那么使用定时器的,也是我比赛前领悟的。使用switch()语句!方法如下:

这里解释一下这样使用的原因,首先定时器是五毫秒进一次中断,每次进中断都会让计数值加一,然后执行后面的switch语句,按照我的定时要求,就会轮流执行定时长度50ms、200ms、以及1s的标志位翻转操作。最后别忘了在最后面的语句中写入 计数值清零的语句!这样就能很流畅的翻转特定情况的标志位了。

        3、补充:

学会了上述的小技巧之后,只需要把板载资源的驱动代码背熟练了,然后再对近几年的省赛题目进行实现,那么基本省赛拿奖就轻轻松松了。锻炼的最好方法就是多写,写的多了现场比赛也就心不慌手不抖了。如果对上述代码还有不懂的地方可以参考我分享的第十四届和第十五届省赛工程,另外主页还有对应的相关题目的解析。欢迎查看!

资源分享-历年省赛真题文件以及参考代码

包括第八到第十五届真题以及部分模拟题的PDF文件。

资源链接:链接:https://pan.baidu.com/s/1-pTUfNMmmyEd_fPmfvsvuA?pwd=0316 
提取码:0316

 收藏点赞即可自取。点赞阅读则持续更新。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值