LED点阵多字符滚动显示(汇编语言)

;拓展——LED点阵多字符滚动显示
ORG 0000H
SJMP MA			 ;跳转主程序		
ORG 001BH
LJMP TIME_1		;跳转中断程序	
MA:              
	         MOV TMOD,#01H 		;使用计时方式1
	         MOV R2,#00H			;595寄存器(P3.4)查表计数累加
	         MOV R7,#00H			;滚动屏显示累加位
	         MOV R6,#00H			;计时0.6s判断位
	         MOV R5,#00H			;p0查表初始位
	         CLR C
	         MOV TH1,#02H		;计时器初值60ms
	         MOV TL1,#18H
	         SETB TR1			    ;开计时器
MAIN:                 ;单字符显示子程序
	          JB TF1,TF_1       
TTT:
	          CLR P3.5   
	          MOV R1,#00H			 ;循环计数(行,595移位寄存器赋值)
	          MOV DPTR,#TAP_ROW 	    ;P1.2查表
	          MOV A,R2
	          MOVC A,@A+DPTR
	          MOV R0,A			 ;从表中取出595寄存器存储的数据
	          MOV DPTR,#TAP_CUL 	  ;p0查表
	          MOV A,R5
	          MOVC A,@A+DPTR
	          MOV R3,A			  ;将查表得到的P0I/O数据给R3
	          INC R2				  ;INC加一操作:累加
	          INC R5
LOOP:
	          INC R1		 		 ;计数累加
	          CLR P3.6	 		    ;P3.6时钟引脚,时钟方波起始状态
	          MOV A,R0	 		;(A)<-(R0)
	          RRC A		 		; 带进位右移函数
	          MOV R0,A	 		;重新将右移后的数据给R0
	          JC SETB_1	;判断移位后Cy得到的数据是否为1,为1跳转存1程序
	          SJMP CLR_0			 ;为0跳转存0程序
SETB_1:
	          SETB P3.4	  		 ;P3.4串行输送口,输出1
	          LCALL TIME_1MS		;调用延时1ms子程序
	          SETB P3.6	 		 ;P3.6时钟上升沿595芯片存入数据 1
	          SJMP LUUP 	  		;跳转判断右移次数
CLR_0:
	          CLR P3.4	  		;P3.4输出0
	          LCALL TIME_1MS		
	          SETB P3.6	  		;存入数据 0
	          SJMP LUUP	  	;跳转判断右移次数	
LUUP:
	          CJNE R1,#08H,SU		;判断右移和寄存次数是否满8次
	          SJMP SU		 		;右移和寄存次数等于8次复位
SU:
	          JC LOOP				;计数等于和大于8顺序执行,小于8循环
	          SETB P3.5		 	  ;串行数据传输完毕清零寄存器
	          CJNE R2,#09H,SUU 	;判断 是否查表超过7次,小于或大于7次跳转
SUU:
	          JC MM			 	;小于7次跳转初始化
	          MOV R2,#00H		 	;大于7次清零R2
	          MOV A,R7			;将R7的值给R5,格式化P0查表初始值
	          MOV R5,A
	          MOV P0,#0FFH		;给P0口高电平,实现消隐操作
	          LCALL TIME_1MS
	          LJMP MAIN		 	;跳转循环主函数
MM:
	          MOV P0,R3		  	;给p0赋值
	          LCALL TIME_10MS	  	;延时0.5ms
	          MOV P0,#0FFH	  	;断开p0消隐
	          LJMP MAIN		  	;跳转循环

TF_1:				  ;滚动屏刷新子程序
	          CLR TF1			  	;清楚计时器1溢出位
	          INC R6			  	;R6累加用于判断计时是否满0.6s
	          CJNE R6,#0AH,UULL;满0.6s开启一次定时中断,实现滚动一行LED屏幕
UULL:               
	          JC LUO	;从程序开始字符显示时间小于0.6s,跳转赋值计时器初值再次	
	       SJMP YUY;字符显示时间达到0.6s跳转开启中断,并赋值计时器初值等待中断
LUO:
	          MOV TH1,#02H		;计时器赋初值
	          MOV TL1,#18H		
	          SETB TR1			;打开计时器,开始计时
	          LJMP TTT			;返回调用地址
YUY:
	          SETB EA				;开总总中断
	          SETB ET1			  ;开定时器中断
	          LJMP TTT			  ;返回调用地址
 
TIME_1:				 ;定时器中断程序
	          PUSH ACC		 ;压栈ACC
	          PUSH PSW	   	 ;压栈状态字
	          CLR EA			;关总中断
	          CLR ET1			 ;关定时器1中断
	          CLR TF1			 ;清楚定时器1中断标志位
	          INC R7			 ;R7累加,确定查表初始位
	          CJNE R7,#058H,UO  ;改变字符数,R7的最大值
UO:
	          JC LO			 ;未循环遍历所有表格元素跳转继续遍历循环
	          MOV R7,#00H		;循环遍历完所有元素,清零R7从头开始循环
LO:
	          MOV TH1,#02H	 ;计时器初值赋值,60ms
	          MOV TL1,#18H
	          MOV R6,#00H
	          SETB TR1
	          POP PSW			;出栈程序状态字
	          POP ACC			 ;出栈Acc累加器
RETI
 
TIME_1MS:			 ;延时0.1MS程序
	          MOV TH0,#0FFH
	          MOV TL0,#09CH
	          SETB TR0
	          JNB TF0,$
	          CLR TF0
RET
TIME_10MS:			 ;延时0.2MS程序
	          MOV TH0,#0FFH
	          MOV TL0,#038H
	          SETB TR0
	          JNB TF0,$
	          CLR TF0
RET
TIME_1S:      MOV   R7,#20    ;延时0.5S子程序 ,调试阶段使用
DL1:          MOV   R6,#80
DL2:          MOV   R5,#248
              DJNZ  R5,$
              DJNZ  R6,DL2
              DJNZ  R7,DL1
              RET
TAP_ROW:      DB 80H,40H,20H,10H,08H,04H,02H,01H	;行点亮编码表
TAP_CUL:
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,081H,0E7H,0E7H,0E7H,0E7H,0E7H,0E7H,0C3H,0FFH,0FFH,0E7H,0C3H,081H,081H,00H,018H,03CH,03CH,0FFH,0FFH,081H,081H,099H,099H,099H,099H,099H,099H,0FFH,0FFH,0BDH,0BDH,0BDH,09DH,0A3H,0BFH,0BFH,0BFH,0FFH,0FFH,0FFH,0C5H,0BAH,0BBH,0BBH,0C3H,0FBH,0C7H,0FFH,0FFH,0BFH,0BFH,0BFH,0BFH,087H,0BBH,0BBH,087H,0FFH,0FFH,0BFH,0BFH,0BFH,0BFH,087H,0BBH,0BBH,087H,0FFH,0FFH,0E7H,0DBH,0FBH,0FBH,0E3H,0DBH,0DBH,0DBH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH  ;列点亮编码表
END

LED点阵多字符滚动显示硬件调试结果: 

 LED点阵多字符滚动显示(汇编语言)_第1张图片

 

你可能感兴趣的:(汇编)