「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」
流水灯
流水灯--分步赋值法(数组赋值)
image-20210929164002425
我们利用分步点亮的原理,可以实现最简单的流水灯。但是STC15单片机运行速度非常快,为了实现我们想要的效果,P3口点亮一个LED之后,延迟一段时间,再点亮下一个LED,延迟,以此类推,这样就可以循环显示8个LED流水效果
首先我没有相对应的硬件,没有哪个板子有8个灯的也就跑不出流水的效果,但是我可以借助数码管来演示流水灯的效果
image-20210930214127001
image-20210930071236726
但是单片机速度很快的,我们需要延时一下,不然人眼是看不到流水效果的
u8 code buffer[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
void delay()
{
u8 x = 0;
u8 y = 0;
u8 z = 0;
for(x = 0;x<200;x++)
{
for(y = 0;y<200;y++)
{
for(z = 0;z<20;z++);
}
}
}
//流水灯--分步赋值法(数组赋值)
int main()
{
SN74LS244_Init();
while(1)
{
u8 i = 0;
for(i = 0;i<8;i++)
{
P7 = buffer[i];
delay();
}
}
}
流水灯--变量的左移右移
1 、利用左移语句,实现 P3 口 LED挨个点亮
2 、利用右移语句,实现 P3 口 LED 挨个灭掉
流水灯--变量的循环左移和右移
image-20210930214729084
//流水灯 — 变量的 循环左移和右移
void main()
{
u8 LED = 0x7f;
SN74LS244_Init();
P3M1 = 0; P3M0 = 0; //设置为准双向口
while(1)
{
P7 = LED;
delay();
LED = _cror_(LED,1);
}
}
注意我只给了主函数的代码,代码并不难,耗时的是文章的排版与gif的制作,我基本找了半天的工具才找到适合的,我用的板子不是配套的,但是万变不离其中,给我原理图我照样可以写一个陌生的板子,这套板子原始资料我已经上传了,我自己的笔记没有,我准备慢慢上传