初学51单片机流水灯实现及C语言实践相关

您所在的位置:网站首页 流水灯c51程序代码两种花样 初学51单片机流水灯实现及C语言实践相关

初学51单片机流水灯实现及C语言实践相关

2024-07-12 14:07| 来源: 网络整理| 查看: 265

  笔者的单片机开发板子和教学视频是來自金沙滩工作室宋老师的。

   在点亮流水灯的课后习题,要求流水灯从左到右依次亮,到底后接着从右到左点亮,来回循环。为了加深印像,笔者又在这个基础上提出了新的变化。之前是一个LED灯来回跑,这次课题是两个LED一个从左另一个从右互相来回跑。

进入正题;调试版的单片机的IO口控制着LED的通断并且低电平的时候LED点亮。并且控制端口P0.0~P0.7 8个端口刚好能被一个字符表示。 如图 (图中的值到时都要求反)

预先的设想是LED1从端口1-8依次点亮然后再从8-1依次点亮往复循环,LED2从端口8-1依次点亮然后从1-8依次点亮往复循环。以下是实现的初版程序代码

第一个语句P0 = ~(shift1+shift2) 最后P0的值是0111 1110 即最左边和最右边端口的灯点亮了

程序功能实现了但是在实际观看的时候确发现好像和预期不一样,从视觉的观感上好像是这样子的

在视觉上两个LED在端口4和端口5相碰停了一下然后返回了 结果链接视频

流水灯初版_哔哩哔哩_bilibili

实际上LED确实按照之前的设想工作的为什么会发生这种情况呢,如图

当LED1运动到端口4的时候LED2运动刚好到5,接着LED1运动到端口5此时LED2运动到端口4,因为是1条流水灯,实际上LED在端口4,5延时了两次。因此会在视频上显示好像停了一段时间然后回头走了。

为了避免这种情况发生,工作到端口4和5的时候确保只亮一次灯,因此有如下

如此就不会这么明显的停留感了,看程序

while(1)   {                    P0 = ~(shift1+shift2); //P0等于循环变量取反              for(i=0;i>1;  // shift1在端口5 0x10的位置并且向右移动一位           shift2 = shift21 ;    //换向后循环变量1右移              shift2 = shift2



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3