⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlleds.asm

📁 十五个关于AT89S51的源代码
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;实例五:流水控制灯  controllable LEDs  (《51单片机应用从零开始》 4.2小节实例)
;
;现象:P1口上的发光二极管发光,当按下按键S6或S7时,发光二极管向左或向右流动
;
;作者:杨欣,刘长焕,张延强  电路飞翔网    eedesign@163.com
;
;				http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


		ORG		00H
START:				;这部分是系统的初始化部分
		MOV		A,#0FFH		; 累加器ACC中8位全置1(FFH),发光二极管全熄灭
		CLR   		C		; 进位CY被清0,CY=0
		MOV     	R1,#8		; R1=8,循环8次(左/右移8次)
		MOV	    	P1,#00H		; 8支发光二极管全亮
		MOV		P2, A		; P2作输入口,先将其各位置1(参考3.1小节)

WAIT_A:			;这是循环等待按钮A按下的程序
		JB		P2.4,WAIT_B	;如果按钮S7没有按下,查询按钮S6有没有按下 
		JMP		LEFT		;如果按下按钮S7,就执行向左流动的程序

WAIT_B:			;这是循环等待按钮B按下的程序
		JB		P2.5,WAIT_A	;如果按钮S6没有按下,返回继续查询按钮S7有没有按下
		JMP		RIGHT		;如果按下按钮S6,就执行向右流动程序

LEFT:				;这是流水灯向左流动的程序
		RLC		A		;把进位CY=0在累加器ACC中从右向左移一位,对照矩阵理解
		MOV		P1,A		;输出至P1口
		CALL   		DELAY		;调延时子程序,延时200ms
		DJNZ    	R1,LEFT		;R1减1,如果不为0跳回LEFT继续左移,否则执行下一行
		JMP		START		;向左流动完成后,跳回初始状态,全亮,并等待按下按钮

RIGHT:				;这是流水灯向右流动的程序
		RRC     	A		;把进位CY=0在累加器ACC中从左向右移一位
		MOV     	P1,A		;输出至P1口
		CALL    	DELAY		;调延时子程序,延时200ms
		DJNZ    	R1,RIGHT	;是否右移了8次,如果不是则跳回RIGHT继续右移
		JMP     	START		;向右流动完成后,跳回初始状态,全亮,并等待按下按钮

DELAY:				;延时200ms的子程序
		MOV     	R3,#20		
D1:
		MOV     	R4,#20
D2: 
		MOV     	R5,#248
		DJNZ    	R5,$		;R5减1,如果不为0,就执行本行
		DJNZ    	R4,D2
		DJNZ    	R3,D1
		RET				;子程序结束标志,返回主程序
		END				;程序结束点

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -