用读DB表的方式来实现跑马灯( 8051 汇编 )

本文介绍了一种使用51单片机实现8路LED流水灯的方法,通过读取预设表格中的数据来控制LED的亮灭,形成流水灯效果。程序在Keil2环境下编译,并在深圳志博电子SP-3学习板上成功运行。

我查到的跑马灯的例子,有的是用中断,还是有用的其他的方式。

我自己想用读DB表的方式来,实现,哪一个灯亮。

在keil 2中编译成功,在深圳志博电子 sp-3学习板中运行通过。

 

;********************************************************************************
;*  标题:                                                 *
;*  文件:   ZB8LED.asm                                                          *
;*  日期:  2008-10-25                                                             *
;*  版本:  1.0 (试验通过版)可用单片机综合试验仪试验               *
;*  邮箱:  sunnf@126.com                                                      *
;*  网站:                                   *
;********************************************************************************
;*  描述:                                                                       *
;*         延时实现p1口八路LED流水灯效果 (用读表)                     *
;*                                                                              *
;*                                                                              *
;*                                                                              *
;********************************************************************************
;* 【版权】 Copyright(C)哈尔滨智科计算机应用技术开发公司                   *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;*  【技术支持】                                                                 *
;********************************************************************************

org 0060H

loop0:                              ;初始化行循环,当循环到头,则从开始再进行一次循环
MOV DPTR,#TABLE   ;把表放入数据指针中

mov a,00H                      ;指到表table中的第一个数据
mov r1,00h                     ;初始化计算0,用R1加1计数,来从表中得到当前led灯哪一个亮。
mov p1,0ffh                    ;初始化计,led灯全是灭的。

loop1:                             ;每次亮一个灯。
mov a,r1                         ;当前的亮灯位置
movc a,@a+dptr;
mov p1,a                       ;灯变化。
lcall delay                      ;延时
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
INC r1                                   ;亮灯位置加1,下一个要亮灯的位置
mov a,r1                               ;放入A中,用来作比较,如果用r1,cjne r1,#08H,loop1;不可以,现在不知如何?
cjne a,#08H,loop1                ; ;如果不是08,没有循环到头,则到loop1;如果是08则执行下行,跳转到loop0
ajmp loop0
;DJNZ A


;RET
org 00f0H
TABLE:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH          ;用来设置灯亮的位置

delay:                                   ;延时子程序 11.059Mhz,延时0.142s
 mov r7,#00
 MM:mov r6,#00
 djnz r6,$  ;
 djnz r7,MM
 ret
END
     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值