📄 7.c
字号:
#include<reg52.h> //整过过程是通过一级一级的运行与判断进行的,在每一次显示效果完成后,关闭当前,启动下一效果,即进入下一个效果,
#include<intrins.h>
sbit m=P2^5;
char code table[]={0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7};
char code table1[]={0xe7,0xdb,0xbd,0x7e,0xe7,0xdb,0xbd,0x7e,0xe7,0xdb,0xbd,0x7e};
unsigned int x,y,m0,m1,m2,t0,t,t1,t2,h,flag,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,u,i;
void delay1() //500ms
{
for(x=0;x<129;x++)
for(y=0;y<250;y++);
}
void main()
{
m=1;
t0=0xaa;
t1=0xfe;
flag2=1;
TMOD=0x01;
EA=1;
ET0=1;
TH0=0x4c;
TL0=0x00;
TR0=1;
while(1) //进入大循环
{
if(flag1==1) //保证每隔一秒钟灯操作一次
{
flag1=0;
if(flag2==1) //间隔1s先奇数灯亮在偶数灯亮
{
P1=_crol_(t0,1);
t0=P1;
flag3++;
}
if(flag3==4) //一个灯上下循环亮
{
flag2=0; //关闭让灯奇偶亮
if(flag4==0) //参照作业流水灯5
{
P1=0xfe;
TR0=0;
delay1();
delay1();
TR0=1;
P1=_crol_(t1,1);
t1=P1;
flag5++;
if(flag5==7)
{
flag5=0;
flag4=1;
TR0=0;
delay1();
delay1();
TR0=1;
}
}
if(flag4==1)
{
P1=_cror_(t1,1);
t1=P1;
flag5++;
if(flag5==7)
{
m0++;
flag5=0;
flag4=0;
if(m0==3)
{m0=0;flag6=1;flag3=0;}
delay1();
}
}
}
if(flag6==1) //两个分别从两边往中间流动三次
{
P1=table[m1]; //用数组的方式调用灯的两灭
m1++;
if(m1==11)
{
m1=0;
flag6=0;
flag7=1;
TR0=0; //为了最后的一次过程也亮一秒在进入下一过程,先关闭定时器,延时一秒,在打开,否则影响后面的定时
delay1();
delay1();
TR0=1;
}
}
if(flag7==1)
{
P1=table1[m2];
m2++;
if(m2==11)
{
m2=0;
flag7=0;
flag8=1;
TR0=0;
delay1();
delay1();
TR0=1;
}
}
if(flag8==1) //8个全部闪烁3次,参照作业流水灯5
{
TR0=0;
u=0xff;
i=0x00;
P1=0x00;
flag8=0;
delay1();
for(t=0;t<8;t++)
{
i=P1;
P1=u;
u=i;
TR0=0;
delay1();
delay1();
TR0=1;
}
flag2=1;
TR0=1;
}
}
}
}
void inter(void) interrupt 1 using 1
{
TH0=0x4c;
TL0=0x00;
flag++;
if(flag==20)
{
flag=0;
flag1=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -