前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单片机入门:LED双向流水灯

单片机入门:LED双向流水灯

作者头像
电子工程师成长日记
发布于 2022-07-21 07:28:05
发布于 2022-07-21 07:28:05
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

学习了LED灯的左移和右移后,下面实现LED灯的双向移动点亮。

硬件电路设计

结合51单片机最小系统的知识,利用AD19画好最小系统电路(未包括电源部分)。

本设计需要实现8个LED灯的循环点亮。LED(发光二极管)正极接+5V电源,负极接单片机P1口,这样只要单片机P1口输出高低电平就可以导通二极管,实现LED灯的点亮与熄灭。

仿真电路设计

仿真电路图与AD原理图画法一致,但应注意仿真最小系统复位电路中电容值取0.1uf,电阻值取100Ω,与AD原理图中有所区别。

程序设计

程序采用Keil5设计,8位LED左移右移点亮的程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*-----------------------------------------------
  名称:IO口高低电平控制
  内容:先右移点亮LED灯,再左移点亮,实现LED双向移动

------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>    //因为要用到左右移函数,所以加入这个头文件

#define led P1     //将P1口定义为led 后面就可以使用led代替P1口


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                
  unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
  unsigned char j;  //定义一个无符号字符型局部变量 j 取值范围 0~255
  led=~0x80;
  Delay(50000); //大约延时450ms  
  while(1)
  {  
    for(i=0;i<8;i++)
    {
      P1=~(0x80>>i);   //右移i位,然后将结果赋值到P1口
      Delay(50000); //大约延时450ms
    }
    for(j=0;j<8;j++)
    {
      P1=~(0x01<<j);   //右移j位,然后将结果赋值到P1口
      Delay(50000); //大约延时450ms
    }
  }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(t--);
}

仿真实现

为了直观感受本设计实现的效果,这里利用protues8.7仿真实现LED灯双向移动点亮,具体如视频所示。

http://mpvideo.qpic.cn/0b78emaaeaaaxeafdnc6gvpvai6dairqaaqa.f10002.mp4?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子工程师成长日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
21.3 Java 线程池
线程是在一个进程中可以执行一系列指令的执行环境,或称运行程序。多线程编程指的是用多个线程并行执行多个任务。当然,JVM 对多线程有良好的支持。
acc8226
2022/05/17
3710
21.3 Java 线程池
(九)线程池异常捕获
上一篇提到了使用ThreadFactory的UncaughtExceptionHandler去捕获线程池的错误,还有没有其他方法呢?
HaC
2020/12/30
1.7K0
线程的创建、Lambda函数式接口?Runnable和Callable之间的适配?动态修改线程任务?这里带你图解Java线程池
这里为了便于叙述,毕竟不是本次的重点,我直接上源码,没基础的可以去找些其他资料来补一补
Karos
2023/08/11
9130
线程的创建、Lambda函数式接口?Runnable和Callable之间的适配?动态修改线程任务?这里带你图解Java线程池
Java多线程学习(八)线程池与Executor 框架
Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide
用户2164320
2018/07/08
1.1K0
Java多线程学习(八)线程池与Executor 框架
Java中的Runnable、Callable、Future、FutureTask的区别
Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。
开发者技术前线
2020/11/23
4620
Java的Executor框架和线程池实现原理
Executor接口是Executor框架中最基础的部分,定义了一个用于执行Runnable的execute方法,它没有实现类只有另一个重要的子接口ExecutorService
全栈程序员站长
2022/11/17
4760
Java的Executor框架和线程池实现原理
(六)ThreadPoolExecutor自定义线程池
上一篇中提到四种线程池的创建方式,最后还是会 new ThreadPoolExecutor(),所以 我们可以使用 new ThreadPoolExecutor()的方法创建自定义的线程。
HaC
2020/12/30
3.4K0
创建线程都有哪些方式?— Callable篇
相信大家回答这个问题没什么难度吧?通常问完创建方式,那么接下来就是问「1、2」跟「3」创建方式的不同了,只要说出「3」有返回值基本这个问题就过了,不管是出于好奇还是疑惑,我们今天来会会这个Callable。
niceyoo
2020/07/26
8010
Java-多线程框架Executor
在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。
小小工匠
2021/08/17
5020
JAVA线程池学习,ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别?
ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。
爱撸猫的杰
2019/03/28
14.8K0
JAVA线程池学习,ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别?
jdk中的简单并发,需要掌握
    小时候有一次爸爸带我去偷村头别人家的梨子,我上树摘,爸爸在下面放风,正摘着主人来了,爸爸指着我破口大骂:臭小子,赶紧给我滚下来,敢偷吃别人家梨子,看我不打死你。主人家赶紧说:没事没事,小孩子淘气嘛,多摘点回家吃。我……这坑儿子的爹...
