找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2422|回复: 9
打印 上一主题 下一主题
收起左侧

求大神指导该如何学习?想通过学习完成一个单片机流水灯程序

  [复制链接]
跳转到指定楼层
楼主
ID:892270 发表于 2021-3-15 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现

单片机的PL0~PL7接8个发光二极管LOD0~LOD7。编写程序,从中间两个灯开始亮起(LED3,LED4),向两边逐个点亮,每次亮两个灯,当LED0和;ED7点亮后,由两边向中间逐个点亮,重复循环
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:702386 发表于 2021-3-15 20:39 | 只看该作者
给你个简单的方案建议,由于亮灯的组合情况只有4种,干脆定义一个8个元素的显示数组,把来回一遍亮灯的8种状态对应的字节按顺序写到数组中。然后只要在while循环中搞一个for循环就能实在重复循环显示。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:230742 发表于 2021-3-15 23:54 | 只看该作者
对了。数组最适合你的想法,可以想让那个亮,就让那个亮。想亮几个,就亮几个。数组写个100组,每组100个值,你就是点灯大师!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:892400 发表于 2021-3-16 00:07 | 只看该作者
想写简单还是想写复杂。可能你基础还不牢固,写个容易明白的给你
#include<reg52.h>///////这句程序将芯片厂家定义的程序拉进你的程序,他的作用告诉电脑各引脚连接到第几个控制寄存器,因为直接写P0他不知道啥意思,所以这句程序拉进来的头文件告诉电脑P0=0X80;是指P0连接到了第80号寄存器,然后电脑进去数,数到第80控制单元就是P0引脚了。了解就可以了。
sbit LEDsbi0=P0^0;
sbit LEDsbi0=P0^0;
sbit LEDsbi0=P0^0;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:372579 发表于 2021-3-16 09:16 来自手机 | 只看该作者
这个用沙发的思路,地板的程序结合起来就是一个完美的程序,当然前提是你要for循环和while的用法,这个可以去本论坛或网上搜索一下应该有这种介绍的,结合这个东西肯定能做得出来,祝你成功!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:892492 发表于 2021-3-16 10:51 | 只看该作者
用一个for语句,你这里有6个状态,34,25,16,07,16,25,循环执行

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:139866 发表于 2021-3-16 11:57 | 只看该作者
int Array[] = {00011000,00100100,01000010,10000001};

while(1)
{
  for( char i = 0 ; i < 4 ; i ++ ){
    P1 = Array[ i ] ;
    Delay();
  }

  for( char i = 4; i > 0 ; i -- ){
    P1 = Array[ i  -1] ;
    Delay();
  }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:695741 发表于 2021-3-16 12:05 | 只看该作者
不太能理解数组的思想,按我的想法就照着最笨的办法来。。一条代码点两个灯,延时,关灯,延时,再点下面两个灯,延时,关灯,延时。。。。整个放到for循环里面。。。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:801701 发表于 2021-3-16 15:34 | 只看该作者
其实流水灯你得明白它的每个程序是干什么的,他那个数组里面存储的数据就是每个引脚的电平状态,比如说,0xff换成二进制就是1111 1111,学过数电就知道,我们在电子元件中1代表高电平,0代表低电平。所以说这代表你这边有八个引脚是高电平。而再去结合单片机led灯硬件连接就可以知道,它一端连的是高电平(也就是我们说的共阳),另一端是单片机引脚,led两端是高电平无电势差,所以是灭的状态同理,0x00是全部点亮,你可以先根据想点亮那个led灯对应的引脚写0,灭就写1,最后化为16进制。就得到所谓的点灯数组,然后把数组里的数据付给引脚,引脚就有了高低电平。然后就是死循环执行了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:883698 发表于 2021-3-17 19:29 | 只看该作者
去找任何一个开发板的例程,流水灯都是基础中的基础
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表