单片机花样流水灯源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
花样流水灯C语言程序代码
Lesso2.1: 第一个发光管以间隔200ms闪烁(这是最原始的程序没有用延迟子函数)。
#include<reg52.h>
sbit D1=P1^0;
int a;
void main()
{
while(1)
{
D1=0;
a=25000;
while(--a);
D1=1;
a=25000;
while(--a);
}
}
Lesson2.2: 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar temp;
sbit beep=P2^3;
void main()
{
temp=0xfe;
while(1)
{
P1=temp;
beep=0;
delay(500);
P1=0xff;
beep=1;
delay(500); temp=_crol_(temp,1);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
Lesson2.3:8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar temp;
int i,j;
sbit beep=P2^3;
void main()
{
temp=0xfe;
while(1)
{
for(i=7;i>0;i--)
{ beep=0;
delay(100);
beep=1;
delay(100);
beep=0;
delay(100);
beep=1;
P1=temp;
delay(500); temp=_crol_(temp,1);
}
for(i=7;i>0;i--)
{
beep=0;
delay(100);
beep=1;
delay(100);
beep=0;
delay(100);
beep=1;
P1=temp;
delay(500); temp=_cror_(temp,1);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
Lesson2.4:用8个发光管演示出8位二进制数累加过程。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
void main()
{
P1=0xfe;
while(1)
{
delay(500);
P1--;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
Lesson2.5:8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。
重复此过程。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char void delay (uint);
uchar temp;
int i,j;
sbit beep=P2^3;
void main()
{
while(1)
{
temp=0xfe;
for(i=7;i>0;i--)
{
P1=temp;
delay(200);
temp=_crol_(temp,1);
}
for(i=8;i>0;i--)
{
P1=temp;
delay(200);
temp=_cror_(temp,1);
}
for(i=0;i<5;i++)
{
P1=0xff;
delay(300);
P1=0x00;
delay(300);
}
P1=0xff;
delay(300);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
Lesson2.6: 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
(注意此程序中移位的使用,体
会按位左右移与循环左右移的区别!)
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
uint i,j;
uchar temp;
void main()
{
while(1)
{
temp=0xfe;
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++) {
P1=temp;
delay(500);
temp=_crol_(temp,1); }
temp=_crol_(temp,j); P1=0xff;
delay(150);
temp=temp<<1;
}
}
}
Lesson2.7: 间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;
两个分别从两边往中间流动三次;再从中间往两边流动三次;8个
全部闪烁3次;关闭发光管,程序停止。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar temp;
int i,j=3;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
beep=0;
delay(300);
beep=1;
for(i=0;i<3;i++) //奇偶闪烁三遍。
{
P1=0xaa;
delay(300);
P1=~P1;
delay(300);
}
beep=0;
delay(300);
beep=1;
temp=0xfe; //单个循环三遍,带有蜂鸣器提示。
while(j--)
{
for(i=0;i<8;i++)
{
P1=temp;
temp=_crol_(temp,1);
delay(300);
}
beep=0;
delay(300);
beep=1;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
P1=temp;
delay(300);
}
}
beep=0;
delay(300);
beep=1;
for(j=0;j<3;j++) //两边向中间后中间向两边整体三遍。
{
P1=0x7e;
delay(300); //感觉这个代码有些繁琐,有好建议改进的P1=0xbd; //网友还请慷慨回帖,咱们一起研究进步。
delay(300);
P1=0xdb;
delay(300);
P1=0xe7;
delay(300);
P1=0xdb;
delay(300);
P1=0xbd;
delay(300);
}
P1=0x7e;
delay(300);
P1=0xff;
delay(300);
beep=0;
delay(300);
beep=1;
for(i=0;i<3;i++) //8个灯全部闪烁三次。
{
P1=0x00;
delay(300);
P1=0xff;
delay(300);
}
P1=0xff;
while(1);
}。