汇编语言程序如下:
假设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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)