标题:关于数码管动态显示,为什么不能跑完接龙,到第二下就停住了
只看楼主
yangzhe7878
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-27
 问题点数:0 回复次数:2 
关于数码管动态显示,为什么不能跑完接龙,到第二下就停住了
#include <reg52.h>
void delay(unsigned int t)
{
    while(t--)
    {
        unsigned char j;
        for(j=0;j<125;j++);
    }
}
/*unsigned char code b[]={
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
 
                         };*/
unsigned char code c[]={  //weixuan
    0x7f,
    0xbf,
    0xdf,
    0xef,
    0xf7,
    0xfb,
    0xfd,
    0xfe,

};
unsigned char code d520[]={       //520
    0x3f,
    0x5b,
    0x6d,

};
sbit we=P2^7;
sbit du=P2^6;
#define uchar unsigned char
#define uint unsigned int
void main()
{
    uchar i;
    uchar j;
   
    uint t1=100;
    for(j=0;j<6;j++)
    {
        while(t1--)
        {
             for(i=0;i<3;i++)
             {
                 du=1;
                P0=d520[i];
                du=0;
   
                we=1;
                P0=c[(j+i)];
                we=0;
                delay(1);
             }
        }
    }

        
}
搜索更多相关主题的帖子: 数码管 动态 include 
2016-05-05 12:07
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
得分:0 
你的主程序作如下改动就可以了(注意红色部分)。
void main()
{
    uchar i;
    uchar j;
    uint t1;
    for(j=0;j<6;j++)
    {
         t1=100;
        while(t1--)
        {
             for(i=0;i<3;i++)
             {
                 du=1;
                P0=d520[i];
                du=0;
   
                we=1;
                P0=c[(j+i)];
                we=0;
                delay(1);
             }
        }
    }     
}
你在第一层for循环外面定义t1变量并赋初值为100,用于里面的while循环,当"t1"减至0时,退出while循环,此时在第一层for循环和while循环之间没有重新给t1赋值,自然while循环执行完第一次之后,就不再为“真”,里面的for循环当然也就不再执行,所以你看到的就是“520”停在第5、6、7个数码管就不动了。


[此贴子已经被作者于2016-5-15 23:05编辑过]

2016-05-15 23:02
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
得分:0 
另外你的程序中是先操作段选而后操作位选,所以在打开位选之前应给P0赋值为0xff,关闭所有数码管的显示,以免产生“鬼影”。
2016-05-15 23:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-464419-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028410 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved