8路流水灯汇编语言程序的写法

8路流水灯汇编语言程序的写法,第1张

汇编语言程序如下:

假设1:D1~D8八个彩灯接在P1口,输出低电平发光

假设2:系统晶振为12MHz

假设3:N = 5

程序如下:

ORG 0000H

MOV R3, #5           N=5

LOOP0:

MOV A,   #0FFH     

MOV P1, #0FFH        开始时全灭

-------------------------------逐个点亮

MOV R2, #8

LOOP1: CLR C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP1

-------------------------------逐个熄灭

MOV R2, #8

LOOP2: SETB C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP2

-------------------------------全亮、全灭交替

MOV R2, #4

LOOP3: MOV P1, #0           全亮

CALL DL500MS

CALL DL500MS           共1s

MOV P1, #255         全灭

CALL DL500MS           0.5s

DJNZ R2, LOOP3

-------------------------------

DJNZ R3, LOOP0

MOV P1, #01001001B   5、显示为0100 1001

CALL DL500MS

CALL DL500MS           共1s

SJMP 0000H             重新开始N遍

-------------------------------延时子程序

DL500MS:

MOV R5, #9      1T

DL1:   MOV R6, #128    1T

DL2:   MOV R7, #215    1T

NOP              1T

DL3:   DJNZ R7, DL3     2T   2 * 215 = 430 T

DJNZ R6, DL2     2T   [1+1+430+2] * 128 = 55552 T

DJNZ R5, DL1     2T   [1+55552+2] * 9 = 499995 T

RET              2T   1 + 499995 + 2 = 499998 T

-------------------------------------

END

扩展资料:

实现8路流水灯的原理:

下图为主控芯片和流水灯模块的原理图。

流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。

要实现流水灯功能,只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:

P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高。

P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。   

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H复位启动

AJMP START

ORG 001BHT1中断

AJMP T1INT

定义变量========================

YSJSEQU 30H延时计数器

LEDEQU 31HLED控制缓冲器

主程序==========================

START:MOV LED,#0FEH初始化数据

MOV YSJS,#0

MOV TMOD,#10H定时器1工作于方式1,16位定时器

MOV TL1,#0B0H设置定时初值

MOV TH1,#3CH定时时间=50mS

SETB ET1使能定时器1中断

SETB TR1启动定时器1

SETB EA开总中断

MOV P1,LED初始化流水灯

LOOP:JMP LOOP循环等待中断

T1INT:PUSH PSW定时器1中断程序

PUSH ACC保护现场

MOV TH1,#3CH定时时间=50mS

MOV TL1,#0B0H

INC YSJS

PUSH ACC保护ACC

MOV A,YSJI

CJNE A,#2,QT150mS*2=100mS

MOV P1,LED

MOV A,LED

RL A累加器A的值循环左移1位

MOV LED,A

MOV YSJS,#0

QT1:POP ACC恢复现场

POP PSW

RETI返回主程序

END汇编程序结束

扩展资料:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

这个流水灯是很普通的一种花样,假设LED接P1口,程序如下:

ORG 0000H

LJMP MAIN

0RG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-50000)50毫秒定时

MOV TL0,#LOW(65536-50000)

SETB TR0

SETB ET0

SETB EA

MOV A,#0FEH

MOV P1,A

MOV R2,#20

SJMP $

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

DJNZ R2,T0E1秒未到直接退出

MOV R2,#20

RL A

MOV P1,A;1秒一变的花样流水灯。

T0E:

RETI

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7728477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存