打印
[51单片机]

数码管显示数字,判断语句有错误?

[复制链接]
1461|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qingtianjushi|  楼主 | 2014-2-14 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
sbit led1=P1^1; //声明一个发光二极管
sbit dula=P2^6; //声明数码管的段选
sbit wela=P2^7; //声明数码管的位选
unsigned char num,sec,sec2;
unsigned char code table[]={
0x3f , 0x06 , 0x5b , 0x4f , 0x66 ,
        0x6d , 0x7d , 0x07 , 0x7f  ,
        0x6f , 0x77 , 0x7c ,0x39 ,
        0x5e , 0x79 , 0x71 , 0x00};  //设置数码管的编码,依次显示0123456789ABCDE

void main()
{         
        num=0;
        sec=1;
        sec2=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TMOD=1;
        EA=1;
        ET0=1;
        TR0=1;         
        while(1);
}

void T0_first() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
        if(num==10)  
        {
                led1=~led1;
                num=0;
                wela=1;
                P0=0xDF; //开启第6个数码管
                wela=0;
                dula=1;
                P0=table[sec];
                dula=0;               
                sec++;
                                               
                if(sec>9)   问题出在这里,
                {
                        sec=1;
                        wela=1;
                        P0=0xEF; //开启第5个数码管
                        wela=0;
                }                                 
        }
}
         
正常执行,应该是第6个数码管依次显示123456789,但是数字9却显示在了第5个数码管,第6个数码管仅仅显示到8。这是什么原因呢?


相关帖子

沙发
wangch_sh| | 2014-2-14 18:44 | 只看该作者
sec++;
你显示了9,sec++,sec变成10了。sec>9成立。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
zoushilin + 1 神马都是浮云
qingtianjushi + 1 谢谢您的回复
板凳
qingtianjushi|  楼主 | 2014-2-14 20:15 | 只看该作者
wangch_sh 发表于 2014-2-14 18:44
sec++;
你显示了9,sec++,sec变成10了。sec>9成立。

用第6个数码管显示数字123456789,到9的时候,从1开始重新显示。

                if(sec>9)   
                {
                        sec=1;
                        wela=1;
                        P0=0xEF; //开启第5个数码管
                        wela=0;
                }       

当打开第5个数码管的时候,数字9显示到了第5个数码管上了。本来应该显示在第6个数码管的。如果把这几条语句去掉,数字9就能显示到第6个数码管上。
wela=1;
P0=0xEF; //开启第5个数码管
wela=0;

使用特权

评论回复
地板
qingtianjushi|  楼主 | 2014-2-14 21:54 | 只看该作者
问题解决了,在
                if(sec>9)   
                {
                        sec=1;
                        wela=1;
                        P0=0xEF; //开启第5个数码管
                        wela=0;
                }               
这个判断之前,给一个delay(500),500毫秒的函数就可以看到数字9了。因为频率太快的原因,导致最后一个数字看不到,就进入下一条命令了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

0

粉丝