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

2.2 跑马灯实例

51单片机应用开发从入门到精通
在上一节点亮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,#7FH
   DJNZ R5,$
   DJNZ R6,DELAY1
   DJNZ R7,DELAY0
   RET
END```
本实例也可使用循环左移指令和循环右移指令来实现跑马灯效果,循环左移指令和循环右移指令的功能见表2-6。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/a1f100ae930b60d6fe3f3dae235c0bf9091d565f.png" width="" height="">
</div>

(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运算。

时间: 2024-10-29 15:06:28

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

《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

2.4 延时时间计算实例 51单片机应用开发从入门到精通 在单片机的实时控制系统中,常常需要用到延时操作,所以,延时子程序往往是编写单片机程序中不可缺少的一部分.延时方法有硬件延时和软件延时,硬件延时将在后面有关章节中介绍,本节将介绍软件延时方法. 所谓软件延时,就是让计算机重复执行一些无具体任务的程序,利用执行程序的时间来达到延时的目的. 2.4.1 机器周期和指令周期 单片机读.写操作都需要消耗一定的时间,机器周期是指单片机完成一个基本操作所用的时间,如读操作.写操作等.当石英晶体为12MH

《51单片机应用开发从入门到精通》——2.9 交通灯实例

2.9 交通灯实例 51单片机应用开发从入门到精通 定时器/计数器是单片机中最常用.最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用方法,并复习如何使用上节学习的散转程序. 本节首先介绍交通灯的基础知识以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的编程以及程序的全貌,最后将总结一下本实例的技巧与注意点. 2.9.1 基础知识 交通灯控制器实例主要使用了8051单片机的定时器/计数器,本实例的基础知识主要包括:交通灯的变化规律.定时器/计数器的概念

《51单片机应用开发从入门到精通》——2.10 变频报警实例

2.10 变频报警实例 51单片机应用开发从入门到精通 本实例是用软件延时方法实现变频振荡报警,即用P3.4端口输出1kHz和2kHz的变频信号以示报警,每隔1s交替变换1次.本节硬件设计与上节相同. 2.10.1 程序设计 本程序利用软件延时方法,使P3.4端口输出1kHz和2kHz的变频信号,每隔1s交替变换1次. 1.流程图 程序设计流程如图2-16所示. 2.程序 汇编语言编写的变频报警源程序FS02.ASM代码如下: 01: MAIN: MOV R1,#8 ;1kHz持续时间 02:

《51单片机应用开发从入门到精通》——导读

前言 51单片机应用开发从入门到精通 随着微处理器技术和SoC技术的发展,从较早的4位机到8位机,一直发展到现在的32位机,单片机的应用逐渐渗透到生产.生活的各个领域.本书主要针对MCS-51体系单片机,从硬件.软件两个方面的基础知识开始进行介绍.MCS-51体系单片机由于具有简单易学.稳定性好.成本低等优点,在工业控制.家用电器.汽车电子乃至航天电子等许多领域都有着重要的应用. 本书主要针对初.中级读者群,通过众多的实例介绍单片机开发的基础知识.基本工具.基本过程及简单应用,既方便初学者入门,

《51单片机应用开发从入门到精通》——1.3 Keil uVision2集成开发环境

1.3 Keil uVision2集成开发环境 51单片机应用开发从入门到精通 uVision2 IDE是Keil software公司的产品,它集项目管理.编译工具.代码编写工具.代码调试以及完全仿真于一体,特别适用于个人开发或者人数少.对开发过程的管理还不成熟的开发团体.这一功能强大的软件提供简单易用的开发平台,可以让开发者在开发过程中集中精力于项目本身,加快开发速度. 1.3.1 uVision2介绍 uVision2的界面窗口如图1-13所示,该软件提供了丰富的工具,常用命令都具有快捷工

《51单片机应用开发从入门到精通》——1.5 测试方法和工具

1.5 测试方法和工具 51单片机应用开发从入门到精通 完成一个用户样机,首先要完成硬件组装工作,然后进入软件设计.调试和硬件调试阶段.硬件组装就是在设计.制作完毕的印制板上焊好元件与插座,然后就可用仿真开发工具进行软件设计.调试和硬件调试工作. 1.用户样机软件的设计.调试 用户样机软件设计.调试的过程如图1-25所示,可为以下几个步骤. 第一步,建立用户源程序.用户通过开发系统的键盘.CRT显示器及开发系统的编辑软件,按照所要求的格式.语法规定,把源程序输入到开发系统中,并存在磁盘上. 第二

《51单片机应用开发从入门到精通》——2.1 简单点亮发光二极管实例

2.1 简单点亮发光二极管实例 51单片机应用开发从入门到精通 单片机最简单的实例之一就是点亮发光二极管(LED)闪烁.本节通过点亮1只发光二极管的实例来介绍单片机的I/O口操作. 本节首先介绍单片机I/O口结构的基础知识,接着介绍实例的硬件电路,然后给出了实例程序,最后将分析操作单片机的I/O口的技巧与注意点. 2.1.1 基础知识 8051单片机有4个并行I/O口:P0-P3.这4个I/O口中只有P0口是真正的双向口,P1-P3是准双向口,P3口还具有第二功能,为系统提供一些控制信号.4个并

《51单片机应用开发从入门到精通》——2.7 中断的控制及设置

2.7 中断的控制及设置 51单片机应用开发从入门到精通中断系统结构如图2-6所示,从图可见,中断控制的实质是对4个特殊功能寄存器TCON.SCON.IE和IP进行管理和控制.只要按照人们的要求对这些寄存器的相应位进行设置(存入0或1,一般设置1为开通),就能完成对中断的有效管理和控制. 2.7.1 中断允许控制寄存器IE 1.IE的格式及位的含义寄存器IE的地址为A8H,作用是控制各中断源的开放与关闭.它实行两级控制,IE中有个总的控制位EA,当EA = 0时,屏蔽所有的中断请求:而当EA =

《51单片机应用开发从入门到精通》——2.12 电子琴

2.12 电子琴 51单片机应用开发从入门到精通本实例是采用44矩阵式键盘设计出16个音符,随意弹奏. 2.12.1 硬件设计 电子琴电路设计如图2-19所示. 单片机P3为输入端口,接有44矩阵式键盘,键盘上标出16个音符.键盘的4条行线的一端与单片机P3端口的P3.0.P3.1.P3.2和P3.3口相接,另一端通过上拉电阻接到 + 5V上:4条列线的一端与P3端口的P3.4.P3.5.P3.6和P3.7口相接.单片机的P2.4端口为输出端,通过限流电阻R1与三极管基极相接,三极管的集电极接有