[51单片机] 数码管显示数字,判断语句有错误?

[复制链接]
1791|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

粉丝
快速回复 在线客服 返回列表 返回顶部