找回密码
 立即注册
查看: 43|回复: 2

关于数码管的程序问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-09-07 19:27:18
已绑定手机

5

主题

11

回帖

77

积分

注册会员

积分
77
发表于 3 天前 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^0;
sbit wela=P2^1;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                     0x66,0x6d,0x7d,0x07,
                     0x7f,0x6f,0x77,0x7c,
                     0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
        wela=1;
        P0=0x0f;
        wela=0;
        while(1)
        {
                for(num=15; num>=0; num--)
                {
                        dula=1;
                  P0=table[num];
                  dula=0;
                  delayms(500);
                }
        }
}
void delayms(uint xms)
{
        uint i,j;
        for(i=xms; i>0; i--)
                for(j=110; j>0; j--);
}
学了一个用数组让数码管循环显示0f的程序,原本的for循环语句是这样的:for(num=0; num<16; num++),我想让它从f-0显示,改了一下,用proteus仿真,发现数码管从F显示到0后就无显示了,而我的理解是它应该停在显示0这个字符上,我是这样理解的,当num减到0时,表达式等于0的条件一直成立,所以for就一直循环执行大括号里的程序,num等于0对应该数组里的字符是0x3f,对应数码管0,所以我认为应该一直显示0才对,但实际上并不是,所以这点我不能理解,还请各位大神给指点迷津,谢谢!

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-09-07 19:27:18
已绑定手机

5

主题

11

回帖

77

积分

注册会员

积分
77
发表于 3 天前 | 显示全部楼层
我改了一下,又发现一个问题,将for循环里的num参数改成16时,访真时发现数码管是从一个不是数字的乱码开始的,原本的0没有了,这个乱码是不是就是0?如果是0的话那这个程序为什么不是从F开始,而是从0呢,而且这个0还是显示错误的?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^0;
sbit wela=P2^1;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                          0x66,0x6d,0x7d,0x07,
                          0x7f,0x6f,0x77,0x7c,
                          0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
        wela=1;
        P0=0x0f;
        wela=0;
        while(1)
        {
                for(num=16; num>0; num--)
                {
                        dula=1;
                  P0=table[num];
                  dula=0;
                  delayms(500);
                }
        }
}
void delayms(uint xms)
{
        uint i,j;
        for(i=xms; i>0; i--)
                for(j=110; j>0; j--);
}


截图202509071933512287.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:553
  • 最近打卡:2025-09-09 05:07:09
已绑定手机

86

主题

6089

回帖

1万

积分

超级版主

积分
11236
发表于 3 天前 | 显示全部楼层
num=0时,num>=0也成立,uchar 0-1=255,溢出了,num>=0改成num>0
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-10 06:36 , Processed in 0.109504 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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