查询方式流水灯制作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的流水灯

1.实验任务

利用单片机AT89C51与LED设计一串流水灯,要求至少26个灯,三种流水模式。

2. 电路原理图

3.系统板上硬件连线

(1)P0,P2,P3分别接24个小灯,P1.5,P1.6,P1.7用来显示流水灯模式的指示灯;

(2)P1.0,P1.2,P1.4三个管脚为三种模式控制键,按下其中一种可以显示一种流水模式。

4.c语言程序

#include

#include

sbit key1=P1^0;

sbit key2=P1^2;

sbit key3=P1^4;

sbit W1=P1^5;

sbit W2=P1^6;

sbit W3=P1^7;

unsigned char i,j,k,m,n,temp,y,v,u;

int a[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

int b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay02s(void) //延时0.2秒子程序

{

unsigned char i,j,k; //定义3个无符号字符型数据。

for(i=20;i>0;i--) //作循环延时

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void aa() // 实现要求子程序(key1按下时实现逐盏点亮,逐盏灭掉) {

P0=0xff ;// 发光二极管全灭

while(!key1)

delay02s();

while(key1==1)

{ while(1)

{P0=a[m];P2=a[m];P3=a[m];

W3=0;delay02s();P0=0xff;P2=0xff;P3=0xff;delay02s();P0=a[m];P2=a[m];P3 =a[m];m++;

if(m==8) m=0;

}//逐盏点亮、闪烁,逐盏灭掉

} }

void bb()

{ P3=0xff ;// 发光二极管全灭

while(!key2)

delay02s();

while(key2==1)

{ while(1)

{P0=b[n];P2=b[n];P3=b[n];W2=0;delay02s();n++;

if(n==8)n=0;}}

}

void cc()

{ P2=0xff ;// 发光二极管全灭

while(!key3)

delay02s();

while(key3==1)

{ while(1)

{P0=0xaa;P2=0xaa;P3=0xaa;

W1=0;delay02s();delay02s();delay02s();delay02s();P0=0x55;P2=0x55;P3=0 x55;delay02s();delay02s();delay02s();delay02s();

temp=0xfe;

P0=temp; P2=temp;P3=temp;delay02s(); for(y=1;y<8;y++)

{

u=temp<

v=temp>>(8-y);

P0=u|v;

P2=u|v;

P3=u|v;

delay02s();

}

for(y=1;y<8;y++)

{

u=temp>>y;

v=temp<<(8-y);

P0=u|v;

P2=u|v;

P3=u|v;

delay02s();

}

}

}}

void main()

{

while(1){P0=0xff; while(!key1)aa(); while(!key2)bb(); while(!key3)cc(); }}

相关文档
最新文档