本帖最后由 2735305023 于 2016-12-23 22:16 編輯
; **********************************
; * 課程設計六程序 *
; * 四字16*16點陣電子屏字符顯示器 *
; * 89C52 12MHZ晶振 *
; * *
; **********************************
;顯示字用查表法,不占內存,用四個16*16共陽LED點陣顯示,
;效果:向上滾動顯示字,每次四個,重復循環。
;R2:行掃描地址(從00-0FH)。
;R3:滾動顯示時控制移動速度,也可控制靜止顯示的時間。
;************;
;中斷入口程序;
;************;
;
ORG 0000H
LJMP START
;
ORG 000BH
LJMP INTT0
;
;************;
; 初始化程序 ;
;************;
;
;
;************;
; 主程序 ;
;************;
;
START: MOV 20H,#00H ;清標志,00H為1幀掃描結束標志
MOV A,#0FFH ;端口初始化
MOV P1,A
MOV P2,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
LCALL DIS1 ;顯示準備,黑屏,1.5秒
MAIN: MOV DPTR,#TAB
LCALL MOVDISP ;逐排顯示,每次四字)
MOV DPTR,#TAB
LCALL MOVDISP1 ;滾動顯示,每排四字)
AJMP MAIN
;
;
;********************;
; 四字逐排顯示子程序 ;
;********************;
;每次四字移入移出顯示方式,入口時定義好DPTR值
;
MOVDISP: MOV R1,#6 ;顯示6排字,每排四字(R1=排數)
DISLOOP: MOV R3,#100 ;每排顯示時間1.6*100=1.6S
DISMOV: MOV R2,#00H ;第0行開始
SETB TR0 ;開掃描(每次一幀)
WAITMOV: JBC 00H,DISMOV1 ;標志為1掃描一幀結束(16毫秒為1幀,每行1毫秒)
AJMP WAITMOV
DISMOV1: DJNZ R3,DISMOV ;1幀重復顯示(控制顯示時間)
MOV A,#128 ;顯示字指針移一排(每排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 ;移動顯示結束
;
;********************;
; 四字滾動顯示子程序 ;
;********************;
;每排四字向上移出顯示方式,入口時定義好DPTR值
;
MOVDISP1: MOV R1,#255 ;向上移動顯示6排字,每排四字(R1=排數*16)
DISLOOP1: MOV R3,#10 ;移動速度1.6*10=0.16S
DISMOV2: MOV R2,#00H ;第0行開始
SETB TR0 ;開掃描(每次一幀)
WAITMOV1: JBC 00H,DISMOV3 ;標志為1掃描一幀結束(16毫秒為1幀,每行1毫秒)
AJMP WAITMOV1
DISMOV3: DJNZ R3,DISMOV2 ;1幀重復顯示(控制移動速度)
INC DPTR ;顯示字指針移一行(二字節位置)
INC DPTR
DEC R1 ;R1為0,顯示完
MOV A,R1
JZ MOVOUT1 ;
AJMP DISLOOP1 ;
MOVOUT1: RET ;移動顯示結束
;
;
;*****************;
; 四個字顯示子程序 ;
;*****************;
;靜止顯示表中某四個字
DIS1: MOV R3,#5AH ;靜止顯示時間控制(16MS*#=1.6秒)
DIS11: MOV R2,#00H ;一幀掃描初始值(行地址從00-0FH)
MOV DPTR,#TAB ;取表首址
SETB TR0 ;開掃描(每次一幀)
WAIT11: JBC 00H,DIS111 ;為1,掃描一幀結束
AJMP WAIT11
DIS111: DJNZ R3,DIS11
RET
;
;
;************;
; 掃描程序 ;
;************;
;1MS傳送一行,每行顯示1毫秒,一次傳送四個字的某行共8個字節.
;
INTT0: PUSH ACC
MOV TH0,#0FCH ;1ms初值重裝
MOV TL0,#18H
MOV A,#97 ;指向第四個字行右字節
ADD A,DPL
MOV DPL,A
MOV A,#0
ADDC A,DPH
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;串口0方式發送
WAIT: JBC TI,GO ;等待發送完畢
AJMP WAIT ;
GO: MOV A,DPL ;指向第四個字行左字節
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR
MOV SBUF,A
WAIT1: JBC TI,GO1
AJMP WAIT1
;
GO1: MOV R0,#03H
MLOOP: MOV A,DPL ;指向前三個字行右字節
SUBB A,#31
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;串口0方式發送
WAIT2: JBC TI,GO2 ;等待發送完畢
AJMP WAIT2 ;
GO2: MOV A,DPL ;指向前三個字行左字節
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR
MOV SBUF,A
WAIT3: JBC TI,GO3
AJMP WAIT3
GO3: DJNZ R0,MLOOP ;執行三次
;
;
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 DPTR ;
INC DPTR ;下一行數據地址
MOV A,R2
ANL A,#0FH
JNZ GO4
SETB 00H ;R2為10H,現為末行掃描,置1幀結束標志
MOV A,DPL ;指針修正為原幀初值
SUBB A,#32
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
CLR TR0 ;一幀掃描完,關掃描
GO4: 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 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 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 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 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,0F7H,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 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,0C0H,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,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
;
END ;結束
|