|
以下是4个16×16点阵LED电子显示屏的源程序,分别采用汇编及C语言编写,C程序在Keil 51环境下调试。
(1)汇编源程序
;********************************
;4字16×16点阵电F屏字符显示器*
;* AT89C52 12 MHz晶振 *
;*******************************
;显示字用查表法,不占内存,用4个16×16共阳LED点阵显示
;效果:向上滚动显示字,每次4个,重复循环
;R2:行扫描地址(00H~0FH)。
;R3:滚动显示时控制移动速度,也可控制静止显示的时间
;*******中断入口程序*********
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
;*******主程序************
START:MOV 20H,#00H ;清标志,00H为l帧扫描结束标志
MOV A,#0FFH ;端口初始化
MOV P1, A
MOV P2, A
MOV P3, A
MOV P0,A
CLR Pl.6 ;串行寄存器输入/输出端控制位
MOV TMOD, #01H ;使用T0作16位定时器,行扫描用
MOV TH0, #0FCH ;1ms初值(12 MHz)
MOV TL0, #18H
MOV SCON, #00H ;串口0方式传送显示字节
MOV IE, #82H ;T0中断允许,总中断允许
MOV SP, #70H
LCALL DIS1 ;显示准备,黑屏,1.5 s
MAIN: MOV DPTR,#TAB
LCALL MOVDISP ;逐排显示,每次4字)
MOV DPTR,#TAB
LCALL MOVDISP1 ;滚动显示,每排4字)
AJMP MAIN
;***************4字逐排显示子程序*******
;每次4字移入移出显示方式,入口时定义好DPTR值
MOVDISP:MOV R1,#6 ;显示6排字,每排4字(R1=排数)
DISLOOP: MOV R3,#100 ;每排显示时间为16 ms×100=1.6 s
DISMOV: MOV R2,#00H ;第0行开始
SETB TR0 ;开扫描(每次l帧)
WAITMOV:JBC 00H,DISMOV1 ;标志为1,扫描l帧结束(16 ms为1帧,每行1 ms)
AJMP WAITMOV
DISMOV1:DJNZ R3,DISMOV ;1帧重复显示(控制显示时间)
MOV A,#128 ;显示字指针移1排(每排4字×32= 128字)
ADD A, DPL
MOV DPL, A
MOV A,#0
ADDC A, DPH
MOV DPH,A
DEC R1 ;R1为0,显示完
MOV A,R1
JZ MOVOUT
AJMP DISLOOP
MOVOUT:RET ;移动显示结束
;********************4字滚动显示子程序*****************
;每排4字向上移出显示方式,入口时定义好DPTR值
MOVDISP1:MOV R1,#255 ;向上移动显示6排字,每排4字(R1=排数×16)
DISLOOP1: MOV R3,#10 ;移动速度为16 ms×10= 0.16 s
DISMOV2: MOV R2,#00H :第0行开始
SETB TR0 ;开扫描(每次1帧)
WAITMOV1: JBC 00H,DISMOV3;标志为1扫描1帧结束(16 ms为1帧,每行1 ms)
AJMP WAITMOV1
DISMOV3: DJNZ R3,DISMOV2 ;1帧重复显示(控制移动速度)
INC DPTR ;显示字指针移1行(2字节位置)
INC DPTR
DEC R1 ;R1为0,显示完
MOV A,R1
JZ MOVOUT1
AJMP DISLOOP1
MOVOUT1: RET ;移动显示结束
|
|