本节书摘来自异步社区《51单片机应用开发从入门到精通》一书中的第2章,第2.2节,作者 张华杰,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 跑马灯实例

在上一节点亮1只LED的基础上,让我们来看看如何控制多只LED实现跑马灯效果。

2.2.1 硬件电路图

本实例中,硬件电路和上一节的硬件电路相似,为了实现跑马灯,本实例电路连接了8只LED,原理电路图如图2-2所示。

2.2.2 软件程序设计

控制多只LED实现跑马灯效果可以有多种实现方式,下面给出其中两种,请对比这两种实现方式的优劣。

1.程序全貌

首先,使用上节学习的直接寻址位置1指令SETB bit和直接寻址位清0指令CLR bit控制P1口实现跑马灯效果,以下为程序实例。

;-----------------------------------
;                   跑马灯实例
;功能:循环轮流点亮8只发光管LED
;-----------------------------------
LED1_PIN EQU  P1.0
LED2_PIN EQU  P1.1
LED3_PIN EQU  P1.2
LED4_PIN EQU  P1.3
LED5_PIN EQU  P1.4
LED6_PIN EQU  P1.5
LED7_PIN EQU  P1.6
LED8_PIN EQU  P1.7
ORG 0000H    ;伪指令,指定程序从0000H开始存放
LJMP  MAIN    ;跳转指令,程序跳转到MAIN处
ORG 0100H    ;伪指令,指定以下程序从0100H开始存放
MAIN:MOV SP,#60H   ;给堆栈指针赋初值MOV P1,#0FFH   ;给P1赋初值,LED全灭             (1)
LIGHT:               CLR  LED1_PIN  ;清零P1.0,LED1亮                (2)LCALL DELAY  ;调延时子程序                       (3)SETB LED1_PIN   ;置一P1.0,LED1灭               (4)CLR  LED2_PIN  ;清零P1.1,LED2亮                (5)LCALL DELAY  ;调延时子程序                       (6)SETB LED2_PIN   ;置一P1.1,LED2灭                (7)CLR  LED3_PIN  ;清零P1.2,LED3亮                 (8)LCALL DELAY  ;调延时子程序                        (9)SETB LED3_PIN   ;置一P1.2,LED3灭                (10)CLR  LED4_PIN  ;清零P1.3,LED4亮                 (11)LCALL DELAY  ;调延时子程序                       (12)SETB LED4_PIN   ;置一P1.3,LED4灭                (13)CLR  LED5_PIN  ;清零P1.4,LED5亮                 (14)LCALL DELAY  ;调延时子程序                       (15)SETB LED5_PIN   ;置一P1.4,LED5灭                (16)CLR  LED6_PIN  ;清零P1.5,LED6亮                 (17)LCALL DELAY  ;调延时子程序                       (18)SETB LED6_PIN   ;置一P1.5,LED6灭                (19)CLR  LED7_PIN  ;清零P1.6,LED7亮                 (20)LCALL DELAY  ;调延时子程序                       (21)SETB LED7_PIN   ;置一P1.6,LED7灭                (22)CLR  LED8_PIN  ;清零P1.7,LED8亮                 (23)LCALL DELAY  ;调延时子程序                       (24)SETB LED8_PIN   ;置一P1.7,LED8灭                (25)AJMP LIGHT   ;跳转,程序继续                     (26)
;延时子程序
DELAY: MOV R7,#10H
DELAY0: MOV R6,#7FH
DELAY1: MOV R5,#7FHDJNZ R5,$DJNZ R6,DELAY1DJNZ R7,DELAY0RET
END

本实例也可使用循环左移指令和循环右移指令来实现跑马灯效果,循环左移指令和循环右移指令的功能见表2-6。

(1)~(26)程序替换为如下程序,运行结果不变。

LIGHT:MOV R0,#08H  ;给R0赋初值08H,循环右移8次MOV A,#0FEH  ;给A赋初值0FEH,即11111110
LOOP:RR  A  ;右移1位 MOV P1,A   ;输出显示 LCALL DELAY ;调延时子程序 DJNZ R0,LOOP  ;循环右移8次SJMP LIGHT  ;跳转,程序继续

2.运行结果

该实例的运行结果为8只LED循环轮流点亮。

2.2.3 技巧总结

本实例技巧总结如下:

  • 同样的运行结果,使用合适的指令可以大大减少代码量,节省程序空间。
  • 循环移位指令的应用——乘除法运算:左移1次 = 无符号数乘2运算,右移1次 = 有符号数除2运算。

《51单片机应用开发从入门到精通》——2.2 跑马灯实例相关推荐

  1. 《51单片机应用开发从入门到精通》——2.6 中断控制功能的作用

    本节书摘来自异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.6节,作者 张华杰,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.6 中断控制功 ...

  2. 《51单片机应用开发从入门到精通》——1.1 单片机开发流程

    本节书摘来异步社区<51单片机应用开发从入门到精通>一书中的第1章,第1.1节,作者:张华杰 ,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.1 单片机开发流 ...

  3. 《51单片机应用开发从入门到精通》——2.11 歌曲演奏实例

    本节书摘来异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.11节,作者:张华杰 ,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.11 歌曲演奏 ...

  4. 51单片机STC 89C52RC进阶 – 两片74HC595D串联实现跑马灯

    芯片概述(回忆) STC 89C52RC电气特性 管脚定义 管脚符号 管脚序号 管脚含义 备注 T2/P1.0 ~ P1.7 1 ~ 8 带内部上拉电阻的8位双向I/O口 可输入或输出数据.同时可做定 ...

  5. 51单片机程序开发入门知识

    51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...

  6. pythonweb开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  7. Mac版下实现51单片机进行开发的环境搭建

    目录 前言 简单介绍一下51单片机吧 一.安装homebrew 二.内核编译器 sdcc 安装 三.安装CH341驱动 四.烧录程序stcgal的安装 1.python3下载安装并配置环境 2.验证是 ...

  8. [分享] 新书推荐 -《黑莓(BlackBerry)开发从入门到精通》 | 黑莓时光

    今天看到一本刚出版不久的书,<黑莓(BlackBerry)开发从入门到精通>,属于技术类书籍,通过 18 章的内容,介绍了BlackBerry 开发平台简介.BlackBerry 开发平台 ...

  9. python web 开发教程下载_Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

最新文章

  1. 【Java挠头】Java异常、捕获、处理、throw、throws等绝妙剖析
  2. java hive 查询语句,使用java连接hive,并执行hive语句详解
  3. MySQL百一题库_「灵魂拷问」MySQL面试高频一百问(工程师方向)
  4. .Net Crank性能测试入门
  5. 最惨2019:超300家创业公司死亡名录
  6. 没有一款趁手的数据监控软件?试一下NetData不,用了你就绝对离不开他!
  7. Python numpy基础知识
  8. 信安从业者认证一览【建议收藏】
  9. 表达式类型错误oracle,PL/SQL编译错误 - PLS-00382:表达式类型错误
  10. K8S学习之Statefulset
  11. Windows程序设计-剪贴板
  12. 用Websocket聊天完整demo,做笔记用,各位大佬多多指教
  13. 机器学习笔记 - 使用Keras Tuner进行自动化超参数调整
  14. 浅谈游戏数据分析---留存篇一-留存折损
  15. 牛客网剑指offer(Python版)
  16. SQL Server数据库T-SQL学习
  17. Golang和HTTPS在网站前端接入里的作用
  18. 山东大学单片机原理与应用实验 C语言程序实验
  19. 何海涛算法面试题感悟之四:二元树…
  20. 哈工大 计算机系统 大作业 2021春

热门文章

  1. Effective Java实作toString() - 就是爱Java
  2. 序列化和反序列化的几种方式(DataContractSerializer)(二)
  3. CSS+DIV-制作实用菜单
  4. SpringBoot整合Swagger测试api构建
  5. js插件---IUpload文件上传插件(包括图片)
  6. SpringBoot优雅编码之:Lombok加持
  7. 借力大数据 物流迈向智能化
  8. CSS3 overflow-x 属性
  9. node - 非阻塞的异步 IO
  10. GitLab 8.3.3 发布 开源代码管理