求助!51单片机倒计时问题

2019-07-15 13:16发布

电路如图所示,功能事要根据数码管的数字进行倒计时,红灯亮代表调的是电机速度PWM,数码管的小数点亮表示这个数码管被选择,上面的数字可以加减。目前的问题是,开始按钮按下后,不可以再次进行数字和速度的设定。

#include <reg51.h>
#define gewei P0
#define shiwei P3
#define baiwei P1
sbit add=P2^0;                          //增加
sbit dec=P2^1;                         //减小
sbit start=P2^2;                  //开始
sbit move=P2^3;                          //移位

sbit dj1=P2^7;
sbit dj2=P2^5;

sbit led0=P2^4;
sbit led1=P2^6;

sbit dot1=P0^7;
sbit dot2=P3^7;
sbit dot3=P1^7;


long dw=0;                        //档位
long gw=0;                        //个位
long gw1=0;
long sw=0;                        //十位          要有正负
long sw1=0;
long bw=0;
long bw1=0;                       

unsigned char code time[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int a);
void int1();

void main()
{
        int m=0,n=0,q=0,a=0,i=0,c=0;        //延时消抖参数
        dj1=0;
        dj2=0;
        gewei=time[0];        shiwei=time[0];                baiwei=time[0];
        led0=0;led1=0;
        while(1)
        {                                                         //此按键按下机器开始工作,开关控制电机旋转,(定时器开始运行,PWM波形开始输出)
                if(start==0)
                {                                               
                        delay(10);
                        if(start==0)       
                        {         
                                m=1;
                                dj1=1;
                                int1();
                         }
                }
                if(move==0)                          //此按键按下开始选择需要设定的数码管
                {         
                        delay(10);
                        if(move==0)
                        {
                                m++;
                                delay(100);
                                if(m>4)        m=1;
                        }                       
                }
                if(m==1)
                {       
                        led0=1;
                        dot1=0;dot2=0;dot3=0;       
                        if(add==0)                                                                                   // 档位按键加dw
                        {
                                delay(3);
                                if(add==0)
                                {       
                                        dw++;
                                        delay(100);
                                        if(dw>=5)       
                                                dw=5;                       
                                }
                        }
                        if(dec==0)                                                                         //档位按键减  dw
                        {       
                                delay(10);
                                if(dec==0)
                                {
                                        dw--;
                                        delay(100);
                                        if(dw<=0)
                                                dw=0;                                                       
                                }
                        }
                }
                if(m==2)
                {       
                        dot1=1;dot2=0;dot3=0;
                        led0=0;
                        if(add==0)                                                                                   // 个位时间加 gw
                        {
                                delay(10);
                                if(add==0)
                                {
                                        gw1=gw;
                                        gw++;gw1++;
                                        if(gw>9)        gw=0;
                                        if(gw1>9)        gw1=0;
                                        delay(100);                       
                                        gewei=time[gw];                                       
                                }
                        }
                        if(dec==0)                                                                         //个位时间减
                        {       
                                delay(10);
                                if(dec==0)
                                {
                                        gw1=gw;
                                        gw--;gw1--;
                                        if(gw<0)        gw=9;
                                        if(gw1<0)        gw1=9;
                                        delay(100);                       
                                        gewei=time[gw];                                       
                                }
                        }
                }
                if(m==3)
                {       
                        dot1=0;dot2=1;dot3=0;
                        led0=0;
                        if(add==0)                                                                                   // 十位时间加
                        {
                                delay(10);
                                if(add==0)
                                {               
                                        sw1=sw;
                                        sw++;sw1++;
                                        if(sw>9)        sw=0;
                                        if(sw1>9)        sw1=0;
                                        delay(100);                       
                                        shiwei=time[sw];
                                }
                        }
                        if(dec==0)                                                                         //十位时间减
                        {       
                                delay(10);
                                if(dec==0)
                                {

                                        sw1=sw;
                                        sw--;sw1--;
                                        if(sw<0)        sw=9;
                                        if(sw1<0)        sw1=9;
                                        delay(100);                       
                                        shiwei=time[sw];
                                }
                        }
                }
                if(m==4)
                {       
                        dot1=0;dot2=0;dot3=1;
                        led0=0;
                        if(add==0)                                                                                   // 百位时间加
                        {
                                delay(10);
                                if(add==0)
                                {       
                                        bw1=bw;
                                        bw++;bw1++;
                                        if(bw>9)        bw=0;
                                        if(bw1>9)        bw1=0;
                                        delay(100);                       
                                        baiwei=time[bw];
                                }
                        }
                        if(dec==0)                                                                         //百位时间减
                        {       
                                delay(10);
                                if(dec==0)
                                {
                                        bw1=bw;
                                        bw--;bw1++;
                                        if(bw<0)        bw=9;
                                        if(bw1<0)        bw1=9;
                                        delay(100);                       
                                        baiwei=time[bw];
                                }
                        }
                }
        }
}
void delay(unsigned int a)   // 1ms
{
    unsigned int b,c;
    for(;a>0;a--)
        for(b=120;b>0;b--)
                        for(c=2;c>0;c--);
}

void int1()
{
        TMOD=0x10;          // 1ms          PWM波形
        TH1=0xfc;
        TL1=0x18;
        EA=1;
        ET1=1;
        TR1=1;
}


void time1() interrupt 3
{
        static int m=0;
        static long n=0;
        unsigned long int i=0;
        unsigned long q;
        q=100*bw1+10*sw1+gw1;
        TR1=0;                                                          // 1ms          PWM波形
        TH1=0xff;
        TL1=0x38;
        TR1=1;       
        if(m<=dw)
                dj2=1;
        else
                if(m>dw)
                        dj2=0;
        m++;
        if(m>5)
                m=0;
        n++;
        if(n%2000==0)
        {
                led1=~led1;
        }
        if(n>=12000)
        {
                i++;
                n=0;
                gw--;
                gewei=time[gw];
                if(gw<0)
                {
                        gw=9;
                        gewei=time[gw];
                        sw--;
                        shiwei=time[sw];
                        if(sw<0)
                        {
                                gw=9;
                                gewei=time[gw];
                                sw=9;
                                shiwei=time[sw];
                                bw--;
                                baiwei=time[bw];
                        }
                }
        }
        if(i==q)                                                           //1min=120000*?
        {
                TR1=0;
                ET1=0;
                dj1=0;
                dj2=dj2&&0x00;
                m=0;
                i=0;
        }
}

捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。