📄 st7920.s
字号:
mov R30,R10
clr R31
add R30,R20
adc R31,R21
ldd R16,z+0
xcall _WriteData
.dbline 146
; i++;
inc R10
.dbline 147
; if( i%16 == LineDispCnt%16 )
ldi R17,16
mov R16,R12
xcall mod8u
mov R2,R16
ldi R17,16
mov R16,R10
xcall mod8u
cp R16,R2
brne L33
X8:
.dbline 148
; {
.dbline 149
; y++;
inc R14
.dbline 150
; x = 0;
clr R22
.dbline 151
; lcdSetXY(x,y);
mov R18,R14
mov R16,R22
xcall _lcdSetXY
.dbline 152
; }
L33:
.dbline 153
; }
L31:
.dbline 143
mov R30,R10
clr R31
add R30,R20
adc R31,R21
ldd R2,z+0
tst R2
brne L30
X9:
.dbline -2
L29:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r LineDispCnt 12 c
.dbsym r i 10 c
.dbsym r ptr 20 pc
.dbsym r y 14 c
.dbsym r x 22 c
.dbend
.dbfunc e lcdDispChar _lcdDispChar fV
; c -> y+2
; y -> R12
; x -> R10
.even
_lcdDispChar::
st -y,R10
st -y,R12
mov R12,R18
mov R10,R16
.dbline -1
.dbline 157
; }
;
; void lcdDispChar( uchar x, uchar y, uchar c )
; {
.dbline 158
; lcdSetXY(x,y);
mov R18,R12
mov R16,R10
xcall _lcdSetXY
.dbline 159
; WriteData(c);
ldd R16,y+2
xcall _WriteData
.dbline -2
L35:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
.dbsym l c 2 c
.dbsym r y 12 c
.dbsym r x 10 c
.dbend
.dbfunc e lcdDispGraphic _lcdDispGraphic fV
; widthOver -> R20
; i -> R14
; j -> R10
; ptr -> R22,R23
; y -> R12
; x -> y+14
; width -> y+12
; length -> y+10
.even
_lcdDispGraphic::
xcall push_arg4
xcall push_xgsetF0FC
ldd R12,y+16
ldd R22,y+18
ldd R23,y+19
.dbline -1
.dbline 163
; }
;
; void lcdDispGraphic(uchar length,uchar width, uchar x,uchar y,const unsigned char *ptr)
; { //x:横0-15 y:纵 0-63
.dbline 165
; uchar i,j;
; uchar widthOver=0;
clr R20
.dbline 166
; if((width + x) > 16) {widthOver = (width + x - 16);width = (16-x);} //超出屏幕
ldd R2,y+12
ldd R0,y+14
add R2,R0
ldi R24,16
cp R24,R2
brsh L37
X10:
.dbline 166
.dbline 166
ldd R20,y+12
add R20,R0
subi R20,16
.dbline 166
sub R24,R0
std y+12,R24
.dbline 166
L37:
.dbline 167
; for(i = 0;i< length;i++)
clr R14
xjmp L42
L39:
.dbline 168
; {
.dbline 169
; SetGraphicAddr(x,y); //定位12864坐标
mov R18,R12
ldd R16,y+14
xcall _SetGraphicAddr
.dbline 170
; for(j = 0; j< width;j++)
clr R10
xjmp L46
L43:
.dbline 171
; {
.dbline 172
; WriteData(*ptr++);
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
lpm R16,Z
xcall _WriteData
.dbline 173
; }
L44:
.dbline 170
inc R10
L46:
.dbline 170
ldd R0,y+12
cp R10,R0
brlo L43
X11:
.dbline 174
; if(widthOver)ptr +=widthOver;
tst R20
breq L47
X12:
.dbline 174
mov R2,R20
clr R3
add R22,R2
adc R23,R3
L47:
.dbline 175
; y++;
inc R12
.dbline 176
; }
L40:
.dbline 167
inc R14
L42:
.dbline 167
ldd R0,y+10
cp R14,R0
brlo L39
X13:
.dbline -2
L36:
.dbline 0 ; func end
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym r widthOver 20 c
.dbsym r i 14 c
.dbsym r j 10 c
.dbsym r ptr 22 pkc
.dbsym r y 12 c
.dbsym l x 14 c
.dbsym l width 12 c
.dbsym l length 10 c
.dbend
.dbfunc e ClearArea _ClearArea fV
; i -> R10
; j -> R22
; back -> y+14
; y -> R12
; x -> y+10
; width -> R14
; length -> R20
.even
_ClearArea::
xcall push_xgsetF0FC
mov R14,R18
mov R20,R16
ldd R12,y+12
.dbline -1
.dbline 181
; }
;
;
; void ClearArea(uchar length,uchar width, uchar x,uchar y,uchar back)
; {
.dbline 182
; uchar i=0,j=0;
clr R10
.dbline 182
clr R22
.dbline 183
; for(i = 0;i< length;i++)
xjmp L53
L50:
.dbline 184
; {
.dbline 185
; SetGraphicAddr(x,y); //定位12864坐标
mov R18,R12
ldd R16,y+10
xcall _SetGraphicAddr
.dbline 186
; for(j = 0; j< width;j++)
clr R22
xjmp L57
L54:
.dbline 187
; {
.dbline 188
; WriteData(back);
ldd R16,y+14
xcall _WriteData
.dbline 189
; }
L55:
.dbline 186
inc R22
L57:
.dbline 186
cp R22,R14
brlo L54
X14:
.dbline 190
; y++;
inc R12
.dbline 191
; }
L51:
.dbline 183
inc R10
L53:
.dbline 183
cp R10,R20
brlo L50
X15:
.dbline -2
L49:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r i 10 c
.dbsym r j 22 c
.dbsym l back 14 c
.dbsym r y 12 c
.dbsym l x 10 c
.dbsym r width 14 c
.dbsym r length 20 c
.dbend
.dbfunc e DrawLevelLing _DrawLevelLing fV
; y1 -> <dead>
; x1 -> y+7
; y0 -> R12
; x0 -> R10
.even
_DrawLevelLing::
st -y,R10
st -y,R12
mov R12,R18
mov R10,R16
sbiw R28,5
.dbline -1
.dbline 196
; }
;
;
; void DrawLevelLing( uchar x0,uchar y0, uchar x1,uchar y1)
; {
.dbline 197
; ClearArea(1,x1 - x0,x0,y0,0xff);
ldi R24,255
std y+4,R24
std y+2,R12
std y+0,R10
ldd R18,y+7
sub R18,R10
ldi R16,1
xcall _ClearArea
.dbline -2
L58:
.dbline 0 ; func end
adiw R28,5
ld R12,y+
ld R10,y+
ret
.dbsym l y1 9 c
.dbsym l x1 7 c
.dbsym r y0 12 c
.dbsym r x0 10 c
.dbend
.dbfunc e PicClear1 _PicClear1 fV
; COUNT3 -> R20
; LCD_X -> R22
; LCD_Y -> R10
; COUNT2 -> R12
; COUNT1 -> R14
.even
_PicClear1::
xcall push_xgsetF0FC
.dbline -1
.dbline 205
; }
;
; /**********************液晶文字显示相关程序END*************/
;
;
; /**********************显示图形子程序START******************/
; void PicClear1(void)
; {
.dbline 207
; uchar COUNT3,COUNT2,COUNT1,LCD_X,LCD_Y;
; COUNT3=0X02;
ldi R20,2
.dbline 208
; LCD_X=0X80;
ldi R22,128
.dbline 209
; for (;COUNT3!=0;COUNT3--)
xjmp L63
L60:
.dbline 210
; {
.dbline 211
; LCD_Y=0X80;
ldi R24,128
mov R10,R24
.dbline 212
; COUNT2=0X20;//32
ldi R24,32
mov R12,R24
.dbline 213
; for (;COUNT2!=0;COUNT2--)
xjmp L67
L64:
.dbline 214
; {
.dbline 215
; COUNT1=0X10;//16
ldi R24,16
mov R14,R24
.dbline 216
; SetGraphicAddr(LCD_X,LCD_Y);
mov R18,R10
mov R16,R22
xcall _SetGraphicAddr
.dbline 217
; for (;COUNT1!=0;COUNT1--)
xjmp L71
L68:
.dbline 218
; {
.dbline 219
; WriteData(0);
clr R16
xcall _WriteData
.dbline 220
; }
L69:
.dbline 217
dec R14
L71:
.dbline 217
tst R14
brne L68
X16:
.dbline 221
; LCD_Y+=1;
inc R10
.dbline 222
; }
L65:
.dbline 213
dec R12
L67:
.dbline 213
tst R12
brne L64
X17:
.dbline 223
; LCD_X=0X88;
ldi R22,136
.dbline 224
; }
L61:
.dbline 209
dec R20
L63:
.dbline 209
tst R20
brne L60
X18:
.dbline -2
L59:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r COUNT3 20 c
.dbsym r LCD_X 22 c
.dbsym r LCD_Y 10 c
.dbsym r COUNT2 12 c
.dbsym r COUNT1 14 c
.dbend
.dbfunc e Draw_Pic _Draw_Pic fV
; temp_y -> R20
; temp_x -> R22
; i -> R10
; j -> R14
; Draw -> y+10
; y -> R10
; x -> R12
.even
_Draw_Pic::
xcall push_xgsetF0FC
mov R10,R18
mov R12,R16
.dbline -1
.dbline 241
; // send_com(0x36);
; // send_com(0x30); //可省
; }
;
; /********************************************************************
; 函 数 名:Draw_Pic 128*64
; 入口参数:x,y,*Draw
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:
; 说 明:
; ********************************************************************/
; /*************************************************/
;
; void Draw_Pic(uchar x, uchar y, const uchar *Draw)
; {
.dbline 243
; uchar i, j, temp_x, temp_y; //
; temp_x = x; //
mov R22,R12
.dbline 244
; temp_y = y; //
mov R20,R10
.dbline 245
; temp_x |= 0x80; //
ori R22,128
.dbline 246
; temp_y |= 0x80; //
ori R20,128
.dbline 247
; WriteCommand(0x01);//清屏
ldi R16,1
xcall _WriteCommand
.dbline 248
; Delayus(200); //清屏需要时间 1ms左右
ldi R16,200
ldi R17,0
ldi R18,0
ldi R19,0
xcall _Delayus
.dbline 249
; WriteCommand(0x36);
ldi R16,54
xcall _WriteCommand
.dbline 250
; for(i=0;i<32;i++ ) //上半屏32行
clr R10
xjmp L76
L73:
.dbline 251
; {
.dbline 252
; WriteCommand(temp_y++); //设置绘图区的Y地址坐标0
mov R2,R20
subi R20,255 ; addi 1
mov R16,R2
xcall _WriteCommand
.dbline 253
; WriteCommand(temp_x); //设置绘图区的X地址坐标0
mov R16,R22
xcall _WriteCommand
.dbline 254
; for(j=0;j<16;j++) //
clr R14
xjmp L80
L77:
.dbline 255
; {
.dbline 256
; WriteData(*Draw++);
ldd R2,y+10
ldd R3,y+11
movw R24,R2
adiw R24,1
std y+11,R25
std y+10,R24
movw R30,R2
lpm R16,Z
xcall _WriteData
.dbline 257
; }
L78:
.dbline 254
inc R14
L80:
.dbline 254
mov R24,R14
cpi R24,16
brlo L77
X19:
.dbline 258
; }
L74:
.dbline 250
inc R10
L76:
.dbline 250
mov R24,R10
cpi R24,32
brlo L73
X20:
.dbline 260
;
; temp_x = 0x88; //
ldi R22,136
.dbline 261
; temp_y = 0x80; //
ldi R20,128
.dbline 262
; j = 0; //
clr R14
.dbline 263
; for(;i<64;i++ )
xjmp L84
L81:
.dbline 264
; {
.dbline 266
;
; WriteCommand(temp_y++); //设置绘图区的Y地址坐标0
mov R12,R20
subi R20,255 ; addi 1
mov R16,R12
xcall _WriteCommand
.dbline 267
; WriteCommand(temp_x); //设置绘图区的X地址坐标0
mov R16,R22
xcall _WriteCommand
.dbline 268
; for(j=0;j<16;j++)
clr R14
xjmp L88
L85:
.dbline 269
; {
.dbline 270
; WriteData(*Draw++);
ldd R12,y+10
ldd R13,y+11
movw R24,R12
adiw R24,1
std y+11,R25
std y+10,R24
movw R30,R12
lpm R16,Z
xcall _WriteData
.dbline 271
; }
L86:
.dbline 268
inc R14
L88:
.dbline 268
mov R24,R14
cpi R24,16
brlo L85
X21:
.dbline 272
; }
L82:
.dbline 263
inc R10
L84:
.dbline 263
mov R24,R10
cpi R24,64
brlo L81
X22:
.dbline 273
; WriteCommand(0x30);//基本指令集,,绘图显示OFF
ldi R16,48
xcall _WriteCommand
.dbline -2
L72:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r temp_y 20 c
.dbsym r temp_x 22 c
.dbsym r i 10 c
.dbsym r j 14 c
.dbsym l Draw 10 pkc
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
; }
; /**********************显示图形子程序END******************/
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -