;效果:向上滚动显示5个字,再重复循环。
;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00~0FH)。 ;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。 ;*************; ;中断入口程序 ; ;*************; ;
ORG 0000H LJMP START ORG 0003H RETI
ORG 000BH LJMP INTTO ORG 0013H ERTI
ORG 001BH ERTI
ORG 0023H RETI
ORG 002BH RETI ;
;***********; ;初始化程序; ;***********;
; ;
;***********; ; 主程序 ; ;***********; ;
START: MOV 20H,#00H 为1帧
MOV A,#0FFH MOV P1,A
MAIN: LCALL DISI MOV DPTR,#TAB
LCALL MOVDISP INC DPH
;清零标志,00H为第16行开始扫描标志,01;扫描结束标志 ;端口初始化 MOV P1,A MOV P3,A MOV P0,A
CLR P1.6 ;串行寄存器输入打入输出控制位 MOV TMOD,#01H ;使用T0做16位定时器,行扫描用。 MOV TH0,#0FCH ;1ms初值(12MHz) MOV TL0,#18H
MOV SCON,#00H ;串口0方式传送显示字节 MOV IE,#82H ;T0中断允许,总中断允许 MOV SP,#70H
;显示准备,黑屏,1.5s ;向上滚动显示一页(8个字)
LCALL MOVDISP ;向上滚动显示一页(8个字) INC DPH
LACLL MOVDISP ;向上滚动显示一页(8个字) AJMP MAIN ; ;
;***********************; ; 多字滚动显示程序 ; ;***********************; ;每次8个字,入口时定义好DPTR值 ;
MOVDISP: MOV B,#00H ;向上移动显示,查表偏值暂存(从00开始) DISLOOP: MOV R3,#07H ;移动速度 DISMOV: MOV R2,00H ;第0行开始 MOV R1,B
SETB TR0 ;开扫描(每次一帧)
WAITMOV: JBC 01H,DISMOV1 ;标志为1扫描一帧结束(16ms为1帧,每行1ms)
AJMP WAITMOV
DISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制移动速度) INC B ;显示字的下一行(每行2字节) INC B
MOV A,R1 ;R1为0,8个字显示完 JZ MOVOUT AJMP DISLOOP
MOVOUT: RET ;移动先是结束 ; ;
;****************; ; 单字显示程序 ; ;****************; ;显示表中某个字; ;****************;
DIS1: MOV R3,#5AH DIS11: MOV R2,#00H MOV DPTR,#TAB MOV R1,#00H SETB TR0 WAIT11: JBC 01H,DIS111 AJMP WAIT11
DIS111: DJNZ R3,DIS11
RET
; ;
;************; ; 扫描程序 ; ;************;
;1ms刷新一次,每行显示1s INTT0: PUSH ACC
MOV TH0,#0FCH ;静止显示时间控制(16ms*#=1.6s) ;一帧扫描初始值(行地址从00~0FH)
;取表首址
;查表偏址(显示第一个字)
;为1,扫描一帧结束
;1ms初值重装
;开扫描(每次一帧)
MOV TL0,#18H
JBC 00H,GOEND ;16行扫描标志为1,结束 INC R1 ;取行右边字节偏址 MOV A,R1
MOVC A,@A+DPTR ;查表
WAIT: JBC TI,GO GO: DEC R1 WAIT1: JBC T1,GO1
GO1: SETB P1.7 MOV SBUF,A AJMP WAIT1
MOV A,R1 MOVC A,@A+DPTR MOV SBUF,A
AJMP WAIT1
NOP SETB P1.6 NOP NOP
CLR P1.6 MOV A,R2 ORL A,#0F0H MOV R2,A MOV A,P1 ORL A,#0FH ;串口0方式发送
;等待发送完毕
;取行左边字节偏址
;关行显示,准备刷新
;串口寄存器数据稳定
;产生上升沿,行数据打入输出端 ;恢复低电平 ;修改显示行地址 ;修改显示行地址 ;修改显示行地址 ;修改显示行地址 ;修改显示行地址