LED 流水灯实验

使用移位和循环实现 如果要实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮。

要实现循环点亮,可以使用最容 易理解的方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1、 D3-D8 熄灭,延时一段时间后再点亮 D3 且把 D1-D2、D4-D8 熄灭,如此循环,这 样就可以很简单的实现 LED 流水灯实验,当然我们不推荐此种方法。在前面我们 学习了 C 语言相关的基础知识,里面有移位以及循环语句操作,根据流水灯实现 原理,即 IO 口由低往高或者由高往低逐个输出低电平特点,那么我们可以将移 位操作以及循环结合进来。实现代码如下:

#define LED_PORT P2 //使用宏定义 P2 端口
void main()
{
    u8 i=0;
    while(1)
    {
        for(i=0;i<8;i++)
        {
               LED_PORT=~(0x01<<i); //将 1 右移 i 位,然后取反将结果赋值到 LED_PORT
               delay_10us(50000);
        }
    }
}

进入 main 函数后首先定义一个变量 i,然后进入 while 循环,由于要实现 8 个 LED 从 D1->D8 循环点亮,因此可以使用 for 循环语句循环 8 次,每循环一次, 点亮的小灯向右移动一个,而 D1-D8 是连接到 P2.0-P2.7 的,因此输出的低电平 要左移一位,因此可以使用 LED_PORT=~(0x01<<i);语句实现。0X01<<i表示i增加 1 次,0x01 中的 1 就移动多少位,因为 1(高电平)不会让 LED 点亮,需要 取反后变为低电平 0 才能点亮,所以最后的结果需要取反后给 LED_PORT 口,并 且每次循环都要延时一段间,这样才能分辨出来 LED 在流水。

仿真电路

使用Proteus搭建电路仿真,除了下图的接法,也可以把led反着接,正极接单片机,负极接地。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值