找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1184|回复: 10
打印 上一主题 下一主题
收起左侧

数码管的静态显示:为什么数码管到零后就消失了,不能循环

[复制链接]
跳转到指定楼层
楼主
ID:1060333 发表于 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;
                }
            }
        }
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2023-1-5 19:26 | 只看该作者
你不觉得
unsigned char sec
if (sec < 0)
这两句自相矛盾吗?
回复

使用道具 举报

板凳
ID:213173 发表于 2023-1-5 21:00 | 只看该作者
错误:unsigned char sec = 15;
正确:char sec = 15;
回复

使用道具 举报

地板
ID:155507 发表于 2023-1-5 21:21 | 只看该作者
应该改成这样
if (sec >= 255)   
回复

使用道具 举报

5#
ID:1056573 发表于 2023-1-6 00:42 | 只看该作者
sec 永远到不会小于0,由此sec的值不会在0-15循环,而是0-255循环。LedChar[]会溢出错误而中断运行。
回复

使用道具 举报

6#
ID:487569 发表于 2023-1-6 08:23 | 只看该作者
sec 是uchar 型,取值范围是0~255,当sec=0的时候,执行sec--之后,sec=255而不会满足sec<0
回复

使用道具 举报

7#
ID:1023753 发表于 2023-1-13 10:11 | 只看该作者
if (sec == 0)
回复

使用道具 举报

8#
ID:466250 发表于 2023-2-5 20:05 | 只看该作者
if (sec == -1)
回复

使用道具 举报

9#
ID:965189 发表于 2023-2-5 22:44 | 只看该作者
sec不会小于0。
回复

使用道具 举报

10#
ID:419968 发表于 2023-2-6 00:28 | 只看该作者
sec减到最后sec=0;改成        cnt++;        
            if (cnt >= 50)
            {
                cnt = 0;         
                P0 = LedChar[sec];
                sec++;            
                if (sec == 15)   
                {
                    sec = 0;
                }
            }
回复

使用道具 举报

11#
ID:1061331 发表于 2023-2-6 00:38 | 只看该作者
可以试试 if (sec >= 256)   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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