📄 c程序.txt
字号:
#include "at89x51.h"
unsigned char data flag1,mode=0,m1=0;
unsigned int m=0,flag;
void disp();
void ms();
void T();
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 time0(void ) interrupt 1 using 1
{TH0=0xb3;
TL0=0x70;
flag++;
} //20ms定时
void time1(void ) interrupt 3 using 3
{TH1=0xb3;
TL1=0x70;
flag1++;
} //20ms定时
void main( void ) //主函数。
{
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
PT1=1;
TH0=0xb3;
TL0=0x70;
TH1=0xb3;
TL1=0x70;
flag=flag1=0;
while(1)
{T();
while((mode==1)&&(m!=0)) //标准
{while((flag<=150)&&(TR1==1)) {P1_1=0;P1_2=1;disp();T();} //run 3s 正转
flag=0;
while((flag<=50)&&(TR1==1)) {P1_1=1;P1_2=1;disp();T();} //stop 1s
flag=0;
while((flag<=150)&&(TR1==1)) {P1_2=0;P1_1=1;disp();T();} //run 3s 反
flag=0;
while((flag<=50)&&(TR1==1)) {P1_2=1;P1_1=1;disp();T();} //stop 1s
flag=0;
}
while((mode==2)&&(m!=0)) //轻柔
{while((flag<=50)&&(TR1==1)) {P1_1=0;P1_2=1;disp();T();} //run 1s 正转
flag=0;
while((flag<=100)&&(TR1==1)) {P1_1=1;P1_2=1;disp();T();} //stop 2s
flag=0;
while((flag<=50)&&(TR1==1)) {P1_2=0;P1_1=1;disp();T();} //run 1s 反转
flag=0;
while((flag<=100)&&(TR1==1)) {P1_2=1;P1_1=1;disp();T();} //stop 2s
flag=0;
}
while((mode==3)&&(m!=0)) //强洗
{P1_1=0;disp();T();}
}
}
void disp()
{
unsigned char k,S,S1,S2,M,M1,M2;
P2=wdisp[0]; //选中位
S=m%60;
S1=S%10; //数制转换
for(k=0;k<50;k++)
{P0=ddisp[S1];} //显示段码
P0=0x00; //关显示
if(P2_7==0)
{ ms();
if(P2_7==0)
{do{}while(P2_7==0); //键盘除颤判断s5的状态
mode=2; //方式2 弱洗
P1_3=0;
P1_4=1;
P1_5=1;}
}
P2=wdisp[1];
S2=(S-S1)/10;
for(k=0;k<50;k++)
{P0=ddisp[S2];}
P0=0x00;
if (P2_7==0)
{ ms();
if(P2_7==0)
{do{}while(P2_7==0); //键盘除颤判断s4的状态
mode=1; //中洗
P1_3=1;
P1_4=0;
P1_5=1;}
}
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)
{ ms();
if(P2_7==0)
{do{}while(P2_7==0); //键盘除颤判断s3的状态
mode=3;
P1_3=1;
P1_4=1;
P1_5=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)&&(TR1==0))
{ ms();
if((P2_7==0)&&(TR0==0))
{do{}while(P2_7==0); //键盘除颤判断s3的状态
m1++;
if(m1==60) m1=0;} //总时间加1
}
P2=wdisp[4];
P0=0x00;
if ((P2_7==0)&&(TR0==0)&&(TR1==0))
{ ms();
if((P2_7==0)&&(TR0==0))
{do{}while(P2_7==0); //键盘除颤判断s3的状态
TR1=1;
TR0=1;} //启动
}
P2=wdisp[5];
P0=0x00;
if((TR0==0)&&(TR1==0)) m=60*m1;
}
void ms() //除颤程序
{unsigned int n;
for(n=0;n<1000;n++)
{ }
}
void T()
{do{disp();}while(flag1<50); // 1s 定时
if(m==0)
{flag=flag1=0;
TH0=0xb3;
TL0=0x70;
TH1=0xb3;
TL1=0x70;
P1_1=1;
P1_2=1;
TR0=0;
TR1=0;
m=m1=0;
} //时间到关定时器T0,T1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -