5.c
来自「上传一些」· C语言 代码 · 共 101 行
C
101 行
#include<reg52.h>
#include<intrins.h>
sbit m=P2^5;
sbit feng=P2^3;
unsigned char flag,flag1,flag2,flag3,flag4,h,u,i;
unsigned int x,y,t;
void delay() //500ms
{
for(x=0;x<229;x++)
for(y=0;y<250;y++);
}
void delay1() //500ms
{
for(x=0;x<129;x++)
for(y=0;y<250;y++);
}
void main()
{
m=1;
flag2=0;
h=0xfe;
P1=h;
TMOD=0x01;
EA=1;
ET0=1;
TH0=0x4c;
TL0=0x00;
TR0=1;
while(1) //启动大循环
{
if(flag4==0) //判断灯是该上下流动还是该闪烁,0为上下流动
{
if(flag1==1) //保证每隔1s运行一次
{
if(flag3==0)
{
flag1=0;
P1=_crol_(h,1); //向左移一位,向下依次亮
feng=!feng;
h=P1;
flag2++; //判断是否已到了底
if(flag2==7)
{
flag2=0; //关闭向左移
flag3=1; //开启向右移
delay1();
}
}
if(flag3==1)
{
flag1=0;
P1=_cror_(h,1); //向左移一位,向下依次亮
feng=!feng;
h=P1;
flag2++;
if(flag2==7) //判断是否已到了底
{
flag2=0; //关闭向左移
flag3=0; //开启向右移
flag4=1; //打开闪烁,关闭流动
delay1();
}
}
}
}
if(flag4==1)
{
TR0=0; //由于闪烁时间长,先关闭定时器
u=0xff;
i=0x00;
P1=0x00;
flag4=0; //打开流动,关闭闪烁
delay();
for(t=0;t<8;t++) //闪烁5次
{
i=P1;
P1=u;
u=i;
feng=!feng;
delay();
}
TR0=1;
}
}
}
void inter(void) interrupt 1 using 1
{
TH0=0x4c;
TL0=0x00;
flag++;
if(flag==4)
{
flag=0;
flag1=1;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?