微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管和led用两个定时器分别控制

数码管和led用两个定时器分别控制

时间:10-02 整理:3721RD 点击:


求大神看看我这程序为什么在51上不能显示。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit wela=P2^6;
sbit dula=P2^5;
uchar qwan,bwan,swan,wan,qian,bai,shi,ge,tt,mm,aa,num1,num2;
ulong temp;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay1ms(uint ss);
void init();
void display1();
void display2();
void main()
{
   init();
   if(tt==60)
    {
             while(1);
         {
           display2();
         }
         }
}
void init()
{
   bai=0;
   shi=0;
   ge=0;
   tt=0;
   mm=0;
   num1=0;
   num2=0;
   temp=87654321;
   aa=0x01;
   dula=0;
   wela=0;
   TMOD=0x11;
   TH0=(65536-10000)/256;
   TL0=(65536-10000)%256;
   TH1=(65536-10000)/256;
   TL1=(65536-10000)%256;
   EA=1;
   ET0=1;
   TR0=1;
   ET1=1;
   TR1=1;
   qwan=temp/10000000;
   bwan=temp%10000000/1000000;
   swan=temp%1000000/100000;
   wan=temp%100000/10000;
   qian=temp%10000/1000;
   bai=temp%1000/100;
   shi=temp%100/10;
   ge=temp%10;
}
void display1()
{  
   wela=1;
   P0=0x01;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[qwan];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x02;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[bwan];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x04;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[swan];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x08;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[wan];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x10;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[qian];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x20;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[bai];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x40;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[shi];
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x80;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[ge];
   dula=0;  
   delay1ms(10);
}
void display2()
{  
   P0=0x00;
   delay1ms(5);
   wela=1;
   P0=0x01;
   wela=0;
   P0=0x00;
   dula=1;
   P0=0x89;
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x02;
   wela=0;
   P0=0x00;
   dula=1;
   P0=0x86;
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x04;
   wela=0;
   P0=0x00;
   dula=1;
   P0=0xc7;
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x08;
   wela=0;
   P0=0x00;
   dula=1;
   P0=0xc7;
   dula=0;  
   delay1ms(5);
   wela=1;
   P0=0x10;
   wela=0;
   P0=0x00;
   dula=1;
   P0=0xc0;
   dula=0;  
   delay1ms(5);
}
void delay1ms(uint ss)
{  
     uint x,y;
     for(x=ss;x>0;x--)
        for(y=110;y>0;y--);
}
void time0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   tt++;
   if(temp>=87654298)
   {
           if(tt==2)
            {
             temp--;
             tt=0;
         display1();
            }
    }
    if(tt==100)
    {
     tt=0;
    }
}
void time1() interrupt 3
{
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   mm++;
   if(num2<=34)
   {
      if(mm==2)
     {  
      mm=0;
      num2++;
      num1++;
     }
      if(num1==10)
      {
       P1=aa;
       num1=0;
       aa=_crol_(aa,1);
      }
    }   
    if(num2>=34&&num2<=64)
      {
        P0=0x00;
        delay1ms(500);
        P0=0xff;
        delay1ms(500);
       }
    if(num2>=64)
     P0=0xff;
    if(mm==100)
      mm=0;   
}   

额头和他人忍忍就那样他们和建议你不敢

#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void init();
sbit wela=P2^1;
sbit dula=P2^0;
uchar temp,t1,t0,aa,bb,cc,bai,shi,ge,flag,flag1;
uint shu;
void delay(uint z);
void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);
uchar code table[]={
0xf7,0xc4,0xbe,0xde,
0xcd,0x5f,0x7f,0xc6,
0xff,0xdf,0xe9,0x3b,0x31,0xf3,0
};
uchar code tablewe[]={
0xdf,0xef,0xf7,0xfb,0xfd,0xfe
};
void main()
{
        init();
        while(1)
        {
        if(flag1!=1)
                display(7,6,5,bai,shi,ge);
                else
                display(10,11,12,12,13,14);
        }

}

void init()
{
        shu=432;
        temp=0xfe;
        P1=temp;
        TMOD=0x11;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        shu=432;
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR1=1;
        TR0=1;
       
}
void timer0() interrupt 1
{
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
       
        t0++;
if(flag!=1)
{
if(t0==10)
        {
        t0=0;
        temp=_cror_(temp,1);
        P1=temp;
                }
}
else
                {
                        if(t0%4==0)
                                P1=~P1;
                                if(t0==60)
                                {
                                TR0=0;
                                P1=0xff;
                                flag1=1;
                                }
                        }
                        }
void timer1() interrupt 3
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
       
        t1++;
        if(t1==2)
        {
                t1=0;
                shu--;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
                if(shu==398)
                {
                        TR0=0;
                        TH0=(65535-50000)/256;
                        TL0=(65535-50000)%256;
                        TR0=1;
                        flag=1;
                        P1=0xff;
                        t0=0;
                        TR1=0;
                }
       
        }
               
}
void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge)
{
                    dula=1;
                        P0=table[aa];
                        dula=0;
                        P0=0xff;
                        wela=1;
                        P0=0xdf;
                        wela=0;
                        delay(5);
                        dula=1;
                        P0=table[bb];
                        dula=0;
                        P0=0xff;
                        wela=1;
                        P0=0xef;
                        wela=0;
                        delay(5);
                        dula=1;
                        P0=table[cc];
                        dula=0;
                        P0=0xff;//消影
                        wela=1;
                        P0=0xf7;
                        wela=0;
                        delay(5);
               
                        dula=1;
                        P0=table[bai];
                        dula=0;
                        P0=0xff;//消影
                        wela=1;
                        P0=0xfb;
                        wela=0;
                        delay(5);
                       
                        dula=1;
                        P0=table[shi];
                        dula=0;
                        P0=0xff;//消影
                        wela=1;
                        P0=0xfd;
                        wela=0;
                        delay(5);
                       
                        dula=1;
                        P0=table[ge];
                        dula=0;
                        P0=0xff;//消影
                        wela=1;
                        P0=0xfe;
                        wela=0;
                        delay(5);
}
void delay(uint z)
{
uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }

你可以比较一下这两个程序

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

网站地图

Top