📄 240128.s
字号:
.byte 1,0
.byte 1,16
.byte 31,248
.byte 16,16
.byte 16,16
.byte 16,16
.byte 31,240
.byte 16,16
.byte 1,16
.byte 40,136
.byte 36,'D
.byte 'D,'D
.byte 0,0
.byte 183,214
.byte 8,128
.byte 12,128
.byte 8,64
.byte 16,32
.byte 16,48
.byte 32,24
.byte 64,14
.byte 159,228
.byte 4,32
.byte 4,32
.byte 4,32
.byte 4,32
.byte 8,32
.byte 16,160
.byte 32,64
.byte 64,0
.byte 195,235
.byte 12,32
.byte 240,32
.byte 16,32
.byte 17,40
.byte 253,164
.byte 17,34
.byte 50,34
.byte 58,32
.byte 'T,34
.byte 'T,34
.byte 144,4
.byte 16,8
.byte 16,16
.byte 16,96
.byte 17,128
.byte 22,0
.dbsym e GB_16x16 _GB_16x16 A[340:10]kX
_turnf::
.byte 7,6
.byte 5,4
.byte 3,2
.byte 1,0
.dbfile D:\工作\240X12~1\(000)\240128.C
.dbsym e turnf _turnf A[8:8]kc
.area text(rom, con, rel)
.dbfile D:\工作\240X12~1\(000)\240128.C
.dbfunc e fnSTA01 _fnSTA01 fc
.even
_fnSTA01::
.dbline -1
.dbline 15
; /*******************************************************************************
; T6963C液晶驱动 RT240128
; MAGE88 16M
; *******************************************************************************/
; #include <iom88v.h>
; #include <macros.h>
; #include "240128.h"
; #include "storeroom.h"
; const unsigned char turnf[8] = {7,6,5,4,3,2,1,0};
; unsigned char gCurRow,gCurCol;
; /*******************************************************************************
; 状态位STA1,STA0判断读写指令和读写数据,在读写数据或者写入命令前必须保证均为1。
; *******************************************************************************/
; unsigned char fnSTA01(void)
; {
.dbline 16
; if( (LCD_RD_STATUS() & 0x03) == 0x03 ) return(0);
rcall _LCD_RD_STATUS
mov R24,R16
andi R24,3
cpi R24,3
brne L3
.dbline 16
clr R16
rjmp L2
L3:
.dbline 17
; else return(1);
ldi R16,1
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e fnSTA2 _fnSTA2 fc
.even
_fnSTA2::
.dbline -1
.dbline 23
; }
; /*******************************************************************************
; 状态位STA2,如果STA2=1 为自动读状态
; *******************************************************************************/
; unsigned char fnSTA2(void)
; {
.dbline 24
; if( (LCD_RD_STATUS() & 0x04) == 0x04 ) return(0);
rcall _LCD_RD_STATUS
mov R24,R16
andi R24,4
cpi R24,4
brne L6
.dbline 24
clr R16
rjmp L5
L6:
.dbline 25
; else return(1);
ldi R16,1
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e fnSTA3 _fnSTA3 fc
.even
_fnSTA3::
.dbline -1
.dbline 31
; }
; /*******************************************************************************
; 状态位STA3 如果STA3 = 1 数据自动写状态
; *******************************************************************************/
; unsigned char fnSTA3(void)
; {
.dbline 32
; if( (LCD_RD_STATUS() & 0x08) == 0x08 ) return(0);
rcall _LCD_RD_STATUS
mov R24,R16
andi R24,8
cpi R24,8
brne L9
.dbline 32
clr R16
rjmp L8
L9:
.dbline 33
; else return(1);
ldi R16,1
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbend
.dbfunc e fnSTA6 _fnSTA6 fc
.even
_fnSTA6::
.dbline -1
.dbline 39
; }
; /*******************************************************************************
; 状态位STA6 如果STA6 =1 屏读/屏拷贝状态
; *******************************************************************************/
; unsigned char fnSTA6(void)
; {
.dbline 40
; if( (LCD_RD_STATUS() & 0x40) == 0x40 ) return(0);
rcall _LCD_RD_STATUS
mov R24,R16
andi R24,64
cpi R24,64
brne L12
.dbline 40
clr R16
rjmp L11
L12:
.dbline 41
; else return(1);
ldi R16,1
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_RD_STATUS _LCD_RD_STATUS fc
; temp -> R16
.even
_LCD_RD_STATUS::
.dbline -1
.dbline 47
; }
; /*******************************************************************************
; 读LCD状态
; *******************************************************************************/
; unsigned char LCD_RD_STATUS(void)
; {
.dbline 49
; unsigned char temp;
; LCD_DDR = 0x00;
clr R2
out 0xa,R2
.dbline 50
; LCD_CD_H;
sbi 0x5,0
.dbline 51
; LCD_RD_L;
cbi 0x5,2
.dbline 52
; NOP();NOP();NOP();
nop
.dbline 52
nop
.dbline 52
nop
.dbline 53
; temp = LCD_DATA;
in R16,0x9
.dbline 54
; LCD_RD_H;
sbi 0x5,2
.dbline 55
; LCD_DDR = 0xFF;
ldi R24,255
out 0xa,R24
.dbline 56
; return(temp);
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e LCD_RD_DATA _LCD_RD_DATA fc
; temp -> R16
.even
_LCD_RD_DATA::
.dbline -1
.dbline 62
; }
; /*******************************************************************************
; 读LCD数据
; *******************************************************************************/
; unsigned char LCD_RD_DATA(void)
; {
.dbline 64
; unsigned char temp;
; LCD_DDR = 0x00;
clr R2
out 0xa,R2
.dbline 65
; LCD_CD_L;
cbi 0x5,0
.dbline 66
; LCD_RD_L;
cbi 0x5,2
.dbline 67
; NOP();NOP();NOP();
nop
.dbline 67
nop
.dbline 67
nop
.dbline 68
; temp = LCD_DATA;
in R16,0x9
.dbline 69
; LCD_RD_H;
sbi 0x5,2
.dbline 70
; LCD_DDR = 0xFF;
ldi R24,255
out 0xa,R24
.dbline 71
; return(temp);
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e LCD_WR_DATA _LCD_WR_DATA fV
; data -> R20
.even
_LCD_WR_DATA::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 77
; }
; /*******************************************************************************
; 写数据
; *******************************************************************************/
; void LCD_WR_DATA(unsigned char data)
; {
L17:
.dbline 78
L18:
.dbline 78
; while( fnSTA01() );
rcall _fnSTA01
tst R16
brne L17
.dbline 79
; LCD_CD_L;
cbi 0x5,0
.dbline 80
; LCD_WR_L;
cbi 0x5,1
.dbline 82
; //LCD_DDR = 0XFF;----------------单片机端口必须处于输出状态
; LCD_PORT = data;
out 0xb,R20
.dbline 83
; LCD_WR_H;
sbi 0x5,1
.dbline -2
L16:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e LCD_WR_CODE _LCD_WR_CODE fV
; code -> R20
.even
_LCD_WR_CODE::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 89
; }
; /*******************************************************************************
; 写无参数命令
; *******************************************************************************/
; void LCD_WR_CODE(unsigned char code)
; {
L21:
.dbline 90
L22:
.dbline 90
; while( fnSTA01() );
rcall _fnSTA01
tst R16
brne L21
.dbline 91
; LCD_CD_H;
sbi 0x5,0
.dbline 92
; LCD_WR_L;
cbi 0x5,1
.dbline 94
; //LCD_DDR = 0XFF;----------------单片机端口必须处于输出状态
; LCD_PORT = code;
out 0xb,R20
.dbline 95
; LCD_WR_H;
sbi 0x5,1
.dbline -2
L20:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r code 20 c
.dbend
.dbfunc e LCD_WR_CODE1 _LCD_WR_CODE1 fV
; data1 -> R22
; code -> R20
.even
_LCD_WR_CODE1::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 101
; }
; /*******************************************************************************
; 写单参数的指令
; *******************************************************************************/
; void LCD_WR_CODE1(unsigned char code, unsigned char data1)
; {
.dbline 102
; LCD_WR_DATA(data1);
mov R16,R22
rcall _LCD_WR_DATA
.dbline 103
; LCD_WR_CODE(code);
mov R16,R20
rcall _LCD_WR_CODE
.dbline -2
L24:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data1 22 c
.dbsym r code 20 c
.dbend
.dbfunc e LCD_WR_CODE2 _LCD_WR_CODE2 fV
; data2 -> y+4
; data1 -> R22
; code -> R20
.even
_LCD_WR_CODE2::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 109
; }
; /*******************************************************************************
; 写双参数的指令
; *******************************************************************************/
; void LCD_WR_CODE2(unsigned char code, unsigned char data1, unsigned char data2)
; {
.dbline 110
; LCD_WR_DATA(data1);
mov R16,R22
rcall _LCD_WR_DATA
.dbline 111
; LCD_WR_DATA(data2);
ldd R16,y+4
rcall _LCD_WR_DATA
.dbline 112
; LCD_WR_CODE(code);
mov R16,R20
rcall _LCD_WR_CODE
.dbline -2
L25:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l data2 4 c
.dbsym r data1 22 c
.dbsym r code 20 c
.dbend
.dbfunc e LCD_INIT _LCD_INIT fV
.even
_LCD_INIT::
sbiw R28,1
.dbline -1
.dbline 118
; }
; /*******************************************************************************
; 初始化LCD
; *******************************************************************************/
; void LCD_INIT(void)
; {
.dbline 119
; LCD_WR_CODE(LCD_MOD_OR);
ldi R16,128
rcall _LCD_WR_CODE
.dbline 120
; LCD_WR_CODE(0x98); //打开图形显示
ldi R16,152
rcall _LCD_WR_CODE
.dbline 121
; LCD_WR_CODE2(LCD_TXT_STP,0,0);
clr R2
std y+0,R2
clr R18
ldi R16,64
rcall _LCD_WR_CODE2
.dbline 122
; LCD_WR_CODE2(LCD_TXT_WID,30,0);
clr R2
std y+0,R2
ldi R18,30
ldi R16,65
rcall _LCD_WR_CODE2
.dbline 123
; LCD_WR_CODE2(LCD_GRH_STP,0,0);
clr R2
std y+0,R2
clr R18
ldi R16,66
rcall _LCD_WR_CODE2
.dbline 124
; LCD_WR_CODE2(LCD_GRH_WID,30,0);
clr R2
std y+0,R2
ldi R18,30
ldi R16,67
rcall _LCD_WR_CODE2
.dbline -2
L26:
adiw R28,1
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_CLEAR _LCD_CLEAR fV
; i -> R20
; j -> R10
; data -> R22
.even
_LCD_CLEAR::
rcall push_gset3
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 130
; }
; /*******************************************************************************
; 清整屏
; *******************************************************************************/
; void LCD_CLEAR(unsigned char data)
; {
.dbline 132
; unsigned char i,j;
; LCD_WR_CODE(0x98); //打开图形显示
ldi R16,152
rcall _LCD_WR_CODE
.dbline 133
; LCD_WR_CODE2(LCD_ADD_POS,0,0);
clr R2
std y+0,R2
clr R18
ldi R16,36
rcall _LCD_WR_CODE2
.dbline 134
; LCD_WR_CODE(LCD_AUT_WR);
ldi R16,176
rcall _LCD_WR_CODE
.dbline 135
; for(i=0;i<128;i++)
clr R20
rjmp L31
L28:
.dbline 136
; {
.dbline 137
; for(j=0;j<30;j++)
clr R10
rjmp L35
L32:
.dbline 138
.dbline 139
mov R16,R22
rcall _LCD_WR_DATA
.dbline 140
L33:
.dbline 137
inc R10
L35:
.dbline 137
mov R24,R10
cpi R24,30
brlo L32
.dbline 141
L29:
.dbline 135
inc R20
L31:
.dbline 135
cpi R20,128
brlo L28
.dbline 142
; {
; LCD_WR_DATA(data);
; }
; }
; LCD_WR_CODE(LCD_AUT_OVR);
ldi R16,178
rcall _LCD_WR_CODE
.dbline -2
L27:
adiw R28,1
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r data 22 c
.dbend
.dbfunc e PRINT_240128 _PRINT_240128 fV
; i -> R20
; j -> R10
; str -> R22,R23
.even
_PRINT_240128::
rcall push_gset3
movw R22,R16
sbiw R28,1
.dbline -1
.dbline 148
; }
; /*******************************************************************************
; 显示一个240*128的图片 图片的大小为3840 。
; *******************************************************************************/
; void PRINT_240128(const unsigned char *str)
; {
.dbline 150
; unsigned char i,j;
; LCD_WR_CODE(0x98);
ldi R16,152
rcall _LCD_WR_CODE
.dbline 151
; LCD_WR_CODE2(LCD_ADD_POS,0,0);
clr R2
std y+0,R2
clr R18
ldi R16,36
rcall _LCD_WR_CODE2
.dbline 152
; LCD_WR_CODE(LCD_AUT_WR);
ldi R16,176
rcall _LCD_WR_CODE
.dbline 153
; for(i=0;i<128;i++)
clr R20
rjmp L40
L37:
.dbline 154
; {
.dbline 155
; for(j=0;j<30;j++)
clr R10
rjmp L44
L41:
.dbline 156
.dbline 157
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
lpm R16,Z
rcall _LCD_WR_DATA
.dbline 158
L42:
.dbline 155
inc R10
L44:
.dbline 155
mov R24,R10
cpi R24,30
brlo L41
.dbline 159
L38:
.dbline 153
inc R20
L40:
.dbline 153
cpi R20,128
brlo L37
.dbline 160
; {
; LCD_WR_DATA(*str++);
; }
; }
; LCD_WR_CODE(LCD_AUT_OVR);
ldi R16,178
rcall _LCD_WR_CODE
.dbline -2
L36:
adiw R28,1
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r str 22 pkc
.dbend
.dbfunc e LCD_SET_ADD _LCD_SET_ADD fV
; ucol -> R20
; urow -> R22
.even
_LCD_SET_ADD::
rcall push_gset2
mov R20,R18
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 166
; }
; /*******************************************************************************
; 设置当前地址,用于起点定位。
; *******************************************************************************/
; void LCD_SET_ADD(unsigned char urow, unsigned char ucol)
; {
.dbline 167
; LCD_WR_CODE2(LCD_ADD_POS,(urow*30+ucol) & 0xFF,(urow*30+ucol) / 256);
ldi R24,30
mul R24,R22
movw R2,R0
mov R4,R20
clr R5
add R2,R4
adc R3,R5
ldi R18,256
ldi R19,1
movw R16,R2
rcall div16s
std y+0,R16
mov R18,R2
andi R19,0
ldi R16,36
rcall _LCD_WR_CODE2
.dbline 168
; gCurRow = urow;
sts _gCurRow,R22
.dbline 169
; gCurCol = ucol;
sts _gCurCol,R20
.dbline -2
L45:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ucol 20 c
.dbsym r urow 22 c
.dbend
.dbfunc e PRINT_words _PRINT_words fV
; length -> y+0
; uRow -> R22
; uCol -> R10
; i -> R12
; k -> R14,R15
; j -> R20
; ptr -> y+15
; y -> y+13
; x -> y+11
.even
_PRINT_words::
rcall push_arg4
rcall push_gset5
sbiw R28,1
.dbline -1
.dbline 175
; }
; /*******************************************************************************
; ASCII(8*16) 及 汉字(16*16) 显示函数,ASCII与汉字区别在于128做分界。
; *******************************************************************************/
; void PRINT_words (unsigned char x,unsigned char y, char *ptr)
; {
.dbline 176
; unsigned char length=0,i=0,j=0,uRow=0,uCol=0;
clr R0
std y+0,R0
.dbline 176
clr R12
.dbline 176
clr R20
.dbline 176
clr R22
.dbline 176
clr R10
.dbline 177
; unsigned int k=0;
clr R14
clr R15
.dbline 178
; uRow = y;
ldd R22,y+13
.dbline 179
; uCol = x;
ldd R10,y+11
.dbline 180
; LCD_SET_ADD(uRow*16,uCol); //起点定位
mov R18,R10
ldi R24,16
mul R24,R22
mov R16,R0
rcall _LCD_SET_ADD
rjmp L48
L47:
.dbline 184
.dbline 185
ldd R0,y+0
inc R0
std y+0,R0
.dbline 186
L48:
.dbline 183
;
;
; while (ptr[length]!=0) //探测字串长度
ldd R30,y+0
clr R31
ldd R0,y+15
ldd R1,y+16
add R30,R0
adc R31,R1
ldd R2,z+0
tst R2
brne L47
rjmp L51
L50:
.dbline 188
; {
; length++;
; }
; while(i<length)//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
; {
.dbline 189
; uRow = gCurRow;
lds R22,_gCurRow
.dbline 190
; uCol = gCurCol;
lds R10,_gCurCol
.dbline 191
; if(ptr[i] <= 128)//ASCII
mov R30,R12
clr R31
ldd R0,y+15
ldd R1,y+16
add R30,R0
adc R31,R1
ldd R2,z+0
ldi R24,128
cp R24,R2
brlo L53
.dbline 192
; {
.dbline 193
; for(j=0;j<16;j++)
clr R20
rjmp L58
L55:
.dbline 194
.dbline 195
ldi R16,176
rcall _LCD_WR_CODE
.dbline 196
mov R30,R12
clr R31
ldd R0,y+15
ldd R1,y+16
add R30,R0
adc R31,R1
ldd R2,z+0
ldi R24,16
mul R24,R2
movw R30,R0
subi R30,0
sbci R31,2
mov R2,R20
clr R3
add R30,R2
adc R31,R3
ldi R24,<_ASC_MSK
ldi R25,>_ASC_MSK
add R30,R24
adc R31,R25
lpm R16,Z
rcall _LCD_WR_DATA
.dbline 197
ldi R16,178
rcall _LCD_WR_CODE
.dbline 198
mov R18,R10
mov R16,R22
add R16,R20
subi R16,255 ; addi 1
rcall _LCD_SET_ADD
.dbline 199
L56:
.dbline 193
inc R20
L58:
.dbline 193
cpi R20,16
brlo L55
.dbline 200
; {
; LCD_WR_CODE(LCD_AUT_WR);
; LCD_WR_DATA(ASC_MSK[(ptr[i]-0x20)*16+j]);
; LCD_WR_CODE(LCD_AUT_OVR);
; LCD_SET_ADD(uRow+j+1,uCol);
; }
; uCol += 1;
inc R10
.dbline 201
; }
rjmp L54
L53:
.dbline 203
; else//中文
; {
.dbline 204
; for(j=0;j<sizeof(GB_16x16)/sizeof(GB_16x16[0]);j++) // 查找定位
clr R20
rjmp L62
L59:
.dbline 205
; {
.dbline 206
; if(ptr[i] == GB_16x16[j].Index[0] && ptr[i+1] == GB_16x16[j].Index[1])
mov R2,R12
clr R3
ldd R0,y+15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -