微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个简单的单片机秒表程序,请大神看下我的代码问题在...

一个简单的单片机秒表程序,请大神看下我的代码问题在...

时间:10-02 整理:3721RD 点击:
请大神看下我的代码,我想让小时段满24进1成00;可是小时段总是满100 进位,请大神指点一下,谢谢

#include<reg52.h>                       
#define uchar unsigned char
sbit dula = P2^6;
sbit wela = P2^7;
uchar e0,e1,e2,e3,e4,e5,e6,e7,num,time;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uchar);
void main()
{
        init();
        while(1)
        {
                display(e0,e1,e2,e3,e4,e5,e6,e7);
               
        }
}
void init()
{
        num = 0;
       
        time = 0;
        TMOD = 0x11;
        TH0 = (65536-91)/256;        //9174
        TL0 = (65536-91)%256;
        EA = 1;
        ET0 = 1;
        TR0 = 1;       
}
void display(uchar e0,uchar e1,uchar e2,uchar e3,uchar e4,uchar e5,uchar e6,uchar e7)
{
        dula = 1;
        P1 = table[e0];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0x7f;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e1];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xbf;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e2];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xdf;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e3];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xef;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e4];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xf7;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e5];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xfb;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e6];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xfd;
        wela = 0;
        delay(5);
       
        dula = 1;
        P1 = table[e7];
        dula = 0;
        P0 = 0xff;
        wela = 1;
        P0 = 0xfe;
        wela = 0;
        delay(5);
}
void delay(uchar xms)
{
        uchar i,j;
        for(i = xms;i>0;i--)
                for(j = 110;j>0;j--);
}
void role0() interrupt 1
{
        TH0 = (65536-91)/256;
        TL0 = (65536-91)%256;        //9174
                num++;
                if(num == 1)
                {       
                        num = 0;
                        time++;
                        e1 = time/10;
                        e0 = time%10;
                                if(time == 1)
                                {
                                        time = 0;
                                        e2++;
                                        if(e2 == 10)
                                        {
                                                e2 = 0;
                                                e3++;
                                                if(e3 == 6)
                                                {
                                                        e3 = 0;
                                                        e4++;
                                                        if(e4 == 10)
                                                        {
                                                                e4 = 0;
                                                                e5++;
                                                                if(e5 == 6)
                                                                {
                                                                        e5 = 0;
                                                                        e6++;
                                                                        if(e6 == 10)
                                                                        {
                                                                                e6 = 0;
                                                                                e7++;
                                                                                if(e7*10+e6 == 24)               
                                                                                {
                                                                                        e7=0;                       
                                                                                        e6=0;
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                }               
}

                                                                 if(e6 == 10)
                                                                         {
                                                                                 e6 = 0;
                                                                                 e7++;
                                                                                 if(e7*10+e6 == 24)               
                                                                                 {
                                                                                         e7=0;                        
                                                                                         e6=0;
                                                                                 }
                                                                         }
这段代码要e6 = 10 才能进入,假设e6 =4,e7=2时是进入不鸟这段代码,也就是e7=0;e6=0;永远都执行不了.

我想做一个多组秒表,你会不?就像体育跑步用的一样

你编的程序我实在是看不懂了,提个建议啊,弄三个变量:小时,分,秒,显示的时候把这三个变量和数码管做个对应就行了,程序看着清楚就不容易出错了~

很明显是看了郭大侠的代码,可以翻看几次视频就明白了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top