先给出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);
// }
}
}
标签:P2,右移,led,点亮,int,void,while,流水
From: https://www.cnblogs.com/rickly233/p/17359776.html