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

📄 显示器.txt

📁 一段用汇编语言完成的程序 非常好用 用于显示器的实现
💻 TXT
字号:
DBUF	EQU	39H		
		DCNT	EQU	50H		;定义DBUF ,DCNT
		ORG	0				;程序起始偏移量

MAIN:	MOV	SP,		#6FH	;将堆栈指针置初值
       	MOV	DCNT,	#20H	;立即数20H送入DCNT 即50H
		MOV	R7,		#6		;设置循环次数,用R7记录	
		MOV	R0,		#DBUF	;将 39H送R0
		CLR		A				;清累加器内容
								
MLP0:	MOV	    @R0,	A		;R0指向的地址的内容清零
								;在循环中对39H~3EH的内存地址清零
								;39H~3EH用于存显示值
		INC		R0				;指针加1,指向下一地址
		DJNZ	R7,		MLP0	;循环6次
		MOV 	DPTR,	#5FFFH	;将8279命令口地址送DPTR
MOV     A,      #0DCH	;设定8279的控制字110 11100B,将显示RAM置为全1
		MOVX	@DPTR,	A		;送控制字

LP:		MOVX 	A,		@DPTR	;读8279状态字
		JB		ACC.7,	LP		;判断ACC最高位为1回到上一步
MOV     A,      #00H    ;设定8279的控制字000 00000B,左进方式,显示8
个字符,二键锁定,编码扫描
		MOVX	@DPTR,	A		;送控制字
MOV     A,     #2AH    ;设定8279的控制字001 01010B,将系统时钟分频至
100kHz的10倍
		MOVX	@DPTR,	A		;送控制字
MLP1:	LCALL 	DIR				;调用显示子程序
		DJNZ 	DCNT,	MLP1	;如果DCNT减1为0,则继续,否则跳转到MLP1。
;通过循环显示使字型稳定
		MOV 	DCNT,	#20H	;立即数20H送入DCNT 即50H
								;下面是计数循环,从39H开始,按数位依次累加
CONT:	MOV	    R0,		#DBUF	;立即数39H送R0
		MOV 	R7,		#6		;R7为循环计数,循环6次
CNT1:	MOV 	A,		@R0	    ;得到R0指向的地址中的内容用于累加
		CLR 	C				;进位位清零
		ADDC 	A,		#01H	;将A中内容带进位加1
		①SUBB  A,      #01H  ;将A中内容带进位减1,扩展实验1中相对原程序的改变
DA		A				;调整A为10进制
		CJNE	A,	#0AH,	$+3	;如果A中内容不等于10,将进位位置位
		JNC 	CNT2			;如果进位为0,跳转到CNT2,否则继续
		MOV 	@R0,	A		;将A内容移到R0所指的地址
		LCALL 	DEEE			;调用延时子程序
		SJMP	MLP1			;跳转到MLP1	
CNT2:	CLR		A				;如果有进位,清A
		MOV 	@R0,	A		;将A内容移入到R0所指向的地址
		INC 	R0				;R0加1,指向下一个地址,处理当前R0指向的地
址加1后的进位
		DJNZ 	R7,		CNT1	;循环,R7减1不为0跳转到CNT1
		LCALL	DEEE			;调用延时子程序
		SJMP 	MLP1			;跳转到MLP1
		;显示子程序
DIR:	MOV 	R2,		#06H	;顺次显示6个LED,循环次数6送R2
		MOV 	DPTR,	#5FFFH	;将8279命令口地址送DPTR
	MOV 	A,		#92H	;设A为8279写显示RAM命令100 10010B,自动地址
                              递增,从RAM中的2H地址开始
		MOVX 	@DPTR,	A	    ;送控制字
		MOV	R0,		#39H	    ;立即数39H送R0,6位显示值的首地址
TY11:	MOV DPTR,#TABL		    ;将表格TABL的表地址送入16位数据指针
		MOV 	A,		@R0   	;将R0指向的地址的内容送A
		MOVC 	A,		@A+DPTR	;在表格内查找显示码
		MOV 	DPTR,	#5EFFH	;将8279数据口地址送DPTR
		MOVX 	@DPTR,	A	    ;送显示数据到8279
		INC 	R0				;将偏移量加1,以查找下一个显示数据
		DJNZ 	R2,		TY11	;循环6次,如果没有显示完,则跳转到TY11
		RET 					;子程序返回
		                        ;延时子程序,共做4×255×255的空循环
DEEE:	MOV 	R5,		#04H	;一条语句平均延时1毫秒,延时次数4H送R5
DEE3:	MOV 	R1,		#0FFH	;延时次数0FFH送R1
DEE1:	MOV 	R4,		#0FFH	;延时次数0FFH送R4
DEE2:	DJNZ 	R4,		DEE2	;R4减1为0则继续,否则跳转到DEE2
		DJNZ 	R1,		DEE1	;R1减1为0则继续,否则跳转到DEE1
		DJNZ 	R5,		DEE3	;R5减1为0则继续,否则跳转到DEE3
		RET						;子程序返回		                        
TABL:	DB 0C0H,0F9H,0A4H,0B0H	;数据表格,存储对应的LED灯显示码
		DB 99H,92H,82H,0F8H,80H ;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,P,U
		DB 90H,88H,83H,0C6H,0A1H;H,L,Y,8, ,
		DB 86H,8EH,8CH,0C1H,89H
		DB 0C7H,0BFH,91H,00H,0FFH
		END					 

⌨️ 快捷键说明

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