很困惑的一个问题——数码管秒表

2019-07-15 18:52发布

以下这段程序时间走的比实际的快很多,不像是误差造成的。如在while(1)主循环里面随便加条语句后就正常了,不知道是什么原因.......求解!
-----------------------------------------------------------------
#include<reg51.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;


unsigned char code LedChar[] = {0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
                               0x7f,0x6f,0x77,0x7c,
                               0x39,0x5e,0x79,0x71};

unsigned char LedBuff[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned int cnt = 0;
unsigned long sec = 0;

void main()
{
    EA = 1;
    TMOD = 0x01;
    TH0 = 0xFC;
    TL0 = 0x67;
    TR0 = 1;
    ET0 = 1;   

    while(1)
    {

        if(cnt >= 1000)
        {
            cnt = 0;

            sec++;
            LedBuff[0] = LedChar[sec%10];
            LedBuff[1] = LedChar[sec/10%10];
            LedBuff[2] = LedChar[sec/100%10];
            LedBuff[3] = LedChar[sec/1000%10];
            LedBuff[4] = LedChar[sec/10000%10];
            LedBuff[5] = LedChar[sec/100000%10];     
        }
        **如果在这个位置随便加条语句后就正常了**       
    }

}
void Interrupttimer0() interrupt 1
{
    static unsigned char i = 0;   

    TH0 = 0xFC;
    TL0 = 0x67;

    cnt++;

    P0 = 0x00;
    switch(i)
    {
        case 0: ADDR0 = 1; ADDR1 = 1; ADDR2 = 1; i++; P0 = LedBuff[0]; break;
        case 1: ADDR0 = 1; ADDR1 = 1; ADDR2 = 0; i++; P0 = LedBuff[1]; break;
        case 2: ADDR0 = 1; ADDR1 = 0; ADDR2 = 1; i++; P0 = LedBuff[2]; break;
        case 3: ADDR0 = 1; ADDR1 = 0; ADDR2 = 0; i++; P0 = LedBuff[3]; break;
        case 4: ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; i++; P0 = LedBuff[4]; break;
        case 5: ADDR0 = 0; ADDR1 = 1; ADDR2 = 0; i=0; P0 = LedBuff[5]; break;
        default : break;
    }   
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zy2014
1楼-- · 2019-07-15 19:30
你的晶振频率与人家的频率一样吗?

你的这个数应该是根据11.0592Mhz的晶振算出来的
nieyuw
2楼-- · 2019-07-16 00:14
zy2014 发表于 2014-8-7 15:34
你的晶振频率与人家的频率一样吗?

你的这个数应该是根据11.0592Mhz的晶振算出来的 ...

对啊,我的晶振是11.0592
zy2014
3楼-- · 2019-07-16 01:25
你的代码跟 手把手教你学 51 单片机-C 语言版 这本书上的极其相似。
要不你再看看。

http://pan.baidu.com/s/1c0zkWIc
ntmusic
4楼-- · 2019-07-16 02:56
 精彩回答 2  元偷偷看……
nieyuw
5楼-- · 2019-07-16 04:45
zy2014 发表于 2014-8-7 15:58
你的代码跟 手把手教你学 51 单片机-C 语言版 这本书上的极其相似。
要不你再看看。

本人初学,就是看那教程来的,试了就是很奇怪。。
nieyuw
6楼-- · 2019-07-16 06:32
ntmusic 发表于 2014-8-7 16:02
竟然将计时与LED驱动写在同一个定时器

初学者,还望大家多多指点迷津

一周热门 更多>