【问题标题】:How to change Basys mx3 timer from hex to dec如何将 Basys mx3 计时器从十六进制更改为十进制
【发布时间】:2018-06-05 17:36:29
【问题描述】:

我正在使用 Basys mx3,并使用作为 Hex 计时器的 SSDDEMO, 我正在尝试将计时器更改为十进制,但没有成功..我该怎么做:)? 非常感谢, 这是 ssddemo 的链接:

https://github.com/Digilent/Basys-MX3-library/blob/master/Demos/SSDDemo.X/ssd.c

【问题讨论】:

  • 函数 SSD_WriteDigitsGrouped() 采用 32 位 val,其中每个字节代表 1 个数字。 Tee 代码不会调用此函数,因此您的问题可能在其他地方 - 要成为一个合法的 SO 问题,您需要发布相关代码,但简单的答案是您必须使用 二进制编码对 val 参数进行编码十进制 (BCD) 而不是二进制。通过显示您如何调用SSD_WriteDigitsGrouped() 并包括源注释中的函数描述来解决问题,然后它将被合法化和回答。
  • 请注意,您链接的代码不是“计时器”,它是用于在 4 位 7 段显示器上显示的库。计时器元素仅用于多路复用 4 位数字 - 在一个循环中非常快速地短时间显示每个数字,因此看起来它们都被点亮了。计时器方面与您的问题无关,只会使您的问题令人困惑且难以理解。

标签: c timer embedded hex


【解决方案1】:

在给定的库中,SSD_WriteDigitsGrouped() 显示 val 参数的四个十六进制数字。通过首先将整数转换为 binary-coded decimal (BCD) 格式,其中每个十六进制半字节表示十进制数字值 0 到 9,您可以显示十进制值。

这可以通过 SSD_WriteDigitsGrouped() 的包装器轻松完成,该包装器进行转换。实现以下函数,并调用它来代替SSD_WriteDigitsGrouped()

void SSD_WriteDigitsGroupedBCD( unsigned int val, unsigned char dp )
{
    unsigned bcd = 0 ;
    int shift = 0 ;

    while( val > 0) 
    {
        bcd |= (val % 10) << (shift << 2) ;
        shift++ ;
        val /= 10;
    }

    SSD_WriteDigitsGrouped( bcd, dp ) ;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2015-09-13
    • 2013-10-08
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多