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

2020-02-08 09:13发布

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

请求 这种算法 怎么实现  ?   谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
elecfun
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;
        }
    }
}

一周热门 更多>