单片机求教,倒计时的时候十位每次中断的时候闪烁一次,怎么改啊?谢谢各位老哥,毕设急。

图片说明

#include <reg51.h> 
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit dy_R=P2^0;
sbit dy_Y=P2^1;
sbit dy_G=P2^2;
sbit dy_Z=P2^3;

sbit dx_R=P2^4;
sbit dx_Y=P2^5;
sbit dx_G=P2^6;
sbit dx_Z=P2^7;

sbit led_A=P3^4;//ge
sbit led_B=P3^5;//shi

void Q();
void W();
void E();
void R();
void T();
void Y();
void U();
void I();

uchar N,num,shi,ge;
uchar tab_disp[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6f};

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
 for(y=110;y>0;y--);
}

void display(char shi,char ge)
{   
    led_A=0;      
    P1=tab_disp[shi];   
  if(shi)led_B=1;
    delay(50);

    led_B=0; 
    P1=tab_disp[ge]; 
    led_A=1;
    delay(50);


}

void main() 
{ 

        TMOD = 0x01;
    TH0 = (65536 - 45872) / 256;   
    TL0 = (65536 - 45872) % 256;      
    EA = 1;                           
    ET0 = 1; 
    TR0 =1;

   while(1) 
 {       
     Q();
     W();
     E();
     R();
     T();
     Y();
     U();
     I();
 }
}
void Q()
{   
  uint N;
  N=60;
  while(N<=60&&N>0)    
        if(num==20)
     {
        num=0;

        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge); 
        dx_R=0;dx_Y=0;dx_G=1;dx_Z=0;
        dy_R=1;dy_Y=0;dy_G=0;dy_Z=0; 
     }  
}
void W()     
{   
  uint N;
  N=5; 
  while(N<=5&&N>0)
    if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=0;dx_Y=1;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=1;dy_G=0;dy_Z=0;
          {
            delay(50);
                dx_Y=1;dy_Y=1;
      delay(50);
                dx_Y=0;dy_Y=0;
            }
     }  
}
void E()
{   
  uint N;
  N=20;
  while(N<=20&&N>0)    
        if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=0;dx_Y=0;dx_G=0;dx_Z=1;
        dy_R=1;dy_Y=0;dy_G=0;dy_Z=0; 
     }  
}  
void R()     
{   
  uint N;
  N=5; 
  while(N<=5&&N>0)
    if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=0;dx_Y=1;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=1;dy_G=0;dy_Z=0;
          {
                delay(50);
                dx_Y=1;dy_Y=1;
      delay(50);
                dx_Y=0;dy_Y=0;
            }
     }  
}
void T()
{   
  uint N;
  N=60;
  while(N<=60&&N>0)    
        if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=1;dx_Y=0;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=0;dy_G=1;dy_Z=0; 
     }  
}
void Y()     
{   
  uint N;
  N=5; 
  while(N<=5&&N>0)
    if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=0;dx_Y=1;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=1;dy_G=0;dy_Z=0;
          {
                delay(50);
                dx_Y=1;dy_Y=1;
      delay(50);
                dx_Y=0;dy_Y=0;
            }
     }  
}
void U()
{   
  uint N;
  N=20;
  while(N<=20&&N>0)    
        if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=1;dx_Y=0;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=0;dy_G=1;dy_Z=1; 
     }  
}
void I()     
{   
  uint N;
  N=5; 
  while(N<=5&&N>0)
    if(num==20)
     {
        num=0;             
        shi=N/10;
        ge=N%10;
        N--;
        display(shi,ge);
        dx_R=0;dx_Y=1;dx_G=0;dx_Z=0;
        dy_R=0;dy_Y=1;dy_G=0;dy_Z=0;
          {
                delay(50);
                dx_Y=1;dy_Y=1;
      delay(50);
                dx_Y=0;dy_Y=0;
            }
     }  
}
void time_() interrupt 1
{
 TH0 = (65536 - 45872) / 256;
 TL0 = (65536 - 45872) % 256;   
 num++; 
}   








c++

1个回答

工程文件和仿真文件发我邮箱给你改改看

xianfajushi
智者知已应修善业 回复yuhang_yayahei: 好样的,看了一下你的显示函数,把判断去掉led_B=1;,把 led_A=0;移到最后应该就可以了。
一年多之前 回复
qq_38716779
yuhang_yayahei 谢谢老哥啊,我自己琢磨着改好了。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