8个数码管动态显示高位为0时怎么清除?

2020-02-08 09:13发布

显示有8个数码管 比如现在 显示的是 12345678  但是如果是 显示 00000001的话 我只需要他显示 一个 1  其他的 0 就全部熄灭
  如果是  00000010 的话  我只要他显示  10 其他的 0 也全部熄灭   

请求 这种算法 怎么实现  ?   谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
elecfun
1楼-- · 2020-02-09 19:08
我的方法,4位数码管显示正负温度。用到问号表达式和逗号表达式

void main(void)
{

    unsigned char
a;
    unsigned int
t;
    while
(1)
    {

        t = ReadTemperature();

        if
(t == 2345)      //初始化失败   
        {
            SEG[0] = 0xFF;
            SEG[1] = TABLE[10]; //'E'
            SEG[2] = TABLE[11]; //'r'
            SEG[3] = TABLE[11]; //'r'
        } else if (t & 0x8000)  //负温度
        {
            t &= 0x7FFF;
            SEG[0] = TABLE[12]; //'-'
            SEG[1] = (t / 100) ? TABLE[t / 100] : (SEG[0] = 0xFF, TABLE[12]);   //如果十位为0,则SEG[0]不显示,SEG[1]为'-',此处用到逗号表达式
            SEG[2] = TABLE[t % 100 / 10];
            SEG[3] = TABLE[t % 10];
        }
else {
            SEG[0] = (t / 1000) ? TABLE[t / 1000] : 0xFF;   //如果为0则不显示
            SEG[1] = (t % 1000 / 100) ? TABLE[t % 1000 / 100] : ((SEG[0] == 0xFF) ? 0xFF : TABLE[0]);   //如果为0需要看SEG[0],SEG[0]不显示,则本位也不显示
            SEG[2] = TABLE[t % 100 / 10];
            SEG[3] = TABLE[t % 10];
        }


        for
(a = 0; a < 4; a++)
        {
     
            CodePort = SEG[a] & ((a == 2) ? 0x7F : 0xFF);  //第三位显示小数点
            BitPort  = SCAN_CODE[a];
            Delayms(1);
            BitPort = 0xff;
        }
    }
}

vjcmain
2楼-- · 2020-02-09 21:56
 精彩回答 2  元偷偷看……
elecfun
3楼-- · 2020-02-10 01:41
vjcmain 发表于 2012-5-27 14:43
嘎嘎,。语法高亮啊。我的那个也可以的,我用了很多场合了,

你的那个我觉得有点麻烦,位数多的话11楼的方法不错

我有个帖子是讲怎么弄语法高亮的,有兴趣你可以试试
http://www.ourdev.cn/thread-5463030-1-1.html
surf_131
4楼-- · 2020-02-10 05:59
要把前置的0去掉,然后再算正负号,然后处理小数部分,最后处理小数点。

在数码管上一般都是查表法,那么在10个数字之外再添个所有段都不显示的空白和负号,待显数字放进缓冲区之后先从高到低扫描,用一个非零标志,直到发现第一个非0的位才把这个位置1,之前为0的所有位都给换成查表的空白。然后再判断正负号,需要时在非0位之前添加。小数部分放进之后,再点上小数点。所有工作完成之后就可以查表送显了。
qwwpy
5楼-- · 2020-02-10 10:24
mark
sz2009
6楼-- · 2020-02-10 10:44
14楼的排版很漂亮

一周热门 更多>