找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1818|回复: 0
收起左侧

流水灯升级版

[复制链接]
ID:290838 发表于 2018-3-12 16:21 | 显示全部楼层 |阅读模式
普通的流水灯是让8个led依次点亮,此升级版会让流水灯点亮第三个LED后再回到第二个LED,让LED呈现出震荡的形式,从左边到右边,再从右边弹到左边,实验程序很简单,还是很有趣的。此程序会让初学者对FOR语句的掌握更加牢固。
一下是本程序的源码:
/*本程序使led向右移动2格再向左移动一格以此循环,在触及到第八个LED时又弹回来向左以以上规律移动*/
/********************************************************************/
#include<reg52.h>                         //         定义了一些特殊功能寄存器
#include<intrins.h>                         //         需用到左右移函数
#define led P2                                  // 将P2定义为led
typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
/***********************************/                 
void delay(u16 i)                                          //延时函数   循环一次延时10us,当i=50000时大概延时450ms
{       
        while(i--);
}
/***********************************/
void main()                                                         //主函数
{
        u8 i,j;                                                         //        i led逐步右移计数,jled左右闪动计数
       
        while(1)                                                 //无限循环
        {        led=0x01;                                         //让第一个LED发光        ,延时
            delay(8000);
                        for(i=0;i<6;i++)                 //由于最后一个LED发光后不能跳到后一个LED,所以第七次单独运行
                {
                                for(j=0;j<2;j++)         //LED向右移动2
                        {
                                led=_crol_(led,1);         
                                delay(8000);
                        }
                                for(j=j;j>1;j--)         //LED向左移动1
                        {
                                led=_cror_(led,1);
                                delay(8000);
                        }
            }
                                        for(i=i;i<7;i++)   //当i=6时led向右移动2
                                {
                                        led=_crol_(led,1);
                                        delay(8000);
                                }
                         for(i=0;i<6;i++)                   // 和以上过程相反
                {
                                for(j=0;j<2;j++)
                        {
                                led=_cror_(led,1);
                                delay(8000);
                        }
                                for(j=j;j>1;j--)
                        {
                                led=_crol_(led,1);
                                delay(8000);
                        }
            }
                                        for(i=i;i<7;i++)
                                {
                                        led=_cror_(led,1);
                                        delay(8000);
                                }
       
        }

}

相机速度有点慢,看起来有两个LED同时移动
P80312-161843.gif

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表