📄 lcd_back.s
字号:
.dbline -1
.dbline 274
; }
;
;
;
; //LCD复位
; void LCD_Reset(void)
; {
.dbline 275
; Set_RST(0);
clr R16
xcall _Set_RST
.dbline 276
; Set_RST(1);
ldi R16,1
.dbline -2
.dbline 277
; }
L31:
.dbline 0 ; func end
xjmp _Set_RST
.dbend
.dbfunc e LCD_Clear_Line _LCD_Clear_Line fV
; i -> R20
; j -> R10
; wEndLine -> R22
; wStartLine -> R10
.even
_LCD_Clear_Line::
xcall push_gset3
mov R22,R18
mov R10,R16
.dbline -1
.dbline 281
;
; //LCD清除显示行
; void LCD_Clear_Line(INT8U wStartLine,INT8U wEndLine)
; {
.dbline 283
; INT8U i,j;
; for(i = wStartLine;i <= wEndLine;i++)
mov R20,R10
xjmp L36
L33:
.dbline 284
; {
.dbline 285
; Set_CS1(1);
ldi R16,1
xcall _Set_CS1
.dbline 286
; Set_CS2(1);
ldi R16,1
xcall _Set_CS2
.dbline 287
; LCD_Command_Set_X(i);
mov R16,R20
xcall _LCD_Command_Set_X
.dbline 288
; LCD_Command_Set_Y(0);
clr R16
xcall _LCD_Command_Set_Y
.dbline 289
; for(j = 0;j < 64;j++)
clr R10
xjmp L40
L37:
.dbline 290
.dbline 291
clr R16
xcall _LCD_Command_WriteByte
.dbline 292
L38:
.dbline 289
inc R10
L40:
.dbline 289
mov R24,R10
cpi R24,64
brlo L37
.dbline 293
L34:
.dbline 283
inc R20
L36:
.dbline 283
cp R22,R20
brsh L33
.dbline -2
.dbline 294
; {
; LCD_Command_WriteByte(0x00);
; }
; }
; }
L32:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r wEndLine 22 c
.dbsym r wStartLine 10 c
.dbend
.dbfunc e LCD_Init _LCD_Init fV
.even
_LCD_Init::
.dbline -1
.dbline 298
;
; //LCD初始化
; void LCD_Init(void)
; {
.dbline 299
; LCD_Reset();
xcall _LCD_Reset
.dbline 300
; LCD_Clear_Line(0,7);
ldi R18,7
clr R16
xcall _LCD_Clear_Line
.dbline 301
; DisplayOnOff(1);
ldi R16,1
xcall _DisplayOnOff
.dbline 302
; SetStartLine(0);
clr R16
.dbline -2
.dbline 303
; }
L41:
.dbline 0 ; func end
xjmp _SetStartLine
.dbend
.dbfunc e LCD_Write_Char _LCD_Write_Char fV
; y_address -> R20
; x_address -> R22
; i -> R10
; disp -> R12,R13
; y -> R14
; x -> y+11
.even
_LCD_Write_Char::
xcall push_arg4
xcall push_gset5
mov R14,R18
sbiw R28,1
ldd R12,y+15
ldd R13,y+16
.dbline -1
.dbline 309
;
; //对128*64点阵LCD
; //X : 行数 0~3
; //Y : 列数 0~15
; void LCD_Write_Char(INT8U x,INT8U y,const INT8U *disp)
; {
.dbline 313
; INT8U i;
; INT8U x_address;
; INT8U y_address;
; if((x < 4) && (y < 16))
ldd R24,y+11
cpi R24,4
brlo X1
xjmp L43
X1:
mov R24,R14
cpi R24,16
brlo X2
xjmp L43
X2:
.dbline 314
; {
.dbline 315
; for(i = 0;i < 8;i++)
clr R10
xjmp L48
L45:
.dbline 316
.dbline 317
ldd R22,y+11
lsl R22
.dbline 318
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 319
movw R2,R12
movw R24,R2
adiw R24,1
movw R12,R24
movw R30,R2
lpm R30,Z
std y+0,R30
mov R18,R20
mov R16,R22
xcall _LCD_Write_Data
.dbline 320
L46:
.dbline 315
inc R10
L48:
.dbline 315
mov R24,R10
cpi R24,8
brlo L45
.dbline 321
; {
; x_address = x << 1;
; y_address = (y << 3) + i;
; LCD_Write_Data(x_address,y_address,*disp++);
; }
; for(i = 0;i < 8;i++)
clr R10
xjmp L52
L49:
.dbline 322
.dbline 323
ldd R22,y+11
lsl R22
subi R22,255 ; addi 1
.dbline 324
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 325
movw R2,R12
movw R24,R2
adiw R24,1
movw R12,R24
movw R30,R2
lpm R30,Z
std y+0,R30
mov R18,R20
mov R16,R22
xcall _LCD_Write_Data
.dbline 326
L50:
.dbline 321
inc R10
L52:
.dbline 321
mov R24,R10
cpi R24,8
brlo L49
.dbline 327
L43:
.dbline -2
.dbline 328
; {
; x_address = (x << 1) + 1;
; y_address = (y << 3) + i;
; LCD_Write_Data(x_address,y_address,*disp++);
; }
; }
; }
L42:
adiw R28,1
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r y_address 20 c
.dbsym r x_address 22 c
.dbsym r i 10 c
.dbsym r disp 12 pkc
.dbsym r y 14 c
.dbsym l x 11 c
.dbend
.dbfunc e LCD_Write_Word _LCD_Write_Word fV
; y_address -> R20
; x_address -> R22
; i -> R10
; disp -> R12,R13
; y -> R14
; x -> y+11
.even
_LCD_Write_Word::
xcall push_arg4
xcall push_gset5
mov R14,R18
sbiw R28,1
ldd R12,y+15
ldd R13,y+16
.dbline -1
.dbline 334
;
; //对128*64点阵LCD
; //X : 行数 0~3
; //Y : 列数 0~15
; void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
; {
.dbline 338
; INT8U i;
; INT8U x_address;
; INT8U y_address;
; if((x < 4) && (y < 16))
ldd R24,y+11
cpi R24,4
brlo X3
xjmp L54
X3:
mov R24,R14
cpi R24,16
brlo X4
xjmp L54
X4:
.dbline 339
; {
.dbline 340
; for(i = 0;i < 16;i++)
clr R10
xjmp L59
L56:
.dbline 341
.dbline 342
ldd R22,y+11
lsl R22
.dbline 343
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 344
movw R2,R12
movw R24,R2
adiw R24,1
movw R12,R24
movw R30,R2
lpm R30,Z
std y+0,R30
mov R18,R20
mov R16,R22
xcall _LCD_Write_Data
.dbline 345
L57:
.dbline 340
inc R10
L59:
.dbline 340
mov R24,R10
cpi R24,16
brlo L56
.dbline 346
; {
; x_address = x << 1;
; y_address = (y << 3) + i;
; LCD_Write_Data(x_address,y_address,*disp++);
; }
; for(i = 0;i < 16;i++)
clr R10
xjmp L63
L60:
.dbline 347
.dbline 348
ldd R22,y+11
lsl R22
subi R22,255 ; addi 1
.dbline 349
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 350
movw R2,R12
movw R24,R2
adiw R24,1
movw R12,R24
movw R30,R2
lpm R30,Z
std y+0,R30
mov R18,R20
mov R16,R22
xcall _LCD_Write_Data
.dbline 351
L61:
.dbline 346
inc R10
L63:
.dbline 346
mov R24,R10
cpi R24,16
brlo L60
.dbline 352
L54:
.dbline -2
.dbline 353
; {
; x_address = (x << 1) + 1;
; y_address = (y << 3) + i;
; LCD_Write_Data(x_address,y_address,*disp++);
; }
; }
; }
L53:
adiw R28,1
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r y_address 20 c
.dbsym r x_address 22 c
.dbsym r i 10 c
.dbsym r disp 12 pkc
.dbsym r y 14 c
.dbsym l x 11 c
.dbend
.dbfunc e LCD_Write_Picture _LCD_Write_Picture fV
; x_address -> R20
; y_address -> R14
; pdata -> R22,R23
; y_length -> R10
; x_length -> R12
; y1 -> y+11
; x1 -> R14
.even
_LCD_Write_Picture::
st -y,r19
st -y,r18
xcall push_gset5
mov R14,R16
sbiw R28,1
ldd R12,y+13
ldd R10,y+15
ldd R22,y+17
ldd R23,y+18
.dbline -1
.dbline 357
;
; //x1 行 y列
; void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x_length,INT8U y_length,const INT8U *pdata)
; {
.dbline 360
; INT8U x_address;
; INT8U y_address;
; for(x_address = x1;x_address <= (x_length >> 3) - 1;x_address++)
mov R20,R14
xjmp L68
L65:
.dbline 361
; {
.dbline 362
; for(y_address = y1;y_address < y1 + y_length;y_address++)
ldd R14,y+11
xjmp L72
L69:
.dbline 363
.dbline 364
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
lpm R30,Z
std y+0,R30
mov R18,R14
mov R16,R20
xcall _LCD_Write_Data
.dbline 365
L70:
.dbline 362
inc R14
L72:
.dbline 362
ldd R2,y+11
add R2,R10
cp R14,R2
brlo L69
.dbline 366
L66:
.dbline 360
inc R20
L68:
.dbline 360
mov R24,R12
lsr R24
lsr R24
lsr R24
subi R24,1
cp R24,R20
brsh L65
.dbline -2
.dbline 367
; {
; LCD_Write_Data(x_address,y_address,*pdata++);
; }
; }
; }
L64:
adiw R28,1
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r x_address 20 c
.dbsym r y_address 14 c
.dbsym r pdata 22 pkc
.dbsym r y_length 10 c
.dbsym r x_length 12 c
.dbsym l y1 11 c
.dbsym r x1 14 c
.dbend
.dbfunc e LCD_Write_Dot _LCD_Write_Dot fV
; y_address -> R22
; x_address -> R20
; data -> R10
; y -> R14
; x -> R12
.even
_LCD_Write_Dot::
xcall push_gset5
mov R14,R18
mov R12,R16
sbiw R28,1
.dbline -1
.dbline 374
.dbline 376
clr R10
.dbline 377
mov R24,R12
cpi R24,64
brsh L74
mov R24,R14
cpi R24,128
brsh L74
.dbline 378
.dbline 379
mov R20,R12
lsr R20
lsr R20
lsr R20
.dbline 380
mov R22,R24
.dbline 382
ldi R17,8
mov R16,R12
xcall mod8u
mov R17,R16
ldi R16,1
xcall lsl8
mov R2,R10
or R2,R16
std y+0,R2
mov R18,R22
mov R16,R20
xcall _LCD_Write_Data
.dbline 383
L74:
.dbline -2
.dbline 384
;
; //=========================END OF FILE=========================//
;
;
;
; void LCD_Write_Dot(INT8U x,INT8U y)
; {
; INT8U x_address,y_address;
; INT8U data = 0;
; if((x < 64) && (y < 128))
; {
; x_address = x >> 3;
; y_address = y;
; //data = LCD_Read_Data(x_address,y_address);
; LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
; }
; }
L73:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r y_address 22 c
.dbsym r x_address 20 c
.dbsym r data 10 c
.dbsym r y 14 c
.dbsym r x 12 c
.dbend
.dbfunc e LCD_Read_Data _LCD_Read_Data fc
; data -> R20
; y -> R20
; x -> R22
.even
_LCD_Read_Data::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 387
;
; INT8U LCD_Read_Data(INT8U x,INT8U y)
; {
.dbline 389
; INT8U data;
; if(y < 64)
cpi R20,64
brsh L77
.dbline 390
; {
.dbline 391
; Set_CS1(1);
ldi R16,1
xcall _Set_CS1
.dbline 392
; Set_CS2(0);
clr R16
xcall _Set_CS2
.dbline 393
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 394
; LCD_Command_Set_Y(y);
mov R16,R20
xcall _LCD_Command_Set_Y
.dbline 395
; }
xjmp L78
L77:
.dbline 397
; else
; {
.dbline 398
; Set_CS1(0);
clr R16
xcall _Set_CS1
.dbline 399
; Set_CS2(1);
ldi R16,1
xcall _Set_CS2
.dbline 400
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 401
; LCD_Command_Set_Y(y - 64);
mov R16,R20
subi R16,64
xcall _LCD_Command_Set_Y
.dbline 402
; }
L78:
.dbline 403
; data = Read_Byte();
xcall _Read_Byte
mov R20,R16
.dbline 404
; return(data);
.dbline -2
L76:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e LCD_Write_Data _LCD_Write_Data fV
; data -> y+4
; y -> R20
; x -> R22
.even
_LCD_Write_Data::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 408
; }
;
; void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
; {
.dbline 409
; if(y < 64)
cpi R20,64
brsh L80
.dbline 410
; {
.dbline 411
; Set_CS1(1);
ldi R16,1
xcall _Set_CS1
.dbline 412
; Set_CS2(0);
clr R16
xcall _Set_CS2
.dbline 413
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 414
; LCD_Command_Set_Y(y);
mov R16,R20
xcall _LCD_Command_Set_Y
.dbline 415
; }
xjmp L81
L80:
.dbline 417
; else
; {
.dbline 418
; Set_CS1(0);
clr R16
xcall _Set_CS1
.dbline 419
; Set_CS2(1);
ldi R16,1
xcall _Set_CS2
.dbline 420
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 421
; LCD_Command_Set_Y(y - 64);
mov R16,R20
subi R16,64
xcall _LCD_Command_Set_Y
.dbline 422
; }
L81:
.dbline 423
; LCD_Command_WriteByte(data);
ldd R16,y+4
xcall _LCD_Command_WriteByte
.dbline -2
.dbline 424
; }
L79:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l data 4 c
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -