查询方式流水灯制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(); }}