📄 display.s
字号:
.module display.c
.area lit(rom, con, rel)
_FontLookup:
.byte 0,0
.byte 0,0
.byte 0
.byte 0,0
.byte 47,0
.byte 0
.byte 0,7
.byte 0,7
.byte 0
.byte 20,127
.byte 20,127
.byte 20
.byte 36,42
.byte 127,42
.byte 18
.byte 196,200
.byte 16,38
.byte 'F
.byte 54,'I
.byte 'U,34
.byte 'P
.byte 0,5
.byte 3,0
.byte 0
.byte 0,28
.byte 34,'A
.byte 0
.byte 0,'A
.byte 34,28
.byte 0
.byte 20,8
.byte 62,8
.byte 20
.byte 8,8
.byte 62,8
.byte 8
.byte 0,0
.byte 'P,48
.byte 0
.byte 16,16
.byte 16,16
.byte 16
.byte 0,96
.byte 96,0
.byte 0
.byte 32,16
.byte 8,4
.byte 2
.byte 62,'Q
.byte 'I,'E
.byte 62
.byte 0,'B
.byte 127,64
.byte 0
.byte 'B,'a
.byte 'Q,'I
.byte 'F
.byte 33,'A
.byte 'E,'K
.byte 49
.byte 24,20
.byte 18,127
.byte 16
.byte 39,'E
.byte 'E,'E
.byte 57
.byte 60,'J
.byte 'I,'I
.byte 48
.byte 1,'q
.byte 9,5
.byte 3
.byte 54,'I
.byte 'I,'I
.byte 54
.byte 6,'I
.byte 'I,41
.byte 30
.byte 0,54
.byte 54,0
.byte 0
.byte 0,'V
.byte 54,0
.byte 0
.byte 8,20
.byte 34,'A
.byte 0
.byte 20,20
.byte 20,20
.byte 20
.byte 0,'A
.byte 34,20
.byte 8
.byte 2,1
.byte 'Q,9
.byte 6
.byte 50,'I
.byte 'Y,'Q
.byte 62
.byte 126,17
.byte 17,17
.byte 126
.byte 127,'I
.byte 'I,'I
.byte 54
.byte 62,'A
.byte 'A,'A
.byte 34
.byte 127,'A
.byte 'A,34
.byte 28
.byte 127,'I
.byte 'I,'I
.byte 'A
.byte 127,9
.byte 9,9
.byte 1
.byte 62,'A
.byte 'I,'I
.byte 'z
.byte 127,8
.byte 8,8
.byte 127
.byte 0,'A
.byte 127,'A
.byte 0
.byte 32,64
.byte 'A,63
.byte 1
.byte 127,8
.byte 20,34
.byte 'A
.byte 127,64
.byte 64,64
.byte 64
.byte 127,2
.byte 12,2
.byte 127
.byte 127,4
.byte 8,16
.byte 127
.byte 62,'A
.byte 'A,'A
.byte 62
.byte 127,9
.byte 9,9
.byte 6
.byte 62,'A
.byte 'Q,33
.byte 94
.byte 127,9
.byte 25,41
.byte 'F
.byte 'F,'I
.byte 'I,'I
.byte 49
.byte 1,1
.byte 127,1
.byte 1
.byte 63,64
.byte 64,64
.byte 63
.byte 31,32
.byte 64,32
.byte 31
.byte 63,64
.byte 56,64
.byte 63
.byte 'c,20
.byte 8,20
.byte 'c
.byte 7,8
.byte 'p,8
.byte 7
.byte 'a,'Q
.byte 'I,'E
.byte 'C
.byte 0,127
.byte 'A,'A
.byte 0
.byte 'U,42
.byte 'U,42
.byte 'U
.byte 0,'A
.byte 'A,127
.byte 0
.byte 4,2
.byte 1,2
.byte 4
.byte 64,64
.byte 64,64
.byte 64
.byte 0,1
.byte 2,4
.byte 0
.byte 32,'T
.byte 'T,'T
.byte 'x
.byte 127,'H
.byte 'D,'D
.byte 56
.byte 56,'D
.byte 'D,'D
.byte 32
.byte 56,'D
.byte 'D,'H
.byte 127
.byte 56,'T
.byte 'T,'T
.byte 24
.byte 8,126
.byte 9,1
.byte 2
.byte 12,'R
.byte 'R,'R
.byte 62
.byte 127,8
.byte 4,4
.byte 'x
.byte 0,'D
.byte 125,64
.byte 0
.byte 32,64
.byte 'D,61
.byte 0
.byte 127,16
.byte 40,'D
.byte 0
.byte 0,'A
.byte 127,64
.byte 0
.byte 124,4
.byte 24,4
.byte 'x
.byte 124,8
.byte 4,4
.byte 'x
.byte 56,'D
.byte 'D,'D
.byte 56
.byte 124,20
.byte 20,20
.byte 8
.byte 8,20
.byte 20,24
.byte 124
.byte 124,8
.byte 4,4
.byte 8
.byte 'H,'T
.byte 'T,'T
.byte 32
.byte 4,63
.byte 'D,64
.byte 32
.byte 60,64
.byte 64,32
.byte 124
.byte 28,32
.byte 64,32
.byte 28
.byte 60,64
.byte 48,64
.byte 60
.byte 'D,40
.byte 16,40
.byte 'D
.byte 12,'P
.byte 'P,'P
.byte 60
.byte 'D,'d
.byte 'T,'L
.byte 'D
.dbfile ./small_font.h
.dbsym s FontLookup _FontLookup A[455:91:5]c
.area text(rom, con, rel)
.dbfile ./small_font.h
.dbfile ./display.c
.dbfunc e LcdInit _LcdInit fV
; i -> X+0
_LcdInit::
.dbline -1
push X
mov X,SP
add SP,2
.dbline 13
; #include "m8c.h"
; #include "PSoCAPI.h"
; #include "utils.h"
; #include "globdefs.h"
;
; #include "spim.h"
; #include "display.h"
;
; void LcdSendData ( char data );
; void LcdSendCommand ( char command );
;
; void LcdInit ( void )
; {
.dbline 15
; int i;
; SPIM_Start(SPIM_SPIM_MODE_0 | SPIM_SPIM_MSB_FIRST);
push X
mov A,0
xcall _SPIM_Start
pop X
.dbline 17
;
; CLEARBIT(LCD_PORT, LCD_RST_BIT);
and REG[4],-3
.dbline 18
; delayi(0xFF);
mov A,0
push A
mov A,-1
push A
xcall _delayi
.dbline 19
; SETBIT(LCD_PORT, LCD_RST_BIT);
or REG[4],2
.dbline 22
; // Enable SPI port: No interrupt, MSBit first, Master mode
;
; LcdSendCommand(0x21);
mov A,33
push A
xcall _LcdSendCommand
add SP,-3
.dbline 23
; LcdSendCommand(0xBF);
mov A,-65
push A
xcall _LcdSendCommand
.dbline 24
; LcdSendCommand(0x13);
mov A,19
push A
xcall _LcdSendCommand
add SP,-2
.dbline 26
;
; LcdSendCommand(0x20);
mov A,32
push A
xcall _LcdSendCommand
.dbline 27
; LcdSendCommand(0x0C); // LCD in normal mode.
mov A,12
push A
xcall _LcdSendCommand
add SP,-2
.dbline 30
;
; //clear display
; LcdSendCommand(0x40);
mov A,64
push A
xcall _LcdSendCommand
.dbline 31
; LcdSendCommand(0x80);
mov A,-128
push A
xcall _LcdSendCommand
add SP,-2
.dbline 32
mov [X+1],0
mov [X+0],0
L3:
.dbline 32
mov A,0
push A
xcall _LcdSendData
add SP,-1
L4:
.dbline 32
; for(i=0; i<504; i++) LcdSendData(0x00);
inc [X+1]
adc [X+0],0
.dbline 32
mov A,[X+0]
xor A,-128
mov [__rY],A
mov A,1
xor A,-128
mov [__rZ],A
mov [__rX],0
mov A,[X+1]
sub A,-8
or [__rX],A
mov A,[__rY]
sbb A,[__rZ]
or [__rX],A
jc L3
X0:
.dbline -2
.dbline 33
; }
L2:
add SP,-2
pop X
.dbline 0 ; func end
ret
.dbsym l i 0 I
.dbend
.dbfunc e LcdContrast _LcdContrast fV
; contrast -> X-4
_LcdContrast::
.dbline -1
push X
mov X,SP
.dbline 43
;
; //--------------------------------------------------------------------------------------------------
; // Name : LcdContrast
; // Description : Set display contrast.
; // Argument(s) : contrast -> Contrast value from 0x00 to 0x7F.
; // Return value : None.
; // Notes : No change visible at ambient temperature.
; //--------------------------------------------------------------------------------------------------
; void LcdContrast ( char contrast )
; {
.dbline 45
; // LCD Extended Commands.
; LcdSendCommand(0x21);
mov A,33
push A
xcall _LcdSendCommand
add SP,-1
.dbline 47
; // Set LCD Vop (Contrast).
; LcdSendCommand(0x80);
mov A,-128
push A
xcall _LcdSendCommand
.dbline 49
; // LCD Standard Commands, horizontal addressing mode.
; LcdSendCommand(0x20);
mov A,32
push A
xcall _LcdSendCommand
add SP,-2
.dbline -2
.dbline 50
; }
L7:
pop X
.dbline 0 ; func end
ret
.dbsym l contrast 0 I
.dbsym l contrast -4 c
.dbend
.dbfunc e LcdClear _LcdClear fV
; i -> X+0
_LcdClear::
.dbline -1
push X
mov X,SP
add SP,2
.dbline 59
;
; //--------------------------------------------------------------------------------------------------
; // Name : LcdClear
; // Description : Clears the display.
; // Argument(s) : None.
; // Return value : None.
; //--------------------------------------------------------------------------------------------------
; void LcdClear ( void )
; {
.dbline 61
mov [X+1],0
mov [X+0],0
L9:
.dbline 61
mov A,0
push A
xcall _LcdSendData
add SP,-1
L10:
.dbline 61
; int i;
; for(i=0; i<504; i++) LcdSendData(0x00);
inc [X+1]
adc [X+0],0
.dbline 61
mov A,[X+0]
xor A,-128
mov [__rY],A
mov A,1
xor A,-128
mov [__rZ],A
mov [__rX],0
mov A,[X+1]
sub A,-8
or [__rX],A
mov A,[__rY]
sbb A,[__rZ]
or [__rX],A
jc L9
X1:
.dbline 62
; LcdSendCommand(0x40);
mov A,64
push A
xcall _LcdSendCommand
.dbline 63
; LcdSendCommand(0x80);
mov A,-128
push A
xcall _LcdSendCommand
add SP,-2
.dbline -2
.dbline 64
; }
L8:
add SP,-2
pop X
.dbline 0 ; func end
ret
.dbsym l i 0 I
.dbend
.dbfunc e LcdGoto _LcdGoto fV
; y -> X-5
; x -> X-4
_LcdGoto::
.dbline -1
push X
mov X,SP
.dbline 73
;
; //--------------------------------------------------------------------------------------------------
; // Name : LcdGotoXY
; // Description : Sets cursor location to xy location corresponding to basic font size.
; // Argument(s) : x, y -> Coordinate for new cursor position. x range 0..83, y - 0..5
; // Return value : None.
; //--------------------------------------------------------------------------------------------------
; void LcdGoto ( char x, char y )
; {
.dbline 74
; LcdSendCommand(0x40 | y);
mov A,[X-5]
or A,64
push A
xcall _LcdSendCommand
.dbline 75
; LcdSendCommand(0x80 | x);
mov A,[X-4]
or A,-128
push A
xcall _LcdSendCommand
add SP,-2
.dbline -2
.dbline 76
; }
L13:
pop X
.dbline 0 ; func end
ret
.dbsym l y 0 I
.dbsym l y -5 c
.dbsym l x 0 I
.dbsym l x -4 c
.dbend
.dbfunc e LcdChr _LcdChr fV
; i -> X+0
; ch -> X-4
_LcdChr::
.dbline -1
push X
mov X,SP
add SP,2
.dbline 87
;
; //--------------------------------------------------------------------------------------------------
; // Name : LcdChr
; // Description : Displays a character at current cursor location and increment cursor location.
; // Argument(s) : ch -> Character to write.
; // dt (available only with DRAW_OVER_BACKGROUND directive) -> drawing type
; // Return value : None.
; //--------------------------------------------------------------------------------------------------
;
; void LcdChr ( char ch )
; {
.dbline 89
mov [X+1],0
mov [X+0],0
L15:
.dbline 89
mov [__r1],5
mov [__r0],0
mov A,[X-4]
mov [__r3],A
mov [__r2],0
mov [__rX],0
mov [__rY],0
X2:
cmp [__r0],0
jnz X5
cmp [__r1],0
jz X4
X5:
and F,-5
rrc [__r0]
rrc [__r1]
jnc X3
mov A,[__r3]
add [__rX],A
mov A,[__r2]
adc [__rY],A
X3:
asl [__r3]
rlc [__r2]
jmp X2
X4:
mov [__r1],[__rX]
mov [__r0],[__rY]
add [__r1],<_FontLookup-160
adc [__r0],>_FontLookup-160
mov A,[X+1]
add A,[__r1]
mov [__r1],A
mov A,[X+0]
adc A,[__r0]
push X
mov X,[__r1]
romx
pop X
push A
xcall _LcdSendData
add SP,-1
L16:
.dbline 89
; int i;
; for(i=0; i<5; i++) LcdSendData(FontLookup[ch-32][i]);
inc [X+1]
adc [X+0],0
.dbline 89
mov A,[X+0]
xor A,-128
mov [__rY],A
mov A,0
xor A,-128
mov [__rZ],A
mov [__rX],0
mov A,[X+1]
sub A,5
or [__rX],A
mov A,[__rY]
sbb A,[__rZ]
or [__rX],A
jc L15
X6:
.dbline 91
; // empty space after character
; LcdSendData(0x00);
mov A,0
push A
xcall _LcdSendData
add SP,-1
.dbline -2
.dbline 92
; }
L14:
add SP,-2
pop X
.dbline 0 ; func end
ret
.dbsym l i 0 I
.dbsym l ch 0 I
.dbsym l ch -4 c
.dbend
.dbfunc e LcdStr _LcdStr fV
; ch -> X+2
; i -> X+0
; dataPtr -> X-5
_LcdStr::
.dbline -1
push X
mov X,SP
add SP,3
.dbline 95
;
; void LcdStr ( char *dataPtr )
; {
xjmp L22
L21:
.dbline 98
; int i;
; while ( *dataPtr )
; {
.dbline 99
; char ch = *dataPtr++;
mov A,[X-4]
mov [__r1],A
mov A,[X-5]
mov [__r0],A
mov A,[__r1]
add A,1
mov [X-4],A
mov A,[__r0]
adc A,0
mov [X-5],A
mvi A,[__r1]
dec [__r1]
mov [X+2],A
.dbline 100
mov [X+1],0
mov [X+0],0
L24:
.dbline 100
mov [__r1],5
mov [__r0],0
mov A,[X+2]
mov [__r3],A
mov [__r2],0
mov [__rX],0
mov [__rY],0
X7:
cmp [__r0],0
jnz X10
cmp [__r1],0
jz X9
X10:
and F,-5
rrc [__r0]
rrc [__r1]
jnc X8
mov A,[__r3]
add [__rX],A
mov A,[__r2]
adc [__rY],A
X8:
asl [__r3]
rlc [__r2]
jmp X7
X9:
mov [__r1],[__rX]
mov [__r0],[__rY]
add [__r1],<_FontLookup-160
adc [__r0],>_FontLookup-160
mov A,[X+1]
add A,[__r1]
mov [__r1],A
mov A,[X+0]
adc A,[__r0]
push X
mov X,[__r1]
romx
pop X
push A
xcall _LcdSendData
add SP,-1
L25:
.dbline 100
inc [X+1]
adc [X+0],0
.dbline 100
mov A,[X+0]
xor A,-128
mov [__rY],A
mov A,0
xor A,-128
mov [__rZ],A
mov [__rX],0
mov A,[X+1]
sub A,5
or [__rX],A
mov A,[__rY]
sbb A,[__rZ]
or [__rX],A
jc L24
X11:
.dbline 102
mov A,0
push A
xcall _LcdSendData
add SP,-1
.dbline 103
L22:
.dbline 97
mov A,[X-4]
mov [__r1],A
mvi A,[__r1]
jnz L21
.dbline -2
.dbline 104
; for(i=0; i<5; i++) LcdSendData(FontLookup[ch-32][i]);
; // empty space after character
; LcdSendData(0x00);
; }
; }
L20:
add SP,-3
pop X
.dbline 0 ; func end
ret
.dbsym l ch 2 c
.dbsym l i 0 I
.dbsym l dataPtr -5 pc
.dbend
.dbfunc e LcdCStr _LcdCStr fV
; ch -> X+2
; i -> X+0
; dataPtr -> X-5
_LcdCStr::
.dbline -1
push X
mov X,SP
add SP,3
.dbline 107
;
; void LcdCStr ( const char *dataPtr )
; {
xjmp L31
L30:
.dbline 110
; int i;
; while ( *dataPtr )
; {
.dbline 111
; char ch = *dataPtr++;
mov A,[X-4]
mov [__r1],A
mov A,[X-5]
mov [__r0],A
mov A,[__r1]
add A,1
mov [X-4],A
mov A,[__r0]
adc A,0
mov [X-5],A
mov A,[__r0]
push X
mov X,[__r1]
romx
pop X
mov [X+2],A
.dbline 112
mov [X+1],0
mov [X+0],0
L33:
.dbline 112
mov [__r1],5
mov [__r0],0
mov A,[X+2]
mov [__r3],A
mov [__r2],0
mov [__rX],0
mov [__rY],0
X12:
cmp [__r0],0
jnz X15
cmp [__r1],0
jz X14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -