⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 #include "at89x51.h" unsigned char code ddisp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
💻
字号:
#include "at89x51.h"
unsigned char code ddisp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段显0123456789,P0口
unsigned char code wdisp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位选,P2口
void disp( );
void ms();
char data flag;
unsigned int m=0;                    //总累加器。
unsigned char m1=0,m2=0,m3=0;        //秒,分,时累加器。
void time0(void ) interrupt 1 using 1//定时器T0中断。
{TH0=0xb2;
 TL0=0xe0;
 flag++;
}
 
void main(void )                   //主函数。
 {
 TMOD=0x01;
 EA=1;
 ET0=1;
 TH0=0xb2;
 TL0=0xe0;                         //20ms
 flag=0;
 while(1)
 {do{
     disp( );
    }while(flag<=50);              //等待1s时间
if(m==0) 
{flag=0;
P1_1=1;
TR0=0;
m=m1=m2=m3=0;
}                                  //时间到关定时器,关P1_1口
else
{flag=0; 
--m;                               //时间不到,m减1
}
}
}

void disp( )                       //显示键盘函数
{
unsigned char k,S,S1,S2,M,M1,M2,H,H1,H2;
P2=wdisp[0];                       //选中位
S=m%60;
S1=S%10;                           //数制转换
for(k=0;k<50;k++)
 {P0=ddisp[S1];}                   //显示段码
P0=0x00;                           //关显示
if((P2_7==0)&&(TR0==0))
  {if((P2_7==0)&&(TR0==0))
  {ms();
   do{}while(P2_7==0);             //键盘除颤判断s5的状态
   m1++;  
   if(m1>=60) m1=0;}}              //60归0
P2=wdisp[1];
S2=(S-S1)/10;
 for(k=0;k<50;k++)
 {P0=ddisp[S2];} 
P0=0x00;
if ((P2_7==0)&&(TR0==0))
	 {if((P2_7==0)&&(TR0==0))
    { ms();
      do{}while(P2_7==0);          //键盘除颤判断s4的状态 
      m2++;  
      if(m2>=60) m2=0;}}
P2=wdisp[2];
M=((m-S)/60)%60;
M1=M%10;
 for(k=0;k<50;k++)
 {P0=ddisp[M1]+0x80; }             //显示小数点
P0=0x00;
if((P2_7==0)&&(TR0==0))
  { ms();
    do{}while(P2_7==0);            //键盘除颤判断s3的状态
    m3++; 
    if(m3>=13) m3=0; }
P2=wdisp[3];
M2=(M-M1)/10;
for(k=0;k<50;k++)
{P0=ddisp[M2];} 
P0=0x00;
if ((P2_7==0)&&(TR0==0))
	 { ms();
      if(P2_7==0)                  //键盘除颤判断s2的状态
      TR0=1;
	   P1_1=0;
    }
P2=wdisp[4];
H=((m-S)/60-M)/60;
H1=H%10;
for(k=0;k<50;k++)
{P0=ddisp[H1]+0x80;}             //显示小数点
P0=0x00;
P2=wdisp[5];
H2=(H-H1)/10;
 for(k=0;k<50;k++)
 {P0=ddisp[H2];} 
P0=0x00;
if(TR0==0) m=m1+60*m2+3600*m3;   //总计数转换

}

void ms()                        //除颤程序
{unsigned int n;
for(n=0;n<1000;n++)
{ } 
}
 
//本程序已通过uision2调试通过,在实验板实验正常,程序由祁维国编写,其中s5为秒对时
//s4为分对时,s3为时对时,s2为启动按钮。


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -