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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 19:05
  • 签到天数: 123 天

    [LV.7]常住居民III

    33

    主题

    397

    回帖

    2048

    积分

    荣誉版主

    积分
    2048
    发表于 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, 2024-5-20 10:13 , Processed in 0.057922 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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