我查到的跑马灯的例子,有的是用中断,还是有用的其他的方式。
我自己想用读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
本文介绍了一种使用51单片机实现8路LED流水灯的方法,通过读取预设表格中的数据来控制LED的亮灭,形成流水灯效果。程序在Keil2环境下编译,并在深圳志博电子SP-3学习板上成功运行。
868

被折叠的 条评论
为什么被折叠?



