找回密码
 立即注册
查看: 492|回复: 0

蓝桥杯问题解决指南(如何快速制作显示界面)

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-3-14 11:48:04 | 显示全部楼层 |阅读模式
比赛时,我们往往会涉及到多个界面的设计,但是如果使用每个位进行单独赋值的做法,又会造成代码的复用性不高,并且调整起来也较为困难。
这里我介绍一种使用Sprintf函数进行显示的方法,可以有效处理数码管的显示问题。并且可以避免显示混乱的问题。
具体的思路就是通过一个缓冲区(数组)实现数码管的刷新和显示,然后把这个数组当作字符串使用。使用sprintf对数据进行格式化后填入缓冲区,就可以实现快捷的界面显示了。
在这里面,缓冲区作为中间件,使用的是固定刷新模式,防止了因为程序混乱而造成的显示错误。
这里看一下这个实现框图,大家应该就明白了。
截图202403141146322820.jpg
这里面,最主要的就是实现对数组内字符的解析。下面我们来一步一步的解析这些都是如何实现的。
从sprintf开始,这个函数主要作用类似printf函数,不过输出对象不是调用putchar,而是输出到一个指定的字符串

例如下面这行代码:
截图202403141146465596.jpg
意思就是将”hello”这个字符串给到show_buf这个数组内。此时,如果访问show_buf[0],则其中的内容就是字符’h’。需要注意的是,赋值的长度是字符长度+1,因为字符串默认最后一位添加一个’\0’进行标识,用作显示的时候,最好填满缓冲区,这样可以省去解析’\0’的麻烦。
虽然现在已经成功把一个字符串放入了数组内,但是仍然需要对其解析后才能成功显示,不然显示的数码管可识别不了字符类型的数据。

以下这个就是我的字符解析器,原理很简单。判断需要显示的位,然后取出显示缓冲区中的字符进行解析,判断到有效范围的就对应段码表给到显示上。此时再通过中断调用以下这个解析显示函数,就可以实现字符的显示了。
截图202403141147026212.jpg
此时,构建完主要的解析器以后,做起界面来也就非常简单了。
假如现在有8个位的数码管需要显示,内容是A00b01CC。

我们只需要这么写
截图202403141147153200.jpg
如果需要将00和01分别替换为变量a和b(变化值)
只需要稍加改动
截图202403141147312344.jpg
此时便可以轻松显示带有数据变化的界面了

那么,如果出现了奇怪的没有定义的数字应该如何显示?例如我想要显示H,但是解析器里面只有0~9,a~f。这其实也很简单,因为解析器可以对单个字符进行匹配,只需要多加入一行匹配H字符的判断,并且将段码表中的实际H段码关联起来即可。
截图202403141147463790.jpg
至此,界面的制作只需要使用字符串就可以控制了,并且可以随意调换。相当的灵活


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:21 , Processed in 0.344192 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表