本帖最后由 chekundong 于 2020-7-29 16:32 编辑
用P1口控制8只LED,分别以1只LED点亮流动再返回流动一个循环、以2只LED点亮流动再返回流动一个循环、然后以3只LED点亮流动再返回流动一个循环······直到8只LED全亮。
每次点亮LED50ms进行一次流动,最后8只点亮延时100ms,同时用P2.0口输出低电平驱动蜂鸣器。(pnp管)
#include "reg51.h"
#include
//#define uchar unsigned char
//#define uint unsigned int
/*******延时子函数********/
void delay(unsigned int z) // 1ms
{
unsigned int a,b;
for(a=z;a>0;a--)
for(b=125;b>0;b--);
}
/*******主函数********/
void main()
{ /*
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1; */
unsigned int a;
while(1) //始终循环以下过程。
{
P2=0Xff;
for(a=0,P1=0x01;a<8;a++) //1颗灯循环左移
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0x80;a<8;a++) //1颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
}
for(a=0,P1=0x03;a<7;a++) //2颗灯循环左移
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xc0;a<7;a++) //2颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
}
for(a=0,P1=0x07;a<6;a++) //3颗灯循环左移
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xe0;a<6;a++) //3颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
}
for(a=0,P1=0x0f;a<5;a++) //4颗灯循环左移
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xf0;a<5;a++) //4颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
} //5颗灯循环左移
for(a=0,P1=0x1f;a<4;a++)
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xf8;a<4;a++) //5颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
} //6颗灯循环左移
for(a=0,P1=0x3f;a<3;a++)
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xfc;a<3;a++) //6颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
}
for(a=0,P1=0x7f;a<2;a++) //7颗灯循环左移
{
delay(500);
P1=_crol_(P1,1);
}
for(a=0,P1=0xfe;a<2;a++) //7颗灯循环右移
{
delay(500);
P1=_cror_(P1,1);
}
P1=0xff; //8颗灯全亮,P2.0口输出低电平驱动buzzer。
P2=0x00;
delay(1000);
}
}
/*
void timer0Interrupt() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P2=0X00;
}
*/ |