📄 st7920.lis
字号:
0244 EA2D mov R30,R10
0246 FF27 clr R31
0248 E40F add R30,R20
024A F51F adc R31,R21
024C 0081 ldd R16,z+0
024E 4DDF xcall _WriteData
0250 .dbline 146
0250 ; i++;
0250 A394 inc R10
0252 .dbline 147
0252 ; if( i%16 == LineDispCnt%16 )
0252 10E1 ldi R17,16
0254 0C2D mov R16,R12
0256 0E940000 xcall mod8u
025A 202E mov R2,R16
025C 10E1 ldi R17,16
025E 0A2D mov R16,R10
0260 0E940000 xcall mod8u
0264 0215 cp R16,R2
0266 29F4 brne L33
0268 X8:
0268 .dbline 148
0268 ; {
0268 .dbline 149
0268 ; y++;
0268 E394 inc R14
026A .dbline 150
026A ; x = 0;
026A 6627 clr R22
026C .dbline 151
026C ; lcdSetXY(x,y);
026C 2E2D mov R18,R14
026E 062F mov R16,R22
0270 50DF xcall _lcdSetXY
0272 .dbline 152
0272 ; }
0272 L33:
0272 .dbline 153
0272 ; }
0272 L31:
0272 .dbline 143
0272 EA2D mov R30,R10
0274 FF27 clr R31
0276 E40F add R30,R20
0278 F51F adc R31,R21
027A 2080 ldd R2,z+0
027C 2220 tst R2
027E 11F7 brne L30
0280 X9:
0280 .dbline -2
0280 L29:
0280 .dbline 0 ; func end
0280 0C940000 xjmp pop_xgsetF0FC
0284 .dbsym r LineDispCnt 12 c
0284 .dbsym r i 10 c
0284 .dbsym r ptr 20 pc
0284 .dbsym r y 14 c
0284 .dbsym r x 22 c
0284 .dbend
0284 .dbfunc e lcdDispChar _lcdDispChar fV
0284 ; c -> y+2
0284 ; y -> R12
0284 ; x -> R10
.even
0284 _lcdDispChar::
0284 AA92 st -y,R10
0286 CA92 st -y,R12
0288 C22E mov R12,R18
028A A02E mov R10,R16
028C .dbline -1
028C .dbline 157
028C ; }
028C ;
028C ; void lcdDispChar( uchar x, uchar y, uchar c )
028C ; {
028C .dbline 158
028C ; lcdSetXY(x,y);
028C 2C2D mov R18,R12
028E 0A2D mov R16,R10
0290 40DF xcall _lcdSetXY
0292 .dbline 159
0292 ; WriteData(c);
0292 0A81 ldd R16,y+2
0294 2ADF xcall _WriteData
0296 .dbline -2
0296 L35:
0296 .dbline 0 ; func end
0296 C990 ld R12,y+
0298 A990 ld R10,y+
029A 0895 ret
029C .dbsym l c 2 c
029C .dbsym r y 12 c
029C .dbsym r x 10 c
029C .dbend
029C .dbfunc e lcdDispGraphic _lcdDispGraphic fV
029C ; widthOver -> R20
029C ; i -> R14
029C ; j -> R10
029C ; ptr -> R22,R23
029C ; y -> R12
029C ; x -> y+14
029C ; width -> y+12
029C ; length -> y+10
.even
029C _lcdDispGraphic::
029C 0E940000 xcall push_arg4
02A0 0E940000 xcall push_xgsetF0FC
02A4 C888 ldd R12,y+16
02A6 6A89 ldd R22,y+18
02A8 7B89 ldd R23,y+19
02AA .dbline -1
02AA .dbline 163
02AA ; }
02AA ;
02AA ; void lcdDispGraphic(uchar length,uchar width, uchar x,uchar y,const unsigned char *ptr)
02AA ; { //x:横0-15 y:纵 0-63
02AA .dbline 165
02AA ; uchar i,j;
02AA ; uchar widthOver=0;
02AA 4427 clr R20
02AC .dbline 166
02AC ; if((width + x) > 16) {widthOver = (width + x - 16);width = (16-x);} //超出屏幕
02AC 2C84 ldd R2,y+12
02AE 0E84 ldd R0,y+14
02B0 200C add R2,R0
02B2 80E1 ldi R24,16
02B4 8215 cp R24,R2
02B6 28F4 brsh L37
02B8 X10:
02B8 .dbline 166
02B8 .dbline 166
02B8 4C85 ldd R20,y+12
02BA 400D add R20,R0
02BC 4051 subi R20,16
02BE .dbline 166
02BE 8019 sub R24,R0
02C0 8C87 std y+12,R24
02C2 .dbline 166
02C2 L37:
02C2 .dbline 167
02C2 ; for(i = 0;i< length;i++)
02C2 EE24 clr R14
02C4 17C0 xjmp L42
02C6 L39:
02C6 .dbline 168
02C6 ; {
02C6 .dbline 169
02C6 ; SetGraphicAddr(x,y); //定位12864坐标
02C6 2C2D mov R18,R12
02C8 0E85 ldd R16,y+14
02CA 54DF xcall _SetGraphicAddr
02CC .dbline 170
02CC ; for(j = 0; j< width;j++)
02CC AA24 clr R10
02CE 07C0 xjmp L46
02D0 L43:
02D0 .dbline 171
02D0 ; {
02D0 .dbline 172
02D0 ; WriteData(*ptr++);
02D0 1B01 movw R2,R22
02D2 6F5F subi R22,255 ; offset = 1
02D4 7F4F sbci R23,255
02D6 F101 movw R30,R2
02D8 0491 lpm R16,Z
02DA 07DF xcall _WriteData
02DC .dbline 173
02DC ; }
02DC L44:
02DC .dbline 170
02DC A394 inc R10
02DE L46:
02DE .dbline 170
02DE 0C84 ldd R0,y+12
02E0 A014 cp R10,R0
02E2 B0F3 brlo L43
02E4 X11:
02E4 .dbline 174
02E4 ; if(widthOver)ptr +=widthOver;
02E4 4423 tst R20
02E6 21F0 breq L47
02E8 X12:
02E8 .dbline 174
02E8 242E mov R2,R20
02EA 3324 clr R3
02EC 620D add R22,R2
02EE 731D adc R23,R3
02F0 L47:
02F0 .dbline 175
02F0 ; y++;
02F0 C394 inc R12
02F2 .dbline 176
02F2 ; }
02F2 L40:
02F2 .dbline 167
02F2 E394 inc R14
02F4 L42:
02F4 .dbline 167
02F4 0A84 ldd R0,y+10
02F6 E014 cp R14,R0
02F8 30F3 brlo L39
02FA X13:
02FA .dbline -2
02FA L36:
02FA .dbline 0 ; func end
02FA 0E940000 xcall pop_xgsetF0FC
02FE 2496 adiw R28,4
0300 0895 ret
0302 .dbsym r widthOver 20 c
0302 .dbsym r i 14 c
0302 .dbsym r j 10 c
0302 .dbsym r ptr 22 pkc
0302 .dbsym r y 12 c
0302 .dbsym l x 14 c
0302 .dbsym l width 12 c
0302 .dbsym l length 10 c
0302 .dbend
0302 .dbfunc e ClearArea _ClearArea fV
0302 ; i -> R10
0302 ; j -> R22
0302 ; back -> y+14
0302 ; y -> R12
0302 ; x -> y+10
0302 ; width -> R14
0302 ; length -> R20
.even
0302 _ClearArea::
0302 0E940000 xcall push_xgsetF0FC
0306 E22E mov R14,R18
0308 402F mov R20,R16
030A CC84 ldd R12,y+12
030C .dbline -1
030C .dbline 181
030C ; }
030C ;
030C ;
030C ; void ClearArea(uchar length,uchar width, uchar x,uchar y,uchar back)
030C ; {
030C .dbline 182
030C ; uchar i=0,j=0;
030C AA24 clr R10
030E .dbline 182
030E 6627 clr R22
0310 .dbline 183
0310 ; for(i = 0;i< length;i++)
0310 0CC0 xjmp L53
0312 L50:
0312 .dbline 184
0312 ; {
0312 .dbline 185
0312 ; SetGraphicAddr(x,y); //定位12864坐标
0312 2C2D mov R18,R12
0314 0A85 ldd R16,y+10
0316 2EDF xcall _SetGraphicAddr
0318 .dbline 186
0318 ; for(j = 0; j< width;j++)
0318 6627 clr R22
031A 03C0 xjmp L57
031C L54:
031C .dbline 187
031C ; {
031C .dbline 188
031C ; WriteData(back);
031C 0E85 ldd R16,y+14
031E E5DE xcall _WriteData
0320 .dbline 189
0320 ; }
0320 L55:
0320 .dbline 186
0320 6395 inc R22
0322 L57:
0322 .dbline 186
0322 6E15 cp R22,R14
0324 D8F3 brlo L54
0326 X14:
0326 .dbline 190
0326 ; y++;
0326 C394 inc R12
0328 .dbline 191
0328 ; }
0328 L51:
0328 .dbline 183
0328 A394 inc R10
032A L53:
032A .dbline 183
032A A416 cp R10,R20
032C 90F3 brlo L50
032E X15:
032E .dbline -2
032E L49:
032E .dbline 0 ; func end
032E 0C940000 xjmp pop_xgsetF0FC
0332 .dbsym r i 10 c
0332 .dbsym r j 22 c
0332 .dbsym l back 14 c
0332 .dbsym r y 12 c
0332 .dbsym l x 10 c
0332 .dbsym r width 14 c
0332 .dbsym r length 20 c
0332 .dbend
0332 .dbfunc e DrawLevelLing _DrawLevelLing fV
0332 ; y1 -> <dead>
0332 ; x1 -> y+7
0332 ; y0 -> R12
0332 ; x0 -> R10
.even
0332 _DrawLevelLing::
0332 AA92 st -y,R10
0334 CA92 st -y,R12
0336 C22E mov R12,R18
0338 A02E mov R10,R16
033A 2597 sbiw R28,5
033C .dbline -1
033C .dbline 196
033C ; }
033C ;
033C ;
033C ; void DrawLevelLing( uchar x0,uchar y0, uchar x1,uchar y1)
033C ; {
033C .dbline 197
033C ; ClearArea(1,x1 - x0,x0,y0,0xff);
033C 8FEF ldi R24,255
033E 8C83 std y+4,R24
0340 CA82 std y+2,R12
0342 A882 std y+0,R10
0344 2F81 ldd R18,y+7
0346 2A19 sub R18,R10
0348 01E0 ldi R16,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -