||
/************************************************************************/
/*罗列快乐*/
/*网站地址:http://2099.5d6d.com*/
/*模块名:流水灯模块 流水灯型号:红光LED*/
/*创建人:张东 日期:2009-3-23*/
/*修改人:张东 日期:2009-4-1*/
/*功能描述:1.P1口所有LED间隔1000ms闪烁
2.P1口所有LED呈交替流水状
3.P1口流水灯-左移,循环3次
4.P1口流水灯-右移,循环3次
5.P1口由两边向中间流水,循环3次
6.P1口由中间向两边流水,循环3次*/
/*其他说明:*/
/*版本:*/
#include"reg51.h" //包含头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void main()
{
while(1)
{
uchar i,j,k;
for(i=3;i>0;i--)
{
P1=0x00; //点亮P1口所有LED,延时1000ms
delay(1000);
P1=0xff; //熄灭P1口所有LED,延时1000ms
delay(1000);
}
for(i=3;i>0;i--) //奇偶交替成流水灯状态
{
P1=0x55;
delay(1000);
P1=0xaa;
delay(1000);
}
P1=0xff;
delay(300);
for(i=3;i>0;i--) //P1口单灯左移流水,循环3次
{
k=0xfe;
for(j=0;j<8;j++)
{
P1=k;
delay(200);
k=_crol_(k,1);
}
}
P1=0xff;
delay(300);
for(i=3;i>0;i--) //P1口单灯右移流水,循环3次
{
k=0xfe;
for(j=0;j<8;j++)
{
P1=k;
delay(300);
k=_cror_(k,1);
}
}
P1=0xff;
delay(300);
for(j=0;j<3;j++) //P1口由两边向中间流水,循环3次
{
P1=0x7e;
delay(300);
P1=0xbd;
delay(300);
P1=0xdb;
delay(300);
P1=0xe7;
delay(300);
}
P1=0xff;
delay(300);
for(j=0;j<3;j++) //P1口由中间向两边流水,循环3次
{
P1=0xe7;
delay(300);
P1=0xdb;
delay(300);
P1=0xbd;
delay(300);
P1=0x7e;
delay(300);
}
P1=0xff;
delay(300);
k=0xfe; //赋初值
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++) //左移
{
P1=k; //点亮小灯
delay(200); //延时200毫秒
k=_crol_(k,1); //将a变量循环左移一位
}
k=_crol_(k,j); //补齐,方便下面的左移一位
P1=0xff; //全部关闭
k=k<<1; //左移一位让多一个灯点亮
}
}
}
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--) //外层for中变量为多少,就延时约多少ms
for(j=110;j>0;j--); //当内层for语句中变量恒定值为110时
}