单片机控制左右来回循环的流水灯

更新时间:2023-10-12 13:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

左右来回循环的流水灯

设计要求

8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编程实现制作左右来回循环的节日彩灯,显示规律如下图所示。

题37图 节日彩灯的花样显示的规律

为了使显示效果更加绚丽多彩,P1端口8个引脚分别接有不同颜色的发光二极管。具体如题37表所示。

题37表 P1口 8个引脚的不同颜色的发光二极管

P1口引脚 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

使用C51编流水灯程序以及设计相应的硬件电路十分简单,且有多种方法。本方案力求程序最简化最清晰原则,用NS图(盒图)表示算法如下:

发光二极管的颜色 红色LED 蓝色LED 绿色LED 黄色LED 红色LED 蓝色LED 绿色LED 黄色LED

程序中设置中间变量temp用来给P1口赋值,命令_crol_和_cror_用于使temp左移或右移,例如当temp=11111110B时,执行_crol_(temp,1)之后temp=11111101,应用此两条语句必须把头文件包含进来。 全部代码如下: #include #include unsigned char temp; LED的P1口赋值 int a;

void delay(void); void main() {

temp=0xfe; P1=temp;

while(1)

//定义字符变量temp,temp左移或右移并给连接 //定义延迟函数delay()

//给temp赋初值

//temp赋值给P1口,第一个LED(红色)点亮 //主程序,括号中的程序将一直循环 //左移部分,LED从左到右依次点亮

{

for(a=0;a<7;a++)

{

temp=_crol_(temp,1); //_crol_语句控制变量temp左移 }

delay(); P1=temp;

//每个灯点亮之后延迟一会在点下一个灯

}

for(a=0;a<7;a++) //右移部分,LED从右到左依次点亮

{

temp=_cror_(temp,1); //第8个灯点亮后开始右移程序,LED从右向左点亮 }

delay(); P1=temp;

}

void delay() {

int i,j;

//延时子程序 //定义局部变量i,j

//i,j不断计数占用CPU时间,达到延时目的

for(i=200;i>0;i--) for(j=1;j<150;j++);

}

电路连接如下:

本文来源:https://www.bwwdw.com/article/1jqf.html

Top