led的点亮和流水灯的制作

先给出led的电路图

每个led灯连着VCC,默认为高电平

可以看到led灯对应连着P20到P27共8个灯

所以只要将P20到P27对应的引脚置为低电平即可

具体来说就是

P2_0 = 0//头文件里面定义了相关的文件等价于P2的第0位

想实现流水灯的话

首先是延时函数

一个基本语句的执行时间为10us

然后1s = 1000ms = 1000000us

所以要延时1s的话就必须执行100000个基本语句

所以可以写个函数

void deley(int x) {
    while (x--) {}
}

然后需要多少秒就乘1e5,然后填入参数即可

然后为了代码简洁,肯定要用for循环

所以要换种形式来让led灯亮

就是直接操作P2来达到这个效果(而不是具体到某一位)

那么初始状态是左边的第一个灯亮着,其余都暗着

对应的二进制数为11111110

十六进制为0xFE

然后就一直往右移即可

想要灯的显示效果一直右移

那么可以先左移,然后再加一即可达到这个效果

那么如果想要灯光效果左移捏

同理,一直右移,然后加一即可,但是注意这个加一加的是第8位上的1,所以加的是0x80

代码如下:

#include <at89c51RC2.h>

sbit led = P2 ^ 7;

void delay(int x)
{
	while (x)
		x--;
}

void main()
{
	int i;
	P2 = 0xFE;
	delay(50000);
	while (1)
	{
		for (i = 1; i <= 7; i++)
		{
			P2 <<= 1;
			P2 += 1;
			delay(50000);
		}
		// for (i = 1; i <= 7; i++)
		// {
		// 	P2 >>= 1;
		// 	P2 += 0x80;
		// 	delay(50000);
		// }
	}
}
 

本文作者:rickly233

本文链接:https://www.cnblogs.com/rickly233/p/17359776.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   rickly233  阅读(87)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起