?? lcd12864.s
字號:
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 170
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 171
; x ++;
inc R10
.dbline 172
; i ++;
inc R22
.dbline 173
; if (x > 63) { /*判斷地址是否越界*/
ldi R24,63
cp R24,R10
brsh L51
.dbline 173
.dbline 174
; break;
xjmp L50
L51:
.dbline 176
L49:
.dbline 168
cpi R22,8
brlo L48
L50:
.dbline 177
; }
; }
; }
L46:
.dbline 178
; if (i < 8) { /*地址進入左半屏范圍*/
cpi R22,8
brsh L53
.dbline 178
.dbline 179
; LCD1_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD1_write_com
.dbline 180
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L56
L55:
.dbline 181
.dbline 182
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 183
subi R20,255 ; offset = 1
sbci R21,255
.dbline 184
inc R10
.dbline 185
inc R22
.dbline 186
L56:
.dbline 181
; while (i < 8) {
cpi R22,8
brlo L55
.dbline 187
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L53:
.dbline 190
;
; /*顯示低8位*/
; i = 0x00;
clr R22
.dbline 191
; x -= 8;
mov R24,R10
subi R24,8
mov R10,R24
.dbline 192
; if (x < 64) { /*地址在左半屏范圍內*/
cpi R24,64
brsh L58
.dbline 192
.dbline 193
; LCD0_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD0_write_com
.dbline 194
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L61
L60:
.dbline 195
; while (i < 8) {
.dbline 196
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 197
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 198
; x ++;
inc R10
.dbline 199
; i ++;
inc R22
.dbline 200
; if (x > 63) { /*判斷地址是否越界*/
ldi R24,63
cp R24,R10
brsh L63
.dbline 200
.dbline 201
; break;
xjmp L62
L63:
.dbline 203
L61:
.dbline 195
cpi R22,8
brlo L60
L62:
.dbline 204
; }
; }
; }
L58:
.dbline 205
; if (i < 8) { /*地址進入左半屏范圍*/
cpi R22,8
brsh L65
.dbline 205
.dbline 206
; LCD1_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD1_write_com
.dbline 207
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L68
L67:
.dbline 208
.dbline 209
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 210
subi R20,255 ; offset = 1
sbci R21,255
.dbline 211
inc R10
.dbline 212
inc R22
.dbline 213
L68:
.dbline 208
; while (i < 8) {
cpi R22,8
brlo L67
.dbline 214
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L65:
.dbline 215
; CSA_CLR;
cbi 0x15,7
.dbline 216
; CSB_CLR;
cbi 0x15,6
.dbline -2
L45:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r q 20 pkc
.dbsym r i 22 c
.dbsym l ascii 8 c
.dbsym r y 12 c
.dbsym r x 10 c
.dbend
.dbfunc e disp_word _disp_word fV
; q -> R20,R21
; i -> R22
; word -> y+8
; y -> R12
; x -> R10
.even
_disp_word::
xcall push_gset4
mov R12,R18
mov R10,R16
.dbline -1
.dbline 220
; }
;
; /*在指定位置顯示一個漢字*/
; void disp_word(unsigned char x, unsigned char y, unsigned char word) {
.dbline 222
;
; unsigned char i = 0x00;
clr R22
.dbline 225
; const unsigned char *q; /*取字庫指針*/
;
; q = &CHINESE_FONT[word * 32]; /*定位指針地址*/
ldi R24,32
ldd R0,y+8
mul R24,R0
movw R20,R0
ldi R24,<_CHINESE_FONT
ldi R25,>_CHINESE_FONT
add R20,R24
adc R21,R25
.dbline 228
;
; /*顯示高16位*/
; i = 0x00;
.dbline 229
; if (x < 64) { /*地址在左半屏范圍內*/
mov R24,R10
cpi R24,64
brsh L71
.dbline 229
.dbline 230
; LCD0_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD0_write_com
.dbline 231
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L74
L73:
.dbline 232
; while (i < 16) {
.dbline 233
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 234
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 235
; x ++;
inc R10
.dbline 236
; i ++;
inc R22
.dbline 237
; if (x > 63) { /*判斷地址是否越界*/
ldi R24,63
cp R24,R10
brsh L76
.dbline 237
.dbline 238
; break;
xjmp L75
L76:
.dbline 240
L74:
.dbline 232
cpi R22,16
brlo L73
L75:
.dbline 241
; }
; }
; }
L71:
.dbline 242
; if (i < 16) { /*地址進入左半屏范圍*/
cpi R22,16
brsh L78
.dbline 242
.dbline 243
; LCD1_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD1_write_com
.dbline 244
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L81
L80:
.dbline 245
.dbline 246
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 247
subi R20,255 ; offset = 1
sbci R21,255
.dbline 248
inc R10
.dbline 249
inc R22
.dbline 250
L81:
.dbline 245
; while (i < 16) {
cpi R22,16
brlo L80
.dbline 251
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L78:
.dbline 254
;
; /*顯示低16位*/
; i = 0x00;
clr R22
.dbline 255
; x -= 16;
mov R24,R10
subi R24,16
mov R10,R24
.dbline 256
; if (x < 64) { /*地址在左半屏范圍內*/
cpi R24,64
brsh L83
.dbline 256
.dbline 257
; LCD0_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD0_write_com
.dbline 258
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L86
L85:
.dbline 259
; while (i < 16) {
.dbline 260
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 261
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 262
; x ++;
inc R10
.dbline 263
; i ++;
inc R22
.dbline 264
; if (x > 63) { /*判斷地址是否越界*/
ldi R24,63
cp R24,R10
brsh L88
.dbline 264
.dbline 265
; break;
xjmp L87
L88:
.dbline 267
L86:
.dbline 259
cpi R22,16
brlo L85
L87:
.dbline 268
; }
; }
; }
L83:
.dbline 269
; if (i < 16) { /*地址進入左半屏范圍*/
cpi R22,16
brsh L90
.dbline 269
.dbline 270
; LCD1_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD1_write_com
.dbline 271
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L93
L92:
.dbline 272
.dbline 273
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 274
subi R20,255 ; offset = 1
sbci R21,255
.dbline 275
inc R10
.dbline 276
inc R22
.dbline 277
L93:
.dbline 272
; while (i < 16) {
cpi R22,16
brlo L92
.dbline 278
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L90:
.dbline 279
; CSA_CLR;
cbi 0x15,7
.dbline 280
; CSB_CLR;
cbi 0x15,6
.dbline -2
L70:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r q 20 pkc
.dbsym r i 22 c
.dbsym l word 8 c
.dbsym r y 12 c
.dbsym r x 10 c
.dbend
.dbfunc e disp_char_str _disp_char_str fV
; str -> R20,R21
; y -> R22
; x -> R10
.even
_disp_char_str::
xcall push_gset3
mov R22,R18
mov R10,R16
sbiw R28,1
ldd R20,y+7
ldd R21,y+8
.dbline -1
.dbline 284
; }
;
; /*顯示一串字符*/
; void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
xjmp L97
L96:
.dbline 286
.dbline 287
movw R30,R20
ldd R2,z+0
std y+0,R2
mov R18,R22
mov R16,R10
xcall _disp_char
.dbline 288
mov R24,R10
subi R24,248 ; addi 8
mov R10,R24
.dbline 289
subi R20,255 ; offset = 1
sbci R21,255
.dbline 290
L97:
.dbline 286
;
; while (*str != 0) {
movw R30,R20
ldd R2,z+0
tst R2
brne L96
.dbline -2
L95:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r str 20 pc
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e disp_init _disp_init fV
.even
_disp_init::
.dbline -1
.dbline 294
; disp_char(x, y, *str);
; x += 8;
; str ++;
; }
; }
;
; /*顯示屏初始化函數*/
; void disp_init(void) {
.dbline 296
;
; DDRA = 0xFF; /*I/O口方向設置*/
ldi R24,255
out 0x1a,R24
.dbline 297
; DDRC = 0xFF;
out 0x14,R24
.dbline 299
;
; RST_CLR;
cbi 0x15,5
.dbline 300
; delay_ms(10);
ldi R16,10
xcall _delay_ms
.dbline 301
; RST_SET;
sbi 0x15,5
.dbline 303
;
; LCD0_write_com(0xC0); /*顯示起行設置*/
ldi R16,192
xcall _LCD0_write_com
.dbline 304
; LCD1_write_com(0xC0);
ldi R16,192
xcall _LCD1_write_com
.dbline 306
;
; LCD0_write_com(0x3F); /*開顯示設置*/
ldi R16,63
xcall _LCD0_write_com
.dbline 307
; LCD1_write_com(0x3F);
ldi R16,63
xcall _LCD1_write_com
.dbline -2
L99:
.dbline 0 ; func end
ret
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -