蓝桥杯必考——需要分配进程的模块 数码管动态显示

一、概念和原理

        上面这张图说的很明白,也是大家熟悉的知识。

        我们要做的题目不是这个,大家自己看小蜜蜂和江科大的视频也会发现是比较简单的,但是我们今天学习的是国一学长的写法,直接将字符串用数码管显示,还是不太一样的。

        不过鉴于没有现成的视频讲讲思路,笔者只能按照自己的理解给大家讲讲怎么用输入字符串的形式完成下面这个题目的所有要求。

二、题目

        电压、频率数据刷新时间要求:
(1)电压数据刷新时间≤0.5 秒;

(2)频率刷新时间<=1秒;

(3)数码管显示无重影、闪烁、过暗、亮度不均匀等严重影响显示效果的缺陷。

三、思路和手写代码

        本次题目我觉得是目前最难的一次,所以先讲讲思路:1.(基础)首先第一步我们得main文件框架先搭好,反正一开始也是大脑一片空白hh;

(按照之前我们的习惯,一般是再写好close文件和Delay文件,但此次很不一样,都不创建,close文件因为main要用到,数码管seg文件也要用到,那就都丢到seg文件去写,不然耦合性会比较强(我觉得),至于Delay文件,大家有过一定基础都是知道该文件是用来消影的,但此次又是换一种不一样的方法,就是使用Device_choose函数,让所有数码管在很短的时间内全部熄灭,这样也能达到消影(消抖)的效果)

2.(基础)所以第二步就是创建seg文件,把Device_choose函数创建好;

3.第三步便是定时器的初始化,要求里面提到0.5秒也就是500ms刷新一次数码管上的所有数据,翻译过来就是,定时器设定初值为1ms开中断,.h文件里面定义一个变量seg_delay放到中断函数里面++,加到500就清零,每当清零时,就重复执行一次字符串写入数组的代码,这样,我们显示的数据就会刷新一遍,完成题目要求;(看完第五步后再看这里,中断里面还要可以将快速扫描数码管的任务放进来,因为初始值是1ms就会溢出一次,那我们可以将数码管显示函数和专门用来位选的变量放进来++);

4.第四步就到了数码管部分,数码管分为俩大部分写,一是将段码表定义好,然后我们会定义一个函数,参数是俩个数组,因为到时候我们输入的是一个字符串,自然要用到数组来存放,那以后都是对数组的操作了,这个参数是俩个数组的函数里面要实现的功能是,我们调用时,第一个参数数组就是我们写好的字符串,通过switch函数,我们会将该字符串的每一个元素都拆分出来,与段码表对应,再将其写入第二个参数数组,这样我们就将要显示的内容存放好了;

5.第五步是seg文件最后一步,也是第二大部分,写一个数码管显示函数,这个函数里面就是我们学习江科大知识的全部浓缩了,仅仅三行代码就实现了快速扫描数码管的功能:消影/位选(位选要移位,所以我们还会定义一个变量专门服务)/段选,细节请看后面的手写代码部分;

6.第六步就是我们此次代码的最后一步,写一个函数用来字符串写入的,同时这个操作又要与seg_delay联系起来,也就是seg_delay清零时就会执行一次这个字符串写入函数;

        OK,思路讲完,大家大概对照着思路看下面的手写代码部分应该会轻松些(笔者会将思路附在开头):

第一步

1.(基础)首先第一步我们得main文件框架先搭好,反正一开始也是大脑一片空白hh;

第二步

(按照之前我们的习惯,一般是再写好close文件和Delay文件,但此次很不一样,都不创建,close文件因为main要用到,数码管seg文件也要用到,那就都丢到seg文件去写,不然耦合性会比较强(我觉得),至于Delay文件,大家有过一定基础都是知道该文件是用来消影的,但此次又是换一种不一样的方法,就是使用Device_choose函数,让所有数码管在很短的时间内全部熄灭,这样也能达到消影(消抖)的效果)

2.(基础)所以第二步就是创建seg文件,把Device_choose函数创建好;

第三步

3.第三步便是定时器的初始化,要求里面提到0.5秒也就是500ms刷新一次数码管上的所有数据,翻译过来就是,定时器设定初值为1ms开中断,.h文件里面定义一个变量seg_delay放到中断函数里面++,加到500就清零,每当清零时,就重复执行一次字符串写入数组的代码,这样,我们显示的数据就会刷新一遍,完成题目要求;(看完第五步后再看这里,中断里面还要可以将快速扫描数码管的任务放进来,因为初始值是1ms就会溢出一次,那我们可以将数码管显示函数和专门用来位选的变量放进来++);

第四步

4.第四步就到了数码管部分,数码管分为俩大部分写,一是将段码表定义好,然后我们会定义一个函数,参数是俩个数组,因为到时候我们输入的是一个字符串,自然要用到数组来存放,那以后都是对数组的操作了,这个参数是俩个数组的函数里面要实现的功能是,我们调用时,第一个参数数组就是我们写好的字符串,通过switch函数,我们会将该字符串的每一个元素都拆分出来,与段码表对应,再将其写入第二个参数数组,这样我们就将要显示的内容存放好了;

第五步

5.第五步是seg文件最后一步,也是第二大部分,写一个数码管显示函数,这个函数里面就是我们学习江科大知识的全部浓缩了,仅仅三行代码就实现了快速扫描数码管的功能:消影/位选(位选要移位,所以我们还会定义一个变量专门服务)/段选,细节请看后面的手写代码部分;

第六步

6.第六步就是我们此次代码的最后一步,写一个函数用来字符串写入的,同时这个操作又要与seg_delay联系起来,也就是seg_delay清零时就会执行一次这个字符串写入函数;

结尾

实验现象:

1.实现了题目所需的要求,但是500ms刷新一次数据笔者也不知道在板子上怎么体现;

2.改变俩处地方(圈圈的地方),能实现在数码管显示我们自己写的字符串内容

 

        至此,我们对于(字符串形式)数码管动态显示的知识也算是有初步的了解,知道蓝桥杯比赛历届题目的都知道这个模块是每年必考之一,其重要性不言而喻,所以,是一定要同学们自己去默写一遍实现实验现象的代码的,如果有更好的写法或者建议或者代码问题都可以直接在评论区评论,笔者很闲,每天都会去看的hh!

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值