📄 lcd12864.s
字号:
; }
; }
L65:
.dbline 216
; CSA_CLR;
cbi 0x15,7
.dbline 217
; 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 221
; }
;
; /*在指定位置显示一个汉字*/
; void disp_word(unsigned char x, unsigned char y, unsigned char word) {
.dbline 223
;
; unsigned char i = 0x00;
clr R22
.dbline 226
; 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 229
;
; /*显示高16位*/
; i = 0x00;
.dbline 230
; if (x < 64) { /*地址在左半屏范围内*/
mov R24,R10
cpi R24,64
brsh L71
.dbline 230
.dbline 231
; LCD0_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD0_write_com
.dbline 232
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L74
L73:
.dbline 233
; while (i < 16) {
.dbline 234
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 235
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 236
; x ++;
inc R10
.dbline 237
; i ++;
inc R22
.dbline 238
; if (x > 63) { /*判断地址是否越界*/
ldi R24,63
cp R24,R10
brsh L76
.dbline 238
.dbline 239
; break;
xjmp L75
L76:
.dbline 241
L74:
.dbline 233
cpi R22,16
brlo L73
L75:
.dbline 242
; }
; }
; }
L71:
.dbline 243
; if (i < 16) { /*地址进入左半屏范围*/
cpi R22,16
brsh L78
.dbline 243
.dbline 244
; LCD1_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD1_write_com
.dbline 245
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L81
L80:
.dbline 246
.dbline 247
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 248
subi R20,255 ; offset = 1
sbci R21,255
.dbline 249
inc R10
.dbline 250
inc R22
.dbline 251
L81:
.dbline 246
; while (i < 16) {
cpi R22,16
brlo L80
.dbline 252
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L78:
.dbline 255
;
; /*显示低16位*/
; i = 0x00;
clr R22
.dbline 256
; x -= 16;
mov R24,R10
subi R24,16
mov R10,R24
.dbline 257
; if (x < 64) { /*地址在左半屏范围内*/
cpi R24,64
brsh L83
.dbline 257
.dbline 258
; LCD0_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD0_write_com
.dbline 259
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L86
L85:
.dbline 260
; while (i < 16) {
.dbline 261
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 262
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 263
; x ++;
inc R10
.dbline 264
; i ++;
inc R22
.dbline 265
; if (x > 63) { /*判断地址是否越界*/
ldi R24,63
cp R24,R10
brsh L88
.dbline 265
.dbline 266
; break;
xjmp L87
L88:
.dbline 268
L86:
.dbline 260
cpi R22,16
brlo L85
L87:
.dbline 269
; }
; }
; }
L83:
.dbline 270
; if (i < 16) { /*地址进入左半屏范围*/
cpi R22,16
brsh L90
.dbline 270
.dbline 271
; LCD1_write_com((y+1) | 0xB8);
mov R16,R12
subi R16,255 ; addi 1
ori R16,184
xcall _LCD1_write_com
.dbline 272
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L93
L92:
.dbline 273
.dbline 274
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 275
subi R20,255 ; offset = 1
sbci R21,255
.dbline 276
inc R10
.dbline 277
inc R22
.dbline 278
L93:
.dbline 273
; while (i < 16) {
cpi R22,16
brlo L92
.dbline 279
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
L90:
.dbline 280
; CSA_CLR;
cbi 0x15,7
.dbline 281
; 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 285
; }
;
; /*显示一串字符*/
; void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
xjmp L97
L96:
.dbline 287
.dbline 288
movw R30,R20
ldd R2,z+0
std y+0,R2
mov R18,R22
mov R16,R10
xcall _disp_char
.dbline 289
mov R24,R10
subi R24,248 ; addi 8
mov R10,R24
.dbline 290
subi R20,255 ; offset = 1
sbci R21,255
.dbline 291
L97:
.dbline 287
;
; 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 295
; disp_char(x, y, *str);
; x += 8;
; str ++;
; }
; }
;
; /*显示屏初始化函数*/
; void disp_init(void) {
.dbline 297
;
; DDRA = 0xFF; /*I/O口方向设置*/
ldi R24,255
out 0x1a,R24
.dbline 298
; DDRC = 0xFF;
out 0x14,R24
.dbline 300
;
; RST_CLR;
cbi 0x15,5
.dbline 301
; delay_ms(10);
ldi R16,10
xcall _delay_ms
.dbline 302
; RST_SET;
sbi 0x15,5
.dbline 304
;
; LCD0_write_com(0xC0); /*显示起行设置*/
ldi R16,192
xcall _LCD0_write_com
.dbline 305
; LCD1_write_com(0xC0);
ldi R16,192
xcall _LCD1_write_com
.dbline 307
;
; LCD0_write_com(0x3F); /*开显示设置*/
ldi R16,63
xcall _LCD0_write_com
.dbline 308
; LCD1_write_com(0x3F);
ldi R16,63
xcall _LCD1_write_com
.dbline -2
L99:
.dbline 0 ; func end
ret
.dbend
.dbfunc e disp_myself _disp_myself fV
; q -> R20,R21
; i -> R22
; ascii -> y+8
; y -> R12
; x -> R10
.even
_disp_myself::
xcall push_gset4
mov R12,R18
mov R10,R16
.dbline -1
.dbline 312
; }
;
; /*在指定位置显示一个8*8的 字符*/
; void disp_myself(unsigned char x, unsigned char y, unsigned char ascii) {
.dbline 314
;
; unsigned char i = 0x00;
clr R22
.dbline 318
; const unsigned char *q; /*取字库指针*/
;
;
; ascii -= 0x20;
ldd R24,y+8
subi R24,32
std y+8,R24
.dbline 319
; q = &ENGLISH_FONT[ascii *16]; /*定位指针地址*/
ldi R24,16
ldd R0,y+8
mul R24,R0
movw R20,R0
ldi R24,<_ENGLISH_FONT
ldi R25,>_ENGLISH_FONT
add R20,R24
adc R21,R25
.dbline 322
;
; /*显示高8位*/
; i = 0x00;
.dbline 323
; if (x < 64) { /*地址在左半屏范围内*/
mov R24,R10
cpi R24,64
brsh L101
.dbline 323
.dbline 324
; LCD0_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD0_write_com
.dbline 325
; LCD0_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD0_write_com
xjmp L104
L103:
.dbline 326
; while (i < 8) {
.dbline 327
; LCD0_write_data(*q);
movw R30,R20
lpm R16,Z
xcall _LCD0_write_data
.dbline 328
; q ++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 329
; x ++;
inc R10
.dbline 330
; i ++;
inc R22
.dbline 331
; if (x > 63) { /*判断地址是否越界*/
ldi R24,63
cp R24,R10
brsh L106
.dbline 331
.dbline 332
; break;
xjmp L105
L106:
.dbline 334
L104:
.dbline 326
cpi R22,8
brlo L103
L105:
.dbline 335
; }
; }
; }
L101:
.dbline 336
; if (i < 8) { /*地址进入左半屏范围*/
cpi R22,8
brsh L108
.dbline 336
.dbline 337
; LCD1_write_com(y | 0xB8);
mov R16,R12
ori R16,184
xcall _LCD1_write_com
.dbline 338
; LCD1_write_com(x | 0x40);
mov R16,R10
ori R16,64
xcall _LCD1_write_com
xjmp L111
L110:
.dbline 339
.dbline 340
movw R30,R20
lpm R16,Z
xcall _LCD1_write_data
.dbline 341
subi R20,255 ; offset = 1
sbci R21,255
.dbline 342
inc R10
.dbline 343
inc R22
.dbline 344
L111:
.dbline 339
cpi R22,8
brlo L110
.dbline 345
L108:
.dbline -2
L100:
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_to_bcd _disp_to_bcd fV
; f -> R14,R15
; e -> R12,R13
; b -> R10,R11
; c -> R22,R23
; a -> R20,R21
; d -> R10,R11
; x -> R22,R23
.even
_disp_to_bcd::
xcall push_gset5
movw R22,R16
sbiw R28,2
.dbline -1
.dbline 349
; while (i < 8) {
; LCD1_write_data(*q);
; q ++;
; x ++;
; i ++;
; }
; }
; }
;
;
; void disp_to_bcd(int x){
.dbline 350
; unsigned int a=x%10,b=x/10,c=b%10,d=b/10,e=d%10,f=d/10;
ldi R18,10
ldi R19,0
movw R16,R22
xcall mod16s
movw R20,R16
.dbline 350
ldi R18,10
ldi R19,0
movw R16,R22
xcall div16s
movw R10,R16
.dbline 350
ldi R18,10
ldi R19,0
xcall mod16u
movw R22,R16
.dbline 350
ldi R18,10
ldi R19,0
movw R16,R10
xcall div16u
movw R10,R16
.dbline 350
ldi R18,10
ldi R19,0
xcall mod16u
movw R12,R16
.dbline 350
ldi R18,10
ldi R19,0
movw R16,R10
xcall div16u
movw R14,R16
.dbline 351
; a+=48,c+=48,e+=48,f+=48;
subi R20,208 ; offset = 48
sbci R21,255
subi R22,208 ; offset = 48
sbci R23,255
movw R24,R12
adiw R24,48
movw R12,R24
movw R24,R14
adiw R24,48
movw R14,R24
.dbline 352
; disp_char(40, 2, f);
std y+0,R14
ldi R18,2
ldi R16,40
xcall _disp_char
.dbline 353
; disp_char(48, 2, e);
std y+0,R12
ldi R18,2
ldi R16,48
xcall _disp_char
.dbline 354
; disp_char_str(56, 2, ".");
ldi R24,<L114
ldi R25,>L114
std y+1,R25
std y+0,R24
ldi R18,2
ldi R16,56
xcall _disp_char_str
.dbline 355
; disp_char(64, 2, c);
std y+0,R22
ldi R18,2
ldi R16,64
xcall _disp_char
.dbline 356
; disp_char(72, 2, a);
std y+0,R20
ldi R18,2
ldi R16,72
xcall _disp_char
.dbline 357
; disp_char_str(80, 2, "V");
ldi R24,<L115
ldi R25,>L115
std y+1,R25
std y+0,R24
ldi R18,2
ldi R16,80
xcall _disp_char_str
.dbline 358
movw R24,R10
cpi R24,11
ldi R30,0
cpc R25,R30
brlo L118
cpi R24,11
ldi R30,0
cpc R25,R30
brne L116
cpi R22,0
cpc R22,R23
brne L116
X2:
cpi R20,0
cpc R20,R21
brne L116
X3:
L118:
.dbline 358
; if(d<11||d==11&&c==0&&a==0){
.dbline 359
; disp_word(32, 4, CB5E7); /*写入“电压偏低”四个汉字*/
ldi R24,6
std y+0,R24
ldi R18,4
ldi R16,32
xcall _disp_word
.dbline 360
; disp_word(48, 4, CD1B9);
ldi R24,7
std y+0,R24
ldi R18,4
ldi R16,48
xcall _disp_word
.dbline 361
; disp_word(64, 4, CC6AB);
ldi R24,10
std y+0,R24
ldi R18,4
ldi R16,64
xcall _disp_word
.dbline 362
; disp_word(80, 4, CB5CD);}
ldi R24,11
std y+0,R24
ldi R18,4
ldi R16,80
xcall _disp_word
.dbline 362
xjmp L117
L116:
.dbline 363
.dbline 364
ldi R24,6
std y+0,R24
ldi R18,4
ldi R16,32
xcall _disp_word
.dbline 365
ldi R24,7
std y+0,R24
ldi R18,4
ldi R16,48
xcall _disp_word
.dbline 366
ldi R24,8
std y+0,R24
ldi R18,4
ldi R16,64
xcall _disp_word
.dbline 367
ldi R24,9
std y+0,R24
ldi R18,4
ldi R16,80
xcall _disp_word
.dbline 367
L117:
.dbline -2
L113:
adiw R28,2
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r f 14 i
.dbsym r e 12 i
.dbsym r b 10 i
.dbsym r c 22 i
.dbsym r a 20 i
.dbsym r d 10 i
.dbsym r x 22 I
.dbend
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
L115:
.blkb 2
.area idata
.byte 'V,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
L114:
.blkb 2
.area idata
.byte 46,0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -