51单片机汇编学习例程(6)——74HC573数码管篇

6.ASM6_Seg_573:    74HC573锁存器控制数码管静态显示

/**
******************************************************************************
* 	@file    	Seg573.asm
* 	@author  	Alex——小白
* 	@version 	V1.0
* 	@date    	2019.9.1
* 	@brief   	74HC573控制数码管
*	@store   	有家Proteus仿真店子
*	@Link    	https://shop484534014.taobao.com/
*	@Email	 	[email protected]
******************************************************************************
* 	@attention	All Rights Reserved  
**/

		Duan  	BIT 	P2.0	;引脚变量名
		Wei	  	BIT 	P2.1
		Val 	EQU 	30H 	;30H单元的变量名为Val,类似于i	

		ORG     0000H			;程序执行的起始地址				
		LJMP  	Main			;跳转到main函数	

		ORG     0100H			;程序跳转到0100H开始执行
	Main:	
		MOV 	Val,#00H		;用于位选循环		
		CLR		Wei				;573的位片选引脚
		CLR		Duan			;573的段片选引脚
	While:	
		MOV 	A,Val
		CJNE	A,#8,Next		;判断Val变量值是否大于7,若是则清零
		MOV 	Val,#00H
		SJMP	While			;死循环
		
	Next:
		MOV 	DPTR,#Wei_Tab	;DPTR指向数组Wei_Tab首位
		SETB	Wei				;打开控制位数码管的使能端-位选
		MOV 	A,Val			;位号赋给A
		MOVC 	A,@A+DPTR		;读取数组数Duan_Tab
		MOV 	P0,A			;数码管赋值位
		CLR		Wei				;关闭控制位数码管的使能端
		MOV 	P0,#0FFH 		;消影
		
		MOV 	DPTR,#Duan_Tab	;DPTR指向数组Duan_Tab首位
		SETB	Duan			;打开控制段数码管的使能端-段选		
		MOV 	A,Val			;段号赋给A
		MOVC 	A,@A+DPTR		;读取数组数Duan_Tab
		MOV 	P0,A 			;数码管赋值段
		CLR		Duan			;关闭段选
		MOV 	P0,#0FFH 		;消影
		LCALL 	Delay			;延时1ms			
		INC		Val
		SJMP	While			;死循环

	Delay:						;t=t1*2=1ms,修改R6的值即可更改时间(不精准)
		MOV		R6, #02H		;02H=2
	D1:						
		MOV		R7, #0FAH		;t1=250*2=500
	D2:		
		DJNZ	R7, D2			;R7=250自减,直到为0跳出循环,双周期
		DJNZ	R6, D1			;R6=020自减,直到为0跳出循环,双周期
		RET

	Duan_Tab:
		DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH		
	Wei_Tab:
		DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
	END	

如需其他代码,请联系QQ844545015

发布了14 篇原创文章 · 获赞 1 · 访问量 5004

猜你喜欢

转载自blog.csdn.net/Smile_shao/article/details/103757457