单片机原理与应用技术(二)———花样流水灯汇编语言

一、流水灯原理

     如下图所示,本实例中单片机的P1口分别与8只LED的负极相连(串联电阻防止电流过大损坏单片机),LED灯正极共接,当P1口依次输出低电平,LED灯依次被点亮,达到流水灯的效果。

二、流水灯实现代码

1.原理法

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
LJMP MAIN
ORG 0100H
MAIN:
	SETB  LED8_PIN 
	CLR    LED1_PIN 
	LCALL DELAY
	
	SETB  LED1_PIN 
	CLR    LED2_PIN 
	LCALL DELAY
	
	SETB  LED2_PIN 
	CLR    LED3_PIN 
	LCALL DELAY
	
	SETB  LED3_PIN 
	CLR    LED4_PIN 
	LCALL DELAY
	
	SETB  LED4_PIN 
	CLR    LED5_PIN 
	LCALL DELAY
	
	SETB  LED5_PIN 
	CLR    LED6_PIN 
	LCALL DELAY
	
	SETB  LED6_PIN 
	CLR    LED7_PIN 
	LCALL DELAY
	
	SETB  LED7_PIN 
	CLR   LED8_PIN 
	LCALL DELAY
	
    AJMP MAIN

DELAY:
	MOV  R7,#10H
DELAY0:
	MOV  R6,#7FH
DELAY1: 
	MOV  R5,#7FH
	DJNZ R5,$
	DJNZ R6,DELAY1
	DJNZ R7,DELAY0
	RET
	
END

 2.移位法

    可采用循环左移法或循环右移法来实现流水灯效果,指令如下:

指令名称助记符说明
循环左移RL AA中内容左移一位,位7移入位0
带进位循环左移RLC AA中内容和进位标志位Cy一起左移,位7移入Cy,Cy位移入位0
循环右移RR AA中内容右移一位,位0移入位7
带进位循环右移RRC AA中内容和进位标志位Cy一起右移,位0移入Cy,Cy位移入位7

(1)移位法实现代码

ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
	MOV R0,#08H
	MOV A,#0EFH

LOOP:
	RL  A
	MOV P1,A
	LCALL DELAY
	DJNZ R0,LOOP
	SJMP MAIN

DELAY:
	MOV  R7,#10H
DELAY0:
	MOV  R6,#7FH
DELAY1:
	MOV  R5,#7FH
	DJNZ R5,$
	DJNZ R6,DELAY1
	DJNZ R7,DELAY0
	RET
	
END

(2)实用技巧

·同样的运行结果,使用合适的指令可以大大减少代码量,节省程序空间。
·循环移位指令的应用——乘除法运算:左移1次=无符号数乘⒉运算,右移1次=有符号数除2运算。

3.查表法

ORG 	0000H
MAIN:	
	MOV		DPTR,#LED_TABLE
	MOV		R1,#42

LOOP:	
	MOV     A,R1
	MOVC	A,@A+DPTR
	MOV		P1,A
	LCALL	DELAY
	DJNZ 	R1,LOOP
	SJMP 	MAIN

DELAY:
	MOV  R7,#10H
DELAY0:
	MOV  R6,#7FH
DELAY1:
	MOV  R5,#7FH
	DJNZ R5,$
	DJNZ R6,DELAY1
	DJNZ R7,DELAY0
	RET

			
LED_TABLE:
	DB 0FFH
	DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
	DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
	DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
	DB 07EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,07EH
	DB 07EH,03CH,018H,000H,000H,018H,03CH,07EH
	DB 000H

END


 

  • 21
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值