yuhang_yayahei 2019-05-10 15:35 采纳率: 0%
浏览 385

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

图片说明

#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++; 
}   








  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器