青石路
2019/02/25
4080
jdk中的简单并发,需要掌握
理解线程池,看这篇足够了。
线程池详解 什么是线程池 线程池的处理流程 前面提到的 ThreadPoolExecutor 构造函数的参数,分别影响以下内容: 线程池中使用的队列是 BlockingQueue 接口,常用的实现有如下几种: JDK 为我们内置了五种常见线程池的实现,均可以使用 Executors 工厂类创建。 1.newFixedThreadPool 2.newSingleThreadExecutor 3.newCachedThreadPool 4.newScheduledThreadPool ScheduledThre
海仔
2019/08/06
8260
Runnable和Callable源码及应用解析
里面使用Runnable的地方只有传递对象的时候,其他都是使用的Thread而Thread又实现了我们的Runnable,所以Runbale可以理解为执行代码的对象,执行的过程和线程的操作交由Thread控制,Thread源码可以看 ----》Thread源码解析。
余生大大
2022/11/02
1990
Runnable和Callable源码及应用解析
java多线程系列:Executors框架
Executor是一个接口,里面提供了一个execute方法,该方法接收一个Runable参数,如下
云枭
2019/02/28
5930
2 w字长文带你深入理解线程池
线程池可以说是 Java 进阶必备的知识点了,也是面试中必备的考点,可能不少人看了这篇文章后能对线程池工作原理说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打,考虑如下问题:
kunge
2020/11/11
5820
2 w字长文带你深入理解线程池
面试-线程池的成长之路
线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。
猿天地
2018/07/25
6450
Java多线程编程:Callable、Future和FutureTask浅析(多线程编程之四)「建议收藏」
java多线程-概念&创建启动&中断&守护线程&优先级&线程状态( 多线程编程之一) java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()( 多线程编程之二) java&android线程池-Executor框架之ThreadPoolExcutor&ScheduledThreadPoolExecutor浅析(多线程编程之三) Java多线程:Callable、Future和FutureTask浅析(多线程编程之四)
全栈程序员站长
2022/07/04
3000
Java多线程编程:Callable、Future和FutureTask浅析(多线程编程之四)「建议收藏」
Java并发编程--ThreadPoolExecutor
  合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。——摘自http://www.infoq.com/cn/articles/java-threadPool。
在周末
2019/08/26
7770
Java并发编程笔记——J.U.C之executors框架:executors框架设计理念
juc-executors框架是整个J.U.C包中类/接口关系最复杂的框架,真正理解executors框架的前提是理清楚各个模块之间的关系,高屋建瓴,从整体到局部才能透彻理解其中各个模块的功能和背后的设计思路。
须臾之余
2019/07/26
5790
Java并发编程笔记——J.U.C之executors框架:executors框架设计理念
【死磕Java并发】-----J.U.C之线程池:线程池的基础架构
原文出处http://cmsblogs.com/ 『chenssy』 经历了Java内存模型、JUC基础之AQS、CAS、Lock、并发工具类、并发容器、阻塞队列、atomic类后,我们开始JUC的最
用户1655470
2018/04/26
6570
【死磕Java并发】-----J.U.C之线程池:线程池的基础架构
推荐阅读
相关推荐
21.3 Java 线程池
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档