📄 lcda.asm
字号:
;*****************************************************
; LCD main program : lcd.asm
.include MMRegs_sdt.h
.ref ms_delay ,us_delay ,fill_chinese_word; ,gdram_disp
.ref write_command,write_data
.ref cgram_make_word ,cgram_make_word2 ; ,set_gdram_addr
.global _InitC5402
.global _Write_lcd
;===============================================
_InitC5402:
LD #0, DP ; reset data–page pointer
STM #0, CLKMD ; software setting of DSP clock
STM #0, CLKMD ; (to divider mode before setting)
STM #0x1007, CLKMD ; set C5402 DSP clock to 20MHz=10X2
; STM #0x4007, CLKMD ; set C5402 DSP clock to 50MHz=10X5
; STM #0x9007, CLKMD ; set C5402 DSP clock to 100MHz =10X10
; (based on DSK crystal at 10MHz)
******* Configure C5402 System Registers *******
STM #0x0000, SWCR ;The SWSM bit of the SWCR defines
; a multiplication factor of 1 or 2 for wait cycle
STM #0x2000, SWWSR ; 2 wait cycle for IO space
; 0 wait cycle for data&prog spaces
STM #0x0000,BSCR ; set wait states for bank switch:
; 64k mem bank, extra 0 cycle between
; consecutive prog/data read
STM #0x1800,ST0 ; ST0 at default setting
STM #0x2900,ST1 ; ST1 at default setting(note:INTX=1)
; STM #0x3fe1,PMST ; MP/MC=0 mode & OVLY=1, vectors at FF80h
STM #0x00A0,PMST ; MP/MC=0 & OVLY=1, CLKOFF=0 (Enable clkout) vectors at 0080h
******* Set up Timer Control Registers *******
STM #0x0010, TCR ; stop on–chip timer0
STM #0x0010, TCR1 ; stop on–chip timer1
; Timer0 is used as main loop timer
; STM #2499, PRD ; timer0 rate=CPUCLK/1/(PRD+1)
; =40M/2500=16KHz
* STM #6249, PRD ; if CPU at 100M/6250=16KHz
******* Finish DSP Initialization *******
STM #0x0000, IMR ; disable peripheral interrupts
STM #0xFFFF, IFR ; clear the intrupts’ flag
nop
nop
;STM 2000H,SP
RET ; return to main
NOP
NOP
;===============================================
_Write_lcd:
call init_lcm
call ddram_clear ;clear ddram
; b LED
stm #1111h,ar3 ;load "田" word piont
stm m3h_table1,ar5
rpt #31
mvdd *ar5+,*ar3+
stm #1024h,ar3 ;load "m3/h" piont
stm m3h_table2,ar5
rpt #31
mvdd *ar5+,*ar3+
call fill_with_cgram ;display cgram
stm #600,ar3 ;delay 600ms
call ms_delay
call fill_chinese_word ;display chinese
; stm #600,ar3 ;delay 600ms
; call ms_delay
; call gdram_clear ;clear gdram
; call gdram_test3
LED: ; stm #3000h,sp
rsbx xf
stm #800,ar3
call ms_delay
ssbx xf ; clear flag bit
stm #800,ar3
call ms_delay
NOP
RET
nop
nop
;===============================================
;===============================================
init_lcm:
;delay> 40ms
stm #40,ar3
call ms_delay
stm #30h,ar5
call write_command
;delay >100us
stm #100,ar3
call us_delay
stm #30h,ar5
call write_command
;delay >100us
stm #100,ar3
call us_delay
;turn on lcd
stm #0ch,ar5
call write_command
;delay >100us
stm #100,ar3
call us_delay
;clear ddram
stm #01h,ar5
call write_command
;delay >10ms
stm #10,ar3 ;10d=0ah
call ms_delay
;enter mode set
stm #06h,ar5
call write_command
RET
;===============================================
;================================================
ddram_clear:
;set basic mode
stm #30h,ar5
call write_command
;clear ddram
stm #01h,ar5
call write_command
;set expand mode
stm #36h,ar5
call write_command
;turn off graphic mode
stm #30h,ar5
call write_command
ret
;===============================================
;================================================
fill_with_cgram:
; 设cgram 中的字摸代码(bit4=bit5)
stm #0h,ar5
; 指定在相应的(cgram) 区中造字
call cgram_make_word2
;turn off display
stm #08h,ar5
call write_command
;clear ddram
stm #01h,ar5
call write_command
;turn on display
stm #0ch,ar5
call write_command
;set display address
stm #96h,ar5 ;set display address
call write_command
;调用字摸代码, 显示字模数据
stm #00h,ar5
mvdk ar5,1023h
call write_data
stm #00h,ar5
mvdk ar5,1023h
call write_data
stm #800,ar3 ;delay 600ms
call ms_delay
; 设cgram 中的字摸代码(bit4=bit5)
stm #0h,ar5
; 指定在相应的(cgram) 区中造字
call cgram_make_word
;turn off display
stm #08h,ar5
call write_command
;clear ddram
stm #01h,ar5
call write_command
;turn on display
stm #0ch,ar5
call write_command
;set display address
stm #96h,ar5 ;set display address
call write_command
;调用字摸代码, 显示字模数据
stm #00h,ar5
mvdk ar5,1023h
call write_data
stm #00h,ar5
mvdk ar5,1023h
call write_data
ret
;=;==============================================
;==;;==============================================
;gdram_clear:
;turn off display
; LDP #GPR0>>7
; SPLK #08h, GPR0
; call _write_command
;;clear ddram
; LDP #GPR0>>7
; SPLK #01h, GPR0
; call _write_command
;;internal gdram=16word(256dot/line)*64line
; LDP #gdram_cur_x>>7
; SPLK #0, gdram_cur_x ; up: left-right 0-7 down:left-right 8-15
; SPLK #0, gdram_cur_y ; up-down 0-31
; SPLK #34h, GPR0
; call _write_command
;write_gdram_0_loop:
; LDP #gdram_cur_y>>7
; lacl gdram_cur_y
; call _set_gdram_addr
;
; LDP #gdram_cur_x>>7
; lacl gdram_cur_x
; call _set_gdram_addr
;
; LDP #GPR0>>7
; SPLK #081h, GPR0
; call _write_data
; LDP #GPR0>>7
; SPLK #002h, GPR0
; call _write_data
;
; LDP #gdram_cur_x>>7
; lacl gdram_cur_x
; add #1
; sacl gdram_cur_x
; sub #16
; bcnd _write_gdram_0_loop,lt
;
; SPLK #0, gdram_cur_x
; lacl gdram_cur_y
; add #1
; sacl gdram_cur_y
; sub #32
; bcnd _write_gdram_0_loop,lt
;
; LDP #GPR0>>7
; SPLK #36h, GPR0
; call _write_command
; ret
;;===============================================
;=;===============================================
;gdram_test3:
; LDP #gdram_cur_x>>7
; SPLK #0, gdram_cur_x
; SPLK #0, gdram_cur_y
; SPLK #(128/8), bmp_width
; SPLK #16, bmp_height
; lar ar4,#0A000h
; mar *,ar4
; rpt #255
; blpd #rectangle0,*+
; rpt #255
; blpd #rectangle1,*+
; rpt #255
; blpd #rectangle2,*+
; rpt #255
; blpd #rectangle3,*+
; lar ar4,#0A000h
; b LED
; call gdram_disp
; ret
;;===============================================
;=;===============================================
;INT1: RET
;INT23: RET
;TINT: RET
;RINT: RET
;===============================================
;================================================
; 字模数据16line*2byte=16*16dot
m3h_table1:
.word 0f0h,0f0h,0f0h,0f0h,0ffh,0ffh,0c1h,083h
.word 0c1h,083h,0c1h,083h,0c1h,083h,0ffh,0ffh
.word 0ffh,0ffh,0c1h,083h,0c1h,083h,0c1h,083h
.word 0c1h,083h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
m3h_table2:
.word 01h,80h,02h,40h,00h,40h,01h,80h
.word 00h,48h,02h,50h,0B9h,90h,54h,20h
.word 54h,48h,54h,48h,54h,88h,55h,0Eh
.word 01h,09h,02h,09h,00h,09h,00h,09h
.end
;===============================================
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -