单片机LED点阵流水灯的制作 附视频(2)
时间:2014-06-08 19:07 来源:未知 作者:admin 点击:次
|
再将那10路光源也就是显示面板连接至驱动电路板:
软件设计: 对于此作品,软件上除了实现流水灯的功能就没有其他技巧,但为了尽量使彩灯好看一些,不得不挖空心思想一些新花样。既便如此,一个51芯片也绰绰有余。
/***************************************************
程序名称:单片机流水灯
简要说明:P0口、P2.0、P2.1输出10路彩灯信号
编 写:JiangX.net
***************************************************/
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lie1=P0^6;
sbit lie2=P0^5;
sbit lie3=P0^4;
sbit lie4=P0^3;
sbit lie5=P0^2;
sbit lie6=P0^1;
/*****(n)ms延时子程序*****/
void delayms(uint n)
{
while(n--)
{
uchar i;
for(i=0;i<125;i++);
}
}
/*****开机画面*****/
void kaiji(void)
{
P0=P2=0xff;
delayms(2000);
P0=P2=0x00;
delayms(200);
P0=P2=0xff;
delayms(200);
P0=P2=0x00;
delayms(200);
P0=P2=0xff;
delayms(200);
P0=P2=0x00;
delayms(200);
P0=P2=0xff;
delayms(200);
P0=P2=0x00;
delayms(200);
P0=P2=0xff;
delayms(200);
P0=P2=0x00;
delayms(200);
P0=P2=0xff;
delayms(200);
P0=P2=0x00;
delayms(200);
}
/*****流水显示*****/
void liushui1(void)
{
uchar temp0,i;
temp0=0x01;
for(i=0;i<7;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui2(void)
{
uchar temp0,i;
temp0=0x03;
for(i=0;i<6;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui3(void)
{
uchar temp0,i;
temp0=0x07;
for(i=0;i<5;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui4(void)
{
uchar temp0,i;
temp0=0x0f;
for(i=0;i<4;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui5(void)
{
uchar temp0,i;
temp0=0x1f;
for(i=0;i<3;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui6(void)
{
uchar temp0,i;
temp0=0x3f;
for(i=0;i<2;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui7(void)
{
uchar temp0,i;
temp0=0x7f;
for(i=0;i<1;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui8(void)
{
uchar temp0,i;
temp0=0x05;
for(i=0;i<5;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui9(void)
{
uchar temp0,i;
temp0=0x15;
for(i=0;i<3;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void liushui10(void)
{
uchar temp0,i;
temp0=0x55;
for(i=0;i<1;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
/*****闪烁1*****/
void shanshuo1(void)
{
uchar i;
for(i=0;i<5;i++)
{
P2=0xff;
P0=0x80;
delayms(200);
P0=0x7f;
P2=0x00;
delayms(200);
}
delayms(500);
P0=P2=0x00;
delayms(200);
}
/*****跑马显示*****/
void paoma(uchar sudu)
{
uchar i,j;
uchar temp1=0x01;
uchar temp2=0x40;
for(i=0;i<6;i++)
{
P0=temp1;
delayms(sudu);
temp1=temp1*2;
}
for(j=0;j<6;j++)
{
P0=temp2;
delayms(sudu);
temp2=temp2/2;
}
}
/*****闪烁2*****/
void shanshuo2(void)
{
uchar i;
for(i=0;i<7;i++)
{
P2=0xff;
P0=0x80;
delayms(200);
P2=0x00;
P0=0x00;
delayms(200);
}
delayms(500);
}
/*****堆积显示子程序*****/
void duiji1(void)
{
uchar temp0=0x01,i;
for(i=0;i<7;i++)
{
P0=temp0;
delayms(200);
temp0=temp0*2;
}
}
void duiji2(void)
{
uchar temp0=0x01,i;
for(i=0;i<6;i++)
{
P0=temp0;
lie1=1;
delayms(200);
temp0=temp0*2;
}
}
void duiji3(void)
{
uchar temp0=0x01,i;
for(i=0;i<5;i++)
{
P0=temp0;
lie1=1;
lie2=1;
delayms(200);
temp0=temp0*2;
}
}
void duiji4(void)
{
uchar temp0=0x01,i;
for(i=0;i<4;i++)
{
P0=temp0;
lie1=1;
lie2=1;
lie3=1;
delayms(200);
temp0=temp0*2;
}
}
void duiji5(void)
{
uchar temp0=0x01,i;
for(i=0;i<3;i++)
{
P0=temp0;
lie1=1;
lie2=1;
lie3=1;
lie4=1;
delayms(200);
temp0=temp0*2;
}
}
void duiji6(void)
{
uchar temp0=0x01,i;
for(i=0;i<2;i++)
{
P0=temp0;
lie1=1;
lie2=1;
lie3=1;
lie4=1;
lie5=1;
delayms(200);
temp0=temp0*2;
}
}
void duiji7(void)
{
uchar temp0=0x01,i;
for(i=0;i<1;i++)
{
P0=temp0;
lie1=1;
lie2=1;
lie3=1;
lie4=1;
lie5=1;
lie6=1;
delayms(200);
temp0=temp0*2;
}
}
/*****闪烁3*****/
void shanshuo3(void)
{
uchar i;
for(i=0;i<7;i++)
{
P0=0x55;
delayms(200);
P0=0x7f;
delayms(200);
}
delayms(500);
}
/*****主程序*****/
void main(void)
{
P0=P2=0x00;
while(1)
{
kaiji();
liushui1();
liushui2();
liushui3();
liushui4();
liushui5();
liushui6();
liushui7();
delayms(500);
shanshuo1();
paoma(200);
paoma(150);
paoma(100);
paoma(80);
paoma(50);
paoma(40);
paoma(40);
paoma(30);
paoma(30);
paoma(30);
paoma(30);
paoma(20);
paoma(20);
paoma(20);
paoma(20);
paoma(20);
paoma(20);
P0=0x41;
delayms(1000);
shanshuo2();
duiji1();
duiji2();
duiji3();
duiji4();
duiji5();
duiji6();
duiji7();
delayms(500);
liushui8();
liushui8();
liushui8();
liushui9();
liushui9();
liushui9();
liushui10();
liushui10();
liushui10();
shanshuo3();
}
} (责任编辑:admin) |
- 上一篇:51单片机最小系统的制作
- 下一篇:PIC16F628单片机频率计数器的制作

