标题: 数码管的静态显示:为什么数码管到零后就消失了,不能循环 [打印本页]

作者: HuTianle    时间: 2023-1-5 15:54
标题: 数码管的静态显示:为什么数码管到零后就消失了,不能循环
#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code LedChar[] = {
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};

void main()
{
    unsigned char cnt = 0;
    unsigned char sec = 15;

    ENLED = 0;  
    ADDR3 = 1;
    ADDR2 = 0;
    ADDR1 = 0;
    ADDR0 = 0;
    TMOD = 0x01;
    TH0  = 0xB8;
    TL0  = 0x00;
    TR0  = 1;  

    while (1)
    {
        if (TF0 == 1)      
        {
            TF0 = 0;   
            TH0 = 0xB8;   
            TL0 = 0x00;
            cnt++;        
            if (cnt >= 50)
            {
                cnt = 0;         
                P0 = LedChar[sec];
                sec--;            
                if (sec < 0)   
                {
                    sec = 15;
                }
            }
        }
    }
}


作者: Hephaestus    时间: 2023-1-5 19:26
你不觉得
unsigned char sec
if (sec < 0)
这两句自相矛盾吗?
作者: wulin    时间: 2023-1-5 21:00
错误:unsigned char sec = 15;
正确:char sec = 15;
作者: angmall    时间: 2023-1-5 21:21
应该改成这样
if (sec >= 255)   
作者: ytchfp163    时间: 2023-1-6 00:42
sec 永远到不会小于0,由此sec的值不会在0-15循环,而是0-255循环。LedChar[]会溢出错误而中断运行。
作者: ZXWPL    时间: 2023-1-6 08:23
sec 是uchar 型,取值范围是0~255,当sec=0的时候,执行sec--之后,sec=255而不会满足sec<0
作者: haiyang201    时间: 2023-1-13 10:11
if (sec == 0)
作者: 蓝蓝小星星    时间: 2023-2-5 20:05
if (sec == -1)
作者: 君工创    时间: 2023-2-5 22:44
sec不会小于0。
作者: adject    时间: 2023-2-6 00:28
sec减到最后sec=0;改成        cnt++;        
            if (cnt >= 50)
            {
                cnt = 0;         
                P0 = LedChar[sec];
                sec++;            
                if (sec == 15)   
                {
                    sec = 0;
                }
            }
作者: 13423265909    时间: 2023-2-6 00:38
可以试试 if (sec >= 256)   




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1