; ****************************************
; * *
; * 单个16×16点阵电子屏字符显示器 *
; * AT89C51 12 MHz晶振 *
; * 2007.4. 30 LRM *
; ****************************************
;显示字用查表法,不占内存,字符用16 × 16共阳LED点阵,
;效果:向上滚动显示20个字,再重复循环。
;Rl:查表偏址寄存器,B:查表首址,R2:扫描地址(从00~OFH)。
;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。
;*****************;
; 中断入口程序 ;
;*****************;
;
ORG 0000H ;复位地址
LJMP START ;跳到标号START执行
ORG 0003H ;外中断0中断程序入口
REti ;外中断0中断返回
ORG 000BH ;定时器T0中断程序入口
LJMP INTT0 ;跳至INTT0执行
ORG 0013H ;外中断1中断程序入口
RETI
ORG 001BH ;定时器T1中断程序入口
RETI
ORG 0023H ;串行中断程序入口地址
RETI
ORG 002BH ;定时器T2中断入口地址
RETI
;
;*****************;
; 初始化程序 ;
*****************;
;
;
;*****************;
; 主程序 ;
;*****************;
;
START: MOV 20H, #00H ;清标志,OOH为第16行开始扫描标志,01 为1帧
;扫描结束标志
MOV A, #0FFH ;端口初始化
MOV P1, A
MOV P2, A
MOV P3, A
MOV P0, A
CLR P1.6 ;串行寄存器输入打入输出控制位
MOV TMOD, #01H ;使用TO作16位定时器,行扫描用。
MOV TH0, 0FCH ;1 ms初值(12 MHz)
MOV TL0, #18H
MOV SCON, #00H ;串口0方式传送显示字节
MOV IE, #82H ;T0中断允许,总中断允许
MOV SP, #70H
MAIN: LCALL DIS1 ;显示准备,黑屏,1.5s
MOV DPTR, #TAB
LCALL MOVDISP ;向上滚动显示一页(8个字)
INC DPH
LCALL MOVDISP ;向上滚动显示一页(8个字)
INC DPH
LCALL 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扫描一帧结束(16 ms为1帧,每行1 ms)
AJMP WAITMOV
DISMOV1: DJNZ R3, DISMOV ;l帧重复显示(控制移动速度)
INC B ;显示字的下一行(每行2字节)
INC B
MOV A,Rl ;Rl为0,8个字显示完
JZ MOVOUT
AJMP DISLOOP
MOVOUT: RET ;移动显示结束
;
;
;********************;
; 单字显示子程序 ;
;********************;
;显示表中某个字
DIS1: MOV R3, #5AH ;静止显示时间控制(16 ms *#=1. 6 s)
DIS11: MOV R2, #00H ;一帧扫描初始值(行地址从00~OFH)
MOV DPTR, #TAB ;取表首址
MOV R1, #00H ;查表偏址(显示第一个字)
SETB TR0 ;开扫描(每次一帧)
WAIT11: JBC 01H, DIS111 ;为1,扫描一帧结束
AJMP WAIT11
DIS111: DJNZ R3, DIS11
RET
;
;
;************;
; 扫描程序 ;
;************;
;1ms刷新一次,每行显示1s
INTT0: PUSH ACC
MOV TH0, #0FCH ;l ms初值重装
MOV TL0, #18H
JBC 00H, GOEND ;16行扫描标志为1,结束
INC R1 ;取行右边字节偏址
MOV A, R1
MOVC A, @A+DPTR ;查表
MOV SBUF, A ;串口0方式发送
WAIT: JBC T1, GO ;等待发送完毕
AJMP WAIT
GO: DEC R1 ;取行左边字节偏址
MOV A, R1
MOVC A, @A+DPTR
MOV SBUF, A
WAIT1: JBC T1, GO1
AJMP WAIT1
GO1: SETB P1.7 ;关行显示,准备刷新
NOP ;串口寄存器数据稳定
SETB P1.6 ;产生上升沿,行数据打人输出端
NOP
NOP
CLR P1.6 ;恢复低电平
MOV A, R2 ;修改显示行地址
ORL A, #0F0H ;修改显示行地址
MOV R2, A ;修改显示行地址
MOV A, P1 ;修改显示行地址
ORL A, #0FH ;修改显示行地址
ANL A, R2 ;修改显示行地址
MOV P1, A ;修改完成
CLR P1.7 ;开行显示
INC R2 ;下一行扫描地址值
INC R1
INC R1 ;下一行数据地址
MOV A, R2
ANL A, #0FH
JNZ GO2
SETB 00H ;R2为10H,现为末行扫描,置标志
GO2: POP ACC
RETI
GOEND: CLR TR0 ;一帧扫描完,关扫描
SETB 01H ;一帧扫描完,置结束标志
POP ACC
RETI ;退出
;
;****************;
; 扫描文字表 ;
;****************;
;
TAB: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;黑屏
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,
0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH,0F7H ;单
DB 0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
DB 0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,
0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH,0FFH ;片
DB 0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,
0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH,0EFH
DB 0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,
0EFH,077H,0EFH,077H,0C7H,077H,0CBH,077H ;机
DB 0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,
0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH,0FFH
DB 0FFH,0FFH,0F0H,00FH,0F7H,0EFH,0F0H,00FH,
0F7H,0EFH,0F0H,00FH,0FFH,0FFH,000H,001H ;是
DB 0FEH,0FFH,0F6H,0FFH,0F6H,007H,0F6H,0FFH,
0EAH,0FFH,0DCH,0FFH,0BFH,001H,0FFH,0FFH
DB 0FFH,0FFH,0C0H,003H,0FEH,0FFH,0FEH,0FFH,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH ;工
DB 0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,
0FEH,0FFH,000H,001H,0FFH,0FFH,0FFH,0FFH
DB 0FBH,0BFH,0FBH,0BFH,0FBH,0BFH,0FBH,0BBH,
0BBH,0B9H,0DBH,0B3H,0DBH,0B7H,0EBH,0AFH ;业
DB 0E3H,0AFH,0EBH,09FH,0FBH,0BFH,0FBH,0BFH,
0FBH,0BBH,000H,001H,0FFH,0FFH,0FFH,0FFH
DB 0FEH,0FFH,0FEH,0FFH,0DEH,0F7H,0C0H,003H,
0DEH,0F7H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H ;中
DB 0DEH,0F7H,0C0H,007H,0DEH,0F7H,0FEH,0FFH,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
DB 0FEH,0FFH,0FEH,0FFH,0DEH,0F7H,0C0H,003H,
0DEH,0F7H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H ;中
DB 0DEH,0F7H,0C0H,007H,0DEH,0F7H,0FEH,0FFH,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
DB 0E0H,00FH,0EFH,0EFH,0E0H,00FH,0EFH,0EFH,
0E0H,00FH,0FFH,0FFH,000H,001H,0DDH,0FFH ;最
DB 0C1H,003H,0DDH,077H,0C1H,0AFH,0DCH,0DFH,
0C1H,0AFH,01DH,071H,0FCH,0FBH,0FDH,0FFH
DB 0F7H,0DFH,0F1H,0DFH,080H,003H,0F7H,0DFH,
0F0H,01FH,0F7H,0DFH,0F0H,01FH,0F7H,0DFH ;基
DB 000H,001H,0F7H,0DFH,0EEH,0E7H,0C0H,011H,
03EH,0FBH,0FEH,0FFH,080H,003H,0FFH,0FFH
DB 0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,000H,001H,
0FCH,07FH,0FCH,0BFH,0FAH,0BFH,0FAH,0DFH ;本
DB 0F6H,0EFH,0EEH,0E7H,0D0H,011H,03EH,0FBH,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FFH,0FFH
DB 0EFH,07FH,0EFH,07FH,0DFH,07FH,083H,003H,
0BAH,0FBH,0BAH,0FBH,0B9H,0FBH,083H,07BH ;的
DB 0BBH,0BBH,0BBH,09BH,0BBH,0DBH,0BBH,0FBH,
083H,0FBH,0BBH,0D7H,0BFH,0EFH,0FFH,0FFH
DB 0FEH,0FFH,0FFH,07FH,0C0H,003H,0DFH,0FFH,
0DDH,0FFH,0DEH,0F7H,0CFH,073H,0D7H,037H ;应
DB 0DBH,06FH,0DBH,06FH,0D9H,0DFH,0BBH,0DFH,
0BFH,0BFH,0A0H,001H,07FH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0E0H,003H,0EFH,07BH,0EFH,07BH,
0EFH,07BH,0E0H,003H,0EFH,07BH,0EFH,07BH ;用
DB 0EFH,07BH,0E0H,003H,0EFH,07BH,0EFH,07BH,
0DFH,07BH,0DFH,07BH,0BFH,06BH,07FH,077H
DB 0FDH,0FFH,0FEH,0FFH,0FFH,07FH,000H,001H,
0FDH,0FFH,0FDH,0FFH,0FCH,00FH,0FDH,0EFH ;方
DB 0FBH,0EFH,0FBH,0EFH,0F7H,0EFH,0F7H,0EFH,
0EFH,0EFH,0DFH,06FH,03FH,09FH,0FFH,0FFH
DB 0FDH,0FFH,0FEH,0FFH,0FFH,07FH,000H,001H,
0FDH,0FFH,0FDH,0FFH,0FCH,00FH,0FDH,0EFH ;方
DB 0FBH,0EFH,0FBH,0EFH,0F7H,0EFH,0F7H,0EFH,
0EFH,0EFH,0DFH,06FH,03FH,09FH,0FFH,0FFH
DB 0FFH,05FH,0FFH,067H,0FFH,06FH,080H,003H,
0FFH,07FH,0FFH,07FH,0FFH,07FH,0C1H,07FH ;式
DB 0F7H,0BFH,0F7H,0BFH,0F7H,0BFH,0F4H,0DFH,
0E3H,0DDH,08FH,0EDH,0DFH,0F5H,0FFH,0FBH
DB 0F9H,0BFH,0C7H,0AFH,0F7H,0B7H,0F7H,0B7H,
0F7H,0BFH,000H,001H,0F7H,0BFH,0F7H,0B7H ;我
DB 0F1H,0D7H,0C7H,0CFH,037H,0DFH,0F7H,0AFH,
0F6H,06DH,0F7H,0F5H,0D7H,0F9H,0EFH,0FDH
DB 0FFH,007H,0C0H,06FH,0EDH,0EFH,0F6H,0DFH,
0C0H,001H,0DDH,0FDH,0BDH,0FFH,000H,003H ;爱
DB 0FBH,0FFH,0F8H,00FH,0F3H,0DFH,0F4H,0BFH,
0EFH,03FH,09CH,0CFH,073H,0F1H,0CFH,0FBH
DB 0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,
0DEH,0F7H,000H,007H,0DEH,0F7H,0DEH,0F7H ;单
DB 0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,
0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
DB 0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,
0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH,0FFH ;片
DB 0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,
0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH,0EFH
DB 0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,
0EFH,077H,0EFH,077H,0C7H,077H,0CBH,077H ;机
DB 0ABH,077H,0AFH,0FFH,06EH,0F7H,0EEH,0F5H,
0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;黑屏
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
END
|