📄 hzmmi.lis
字号:
; dis_code -> R12
; pt -> y+11
; i -> R14
; w -> R10
; q -> y+10
; address1 -> y+8
; str -> R20,R21
; col -> R10
; row -> R12
.even
02D0 _str_hz::
02D0 0E940000 xcall push_gset5
02D4 A22E mov R10,R18
02D6 C02E mov R12,R16
02D8 2D97 sbiw R28,13
02DA 4F89 ldd R20,y+23
02DC 588D ldd R21,y+24
02DE .dbline -1
02DE .dbline 289
;
; //显示汉字串及大ASCII串
; void str_hz(byte row,byte col,byte *str)
; {
02DE .dbline 296
; byte q,w,i,dis_code;
; int address1,lrow,lcol;
; byte *pt;
; unsigned int aa;
; long zk;
;
; lrow=(row)%80; //设置行
02DE 20E5 ldi R18,80
02E0 30E0 ldi R19,0
02E2 0C2D mov R16,R12
02E4 1127 clr R17
02E6 0E940000 xcall mod16s
02EA 0E83 std y+6,R16
02EC 1F83 std y+7,R17
02EE .dbline 297
; lcol=(col*8)%160; //列
02EE 20EA ldi R18,160
02F0 30E0 ldi R19,0
02F2 0A2D mov R16,R10
02F4 1127 clr R17
02F6 000F lsl R16
02F8 111F rol R17
02FA 000F lsl R16
02FC 111F rol R17
02FE 000F lsl R16
0300 111F rol R17
0302 0E940000 xcall mod16s
0306 B801 movw R22,R16
0308 .dbline 298
; for(;*str;)
0308 C2C1 xjmp L60
030A L57:
030A .dbline 299
; { //如果*str=0,则退出循环
030A .dbline 300
; if(*str<160) //如果是ASC码字符,<A0H
030A FA01 movw R30,R20
030C 8081 ldd R24,z+0
030E 803A cpi R24,160
0310 08F0 brlo X3
0312 A9C0 xjmp L61
0314 X3:
0314 .dbline 301
; {
0314 .dbline 302
; q=(*str++);
0314 1A01 movw R2,R20
0316 C101 movw R24,R2
0318 0196 adiw R24,1
031A AC01 movw R20,R24
031C F101 movw R30,R2
031E 2080 ldd R2,z+0
0320 2A86 std y+10,R2
0322 .dbline 303
; if(q==13) //处理回车符
0322 8A85 ldd R24,y+10
0324 8D30 cpi R24,13
0326 41F4 brne L63
0328 .dbline 304
; {
0328 .dbline 305
; lrow+=16; //换两行
0328 8E81 ldd R24,y+6
032A 9F81 ldd R25,y+7
032C 4096 adiw R24,16
032E 8E83 std y+6,R24
0330 9F83 std y+7,R25
0332 .dbline 306
; lcol=0; //列的开始
0332 6627 clr R22
0334 7727 clr R23
0336 .dbline 307
; continue;
0336 ABC1 xjmp L58
0338 L63:
0338 .dbline 309
; }
; if(q<0x20) continue; //为不可见字符,继续循环
0338 8A85 ldd R24,y+10
033A 8032 cpi R24,32
033C 08F4 brsh L65
033E .dbline 309
033E A7C1 xjmp L58
0340 L65:
0340 .dbline 310
; zk=q*16l+0x100l+0x800l;
0340 84E0 ldi R24,4
0342 90E0 ldi R25,0
0344 2A84 ldd R2,y+10
0346 3324 clr R3
0348 4424 clr R4
034A 5524 clr R5
034C 8A93 st -y,R24
034E 8101 movw R16,R2
0350 9201 movw R18,R4
0352 0E940000 xcall lsl32
0356 1801 movw R2,R16
0358 2901 movw R4,R18
035A 00E0 ldi R16,<L67
035C 10E0 ldi R17,>L67
035E 0E940000 xcall lpm32
0362 200E add R2,R16
0364 311E adc R3,R17
0366 421E adc R4,R18
0368 531E adc R5,R19
036A 00E0 ldi R16,<L68
036C 10E0 ldi R17,>L68
036E 0E940000 xcall lpm32
0372 200E add R2,R16
0374 311E adc R3,R17
0376 421E adc R4,R18
0378 531E adc R5,R19
037A FE01 movw R30,R28
037C 2082 std z+0,R2
037E 3182 std z+1,R3
0380 4282 std z+2,R4
0382 5382 std z+3,R5
0384 .dbline 311
; lib_addr.l=zk<<2;
0384 82E0 ldi R24,2
0386 90E0 ldi R25,0
0388 8A93 st -y,R24
038A 8101 movw R16,R2
038C 9201 movw R18,R4
038E 0E940000 xcall lsl32
0392 10938400 sts _lib_addr+1,R17
0396 00938300 sts _lib_addr,R16
039A 30938600 sts _lib_addr+2+1,R19
039E 20938500 sts _lib_addr+2,R18
03A2 .dbline 312
; PORTF=lib_addr.bytes.a2 & 0x0f;
03A2 80918500 lds R24,_lib_addr+2
03A6 8F70 andi R24,15
03A8 80936200 sts 98,R24
03AC .dbline 313
; aa=zk;
03AC FE01 movw R30,R28
03AE 2080 ldd R2,z+0
03B0 3180 ldd R3,z+1
03B2 2C82 std y+4,R2
03B4 3D82 std y+5,R3
03B6 .dbline 314
; aa=(aa & 0x3fff)|0xc000;
03B6 8C81 ldd R24,y+4
03B8 9D81 ldd R25,y+5
03BA 9F73 andi R25,63
03BC 906C ori R25,192
03BE 8C83 std y+4,R24
03C0 9D83 std y+5,R25
03C2 .dbline 315
; pt=(byte *)aa;
03C2 2C80 ldd R2,y+4
03C4 3D80 ldd R3,y+5
03C6 2B86 std y+11,R2
03C8 3C86 std y+12,R3
03CA .dbline 316
; address1=lrow;
03CA 2E80 ldd R2,y+6
03CC 3F80 ldd R3,y+7
03CE 2886 std y+8,R2
03D0 3986 std y+9,R3
03D2 .dbline 317
; address1=DIS_LEN*address1+lcol/8;
03D2 28E0 ldi R18,8
03D4 30E0 ldi R19,0
03D6 8B01 movw R16,R22
03D8 0E940000 xcall div16s
03DC 1801 movw R2,R16
03DE 25E0 ldi R18,5
03E0 30E0 ldi R19,0
03E2 0885 ldd R16,y+8
03E4 1985 ldd R17,y+9
03E6 0E940000 xcall lsl16
03EA 2801 movw R4,R16
03EC 420C add R4,R2
03EE 531C adc R5,R3
03F0 4886 std y+8,R4
03F2 5986 std y+9,R5
03F4 .dbline 318
; address1=address1+START_ADDRESS; //+图形地址偏移量
03F4 .dbline 319
03F4 EE24 clr R14
03F6 25C0 xjmp L73
03F8 L70:
03F8 .dbline 319
03F8 .dbline 320
03F8 20E0 ldi R18,256
03FA 31E0 ldi R19,1
03FC 0885 ldd R16,y+8
03FE 1985 ldd R17,y+9
0400 0E940000 xcall div16s
0404 0A87 std y+10,R16
0406 .dbline 321
0406 20E0 ldi R18,256
0408 31E0 ldi R19,1
040A 0885 ldd R16,y+8
040C 1985 ldd R17,y+9
040E 0E940000 xcall mod16s
0412 5801 movw R10,R16
0414 .dbline 323
0414 0A2D mov R16,R10
0416 F0DE xcall _write_data
0418 .dbline 324
0418 0A85 ldd R16,y+10
041A EEDE xcall _write_data
041C .dbline 326
041C 04E2 ldi R16,36
041E D7DE xcall _write_order
0420 .dbline 327
0420 EB85 ldd R30,y+11
0422 FC85 ldd R31,y+12
0424 0081 ldd R16,z+0
0426 E8DE xcall _write_data
0428 .dbline 328
0428 00EC ldi R16,192
042A D1DE xcall _write_order
042C .dbline 329
042C 8B85 ldd R24,y+11
042E 9C85 ldd R25,y+12
0430 0196 adiw R24,1
0432 8B87 std y+11,R24
0434 9C87 std y+12,R25
0436 .dbline 330
0436 8885 ldd R24,y+8
0438 9985 ldd R25,y+9
043A 8096 adiw R24,32
043C 8887 std y+8,R24
043E 9987 std y+9,R25
0440 .dbline 331
0440 L71:
0440 .dbline 319
0440 E394 inc R14
0442 L73:
0442 .dbline 319
; for(i=0;i<16;i++){
0442 8E2D mov R24,R14
0444 8031 cpi R24,16
0446 C0F2 brlo L70
0448 .dbline 332
; q=address1/0x100; //地址高位
; w=address1%0x100; //地址低位
;
; write_data(w); //送低地址
; write_data(q); //送高地址
;
; write_order(0x24); //设置显示RAM地址
; write_data(*pt);
; write_order(0x0c0); //设置一次写数据指令代码
; pt++;
; address1=address1+DIS_LEN; //地址调整到下一行
; }
; lcol=lcol+8; //
0448 685F subi R22,248 ; offset = 8
044A 7F4F sbci R23,255
044C .dbline 333
; if(lcol>=160)
044C 603A cpi R22,160
044E E0E0 ldi R30,0
0450 7E07 cpc R23,R30
0452 0CF4 brge X4
0454 1CC1 xjmp L58
0456 X4:
0456 .dbline 334
; {
0456 .dbline 335
; lrow+=16;
0456 8E81 ldd R24,y+6
0458 9F81 ldd R25,y+7
045A 4096 adiw R24,16
045C 8E83 std y+6,R24
045E 9F83 std y+7,R25
0460 .dbline 336
; lcol=0;
0460 6627 clr R22
0462 7727 clr R23
0464 .dbline 337
; }
0464 .dbline 338
; continue;
0464 14C1 xjmp L58
0466 L61:
0466 .dbline 341
; }
;
; q=(*str++)-160;
0466 1A01 movw R2,R20
0468 C101 movw R24,R2
046A 0196 adiw R24,1
046C AC01 movw R20,R24
046E F101 movw R30,R2
0470 8081 ldd R24,z+0
0472 805A subi R24,160
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -