📄 hd61202.s
字号:
; unsigned int chr_m;
; chr_m=chrx;
ldd R20,y+8
clr R21
.dbline 163
; chr_m=chr_m*16;
ldi R16,16
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
.dbline 164
; if(y >= 8)
mov R24,R10
cpi R24,8
brsh X0
xjmp L30
X0:
.dbline 165
; {
.dbline 166
; y=y-8;
subi R24,8
mov R10,R24
.dbline 167
; LCD_Write_ComR(0xb8|x); //行坐标确定页地址
mov R16,R12
ori R16,184
xcall _LCD_Write_ComR
.dbline 168
; LCD_Write_ComR(0x40|y<<3); //列坐标确定列地址
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComR
.dbline 169
; for(i=0;i<8;i++)
clr R22
xjmp L35
L32:
.dbline 170
.dbline 171
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Ezk
ldi R25,>_Ezk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 172
L33:
.dbline 169
inc R22
L35:
.dbline 169
cpi R22,8
brlo L32
.dbline 173
; {
; LCD_Write_DatR(Ezk[chr_m+i]);
; }
; LCD_Write_ComR(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComR
.dbline 174
; LCD_Write_ComR(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComR
.dbline 175
; for(i=8;i<16;i++)
ldi R22,8
xjmp L39
L36:
.dbline 176
.dbline 177
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Ezk
ldi R25,>_Ezk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 178
L37:
.dbline 175
inc R22
L39:
.dbline 175
cpi R22,16
brlo L36
.dbline 179
; {
; LCD_Write_DatR(Ezk[chr_m+i]);
; }
; }
xjmp L31
L30:
.dbline 181
; else
; {
.dbline 182
; LCD_Write_ComL(0xb8|x);
mov R16,R12
ori R16,184
xcall _LCD_Write_ComL
.dbline 183
; LCD_Write_ComL(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComL
.dbline 184
; for(i=0;i<8;i++)
clr R22
xjmp L43
L40:
.dbline 185
.dbline 186
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Ezk
ldi R25,>_Ezk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 187
L41:
.dbline 184
inc R22
L43:
.dbline 184
cpi R22,8
brlo L40
.dbline 188
; {
; LCD_Write_DatL(Ezk[chr_m+i]);
; }
; LCD_Write_ComL(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComL
.dbline 189
; LCD_Write_ComL(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComL
.dbline 190
; for(i=8;i<16;i++)
ldi R22,8
xjmp L47
L44:
.dbline 191
.dbline 192
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Ezk
ldi R25,>_Ezk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 193
L45:
.dbline 190
inc R22
L47:
.dbline 190
cpi R22,16
brlo L44
.dbline 194
L31:
.dbline -2
L29:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r chr_m 20 i
.dbsym r i 22 c
.dbsym l chrx 8 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e LCD_WrCHr16x16 _LCD_WrCHr16x16 fV
; chr_m -> R20,R21
; i -> R22
; chrx -> y+8
; y -> R10
; x -> R12
.even
_LCD_WrCHr16x16::
xcall push_gset4
mov R10,R18
mov R12,R16
.dbline -1
.dbline 202
; {
; LCD_Write_DatL(Ezk[chr_m+i]);
; }
; }
; }
;
; //======================================================
; //显示16x16字符,位置按8x8一个点来定
; // x:行坐标(0-3) y:列坐标(0-15) chrx:显示字符(字符在字库中的索引)
; //======================================================
; void LCD_WrCHr16x16(unsigned char x,unsigned char y,unsigned char chrx)
; {
.dbline 205
; unsigned char i;
; unsigned int chr_m;
; chr_m=chrx;
ldd R20,y+8
clr R21
.dbline 206
; chr_m=chr_m*32;
ldi R16,32
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
.dbline 207
; if(y>=8) //y以字节计算,在右半屏显示,y以字节单位
mov R24,R10
cpi R24,8
brsh X1
xjmp L49
X1:
.dbline 208
; {
.dbline 209
; y=y-8;
subi R24,8
mov R10,R24
.dbline 210
; LCD_Write_ComR(0xb8|x); //确定显示行位置
mov R16,R12
ori R16,184
xcall _LCD_Write_ComR
.dbline 211
; LCD_Write_ComR(0x40|y<<3); //确定显示列位置
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComR
.dbline 212
; for(i=0;i<8;i++)
clr R22
xjmp L54
L51:
.dbline 213
.dbline 214
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 215
L52:
.dbline 212
inc R22
L54:
.dbline 212
cpi R22,8
brlo L51
.dbline 217
; {
; LCD_Write_DatR(Hzk[chr_m+i]);
; }
;
; LCD_Write_ComR(0xb8|x);
mov R16,R12
ori R16,184
xcall _LCD_Write_ComR
.dbline 218
; LCD_Write_ComR(0x48|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,72
xcall _LCD_Write_ComR
.dbline 219
; for(i=8;i<16;i++)
ldi R22,8
xjmp L58
L55:
.dbline 220
.dbline 221
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 222
L56:
.dbline 219
inc R22
L58:
.dbline 219
cpi R22,16
brlo L55
.dbline 224
; {
; LCD_Write_DatR(Hzk[chr_m+i]);
; }
;
; LCD_Write_ComR(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComR
.dbline 225
; LCD_Write_ComR(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComR
.dbline 226
; for(i=16;i<24;i++)
ldi R22,16
xjmp L62
L59:
.dbline 227
.dbline 228
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 229
L60:
.dbline 226
inc R22
L62:
.dbline 226
cpi R22,24
brlo L59
.dbline 230
; {
; LCD_Write_DatR(Hzk[chr_m+i]);
; }
; LCD_Write_ComR(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComR
.dbline 231
; LCD_Write_ComR(0x48|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,72
xcall _LCD_Write_ComR
.dbline 232
; for(i=24;i<32;i++)
ldi R22,24
xjmp L66
L63:
.dbline 233
.dbline 234
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 235
L64:
.dbline 232
inc R22
L66:
.dbline 232
cpi R22,32
brlo L63
.dbline 236
; {
; LCD_Write_DatR(Hzk[chr_m+i]);
; }
; }
xjmp L50
L49:
.dbline 238
; else
; {
.dbline 239
; LCD_Write_ComL(0xb8|x);
mov R16,R12
ori R16,184
xcall _LCD_Write_ComL
.dbline 240
; LCD_Write_ComL(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComL
.dbline 241
; for(i=0;i<8;i++)
clr R22
xjmp L70
L67:
.dbline 242
.dbline 243
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 244
L68:
.dbline 241
inc R22
L70:
.dbline 241
cpi R22,8
brlo L67
.dbline 246
; {
; LCD_Write_DatL(Hzk[chr_m+i]);
; }
;
; LCD_Write_ComL(0xb8|x);
mov R16,R12
ori R16,184
xcall _LCD_Write_ComL
.dbline 247
; LCD_Write_ComL(0x48|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,72
xcall _LCD_Write_ComL
.dbline 248
; for(i=8;i<16;i++)
ldi R22,8
xjmp L74
L71:
.dbline 249
.dbline 250
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 251
L72:
.dbline 248
inc R22
L74:
.dbline 248
cpi R22,16
brlo L71
.dbline 253
; {
; LCD_Write_DatL(Hzk[chr_m+i]);
; }
;
; LCD_Write_ComL(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComL
.dbline 254
; LCD_Write_ComL(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComL
.dbline 255
; for(i=16;i<24;i++)
ldi R22,16
xjmp L78
L75:
.dbline 256
.dbline 257
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 258
L76:
.dbline 255
inc R22
L78:
.dbline 255
cpi R22,24
brlo L75
.dbline 259
; {
; LCD_Write_DatL(Hzk[chr_m+i]);
; }
; LCD_Write_ComL(0xb9|x);
mov R16,R12
ori R16,185
xcall _LCD_Write_ComL
.dbline 260
; LCD_Write_ComL(0x48|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,72
xcall _LCD_Write_ComL
.dbline 261
; for(i=24;i<32;i++)
ldi R22,24
xjmp L82
L79:
.dbline 262
.dbline 263
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 264
L80:
.dbline 261
inc R22
L82:
.dbline 261
cpi R22,32
brlo L79
.dbline 265
L50:
.dbline -2
L48:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r chr_m 20 i
.dbsym r i 22 c
.dbsym l chrx 8 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e LCD_WrMap8x8 _LCD_WrMap8x8 fV
; chr_m -> R20,R21
; i -> R22
; chrx -> y+8
; y -> R10
; x -> R12
.even
_LCD_WrMap8x8::
xcall push_gset4
mov R10,R18
mov R12,R16
.dbline -1
.dbline 274
; {
; LCD_Write_DatL(Hzk[chr_m+i]);
; }
; }
;
; }
;
; //======================================================
; //显示128x64点阵图型,位置按8x8一个点来定
; // x:行坐标(0-3) y:列坐标(0-15) chrx:图型索引值
; //======================================================
; void LCD_WrMap8x8(unsigned char x,unsigned char y,unsigned char chrx)
; {
.dbline 277
; unsigned char i;
; unsigned int chr_m;
; chr_m=chrx;
ldd R20,y+8
clr R21
.dbline 278
; chr_m=chr_m*64;
ldi R16,64
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
.dbline 279
; if(y>=8) //y以字节计算,在右半屏显示,y以字节单位
mov R24,R10
cpi R24,8
brlo L84
.dbline 280
; {
.dbline 281
; y=y-8;
subi R24,8
mov R10,R24
.dbline 282
; LCD_Write_ComR(0xb8|x); //确定显示行位置
mov R16,R12
ori R16,184
xcall _LCD_Write_ComR
.dbline 283
; LCD_Write_ComR(0x40|y<<3); //确定显示列位置
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComR
.dbline 284
; for(i=0;i<64;i++)
clr R22
xjmp L89
L86:
.dbline 285
.dbline 286
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatR
.dbline 287
L87:
.dbline 284
inc R22
L89:
.dbline 284
cpi R22,64
brlo L86
.dbline 288
; {
; LCD_Write_DatR(Hzk[chr_m+i]);
; }
; }
xjmp L85
L84:
.dbline 290
; else
; {
.dbline 291
; LCD_Write_ComL(0xb8|x);
mov R16,R12
ori R16,184
xcall _LCD_Write_ComL
.dbline 292
; LCD_Write_ComL(0x40|y<<3);
mov R16,R10
lsl R16
lsl R16
lsl R16
ori R16,64
xcall _LCD_Write_ComL
.dbline 293
; for(i=0;i<64;i++)
clr R22
xjmp L93
L90:
.dbline 294
.dbline 295
mov R2,R22
clr R3
movw R30,R20
add R30,R2
adc R31,R3
ldi R24,<_Hzk
ldi R25,>_Hzk
add R30,R24
adc R31,R25
lpm R16,Z
xcall _LCD_Write_DatL
.dbline 296
L91:
.dbline 293
inc R22
L93:
.dbline 293
cpi R22,64
brlo L90
.dbline 297
L85:
.dbline -2
L83:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r chr_m 20 i
.dbsym r i 22 c
.dbsym l chrx 8 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e main _main fV
; i -> R20,R21
.even
_main::
sbiw R28,1
.dbline -1
.dbline 304
; {
; LCD_Write_DatL(Hzk[chr_m+i]);
; }
; }
; }
;
; //=============
; //主程序
; //=============
; void main(void)
; {
.dbline 306
; unsigned int i;
; DDRA=0xff; PORTA=0x00; //数据端口输出
ldi R24,255
out 0x1a,R24
.dbline 306
clr R2
out 0x1b,R2
.dbline 307
; DDRC=0xff; PORTC=0x04; //控制端口输出
out 0x14,R24
.dbline 307
ldi R24,4
out 0x15,R24
.dbline 312
;
; //#asm("wdr");
;
; //#asm("SEI"); //开总中断
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
.dbline 314
;
; LCD_Init(); //LCD初始化
xcall _LCD_Init
.dbline 315
; LCD_Clr(); //LCD清屏
xcall _LCD_Clr
.dbline 317
;
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
.dbline 318
; Delay(200);
ldi R16,200
ldi R17,0
xcall _Delay
.dbline 320
;
; for(i=0; i<8; i++)
clr R20
clr R21
xjmp L98
L95:
.dbline 321
.dbline 322
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
std y+0,R16
clr R18
mov R16,R20
xcall _LCD_WrMap8x8
.dbline 323
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R24,R16
adiw R24,1
std y+0,R24
ldi R18,8
mov R16,R20
xcall _LCD_WrMap8x8
.dbline 324
L96:
.dbline 320
subi R20,255 ; offset = 1
sbci R21,255
L98:
.dbline 320
cpi R20,8
ldi R30,0
cpc R21,R30
brlo L95
L99:
.dbline 334
.dbline 335
L100:
.dbline 333
xjmp L99
X2:
.dbline -2
L94:
adiw R28,1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -