📄 lcd.s
字号:
cpi R24,64
brlo L32
.dbline 277
L29:
.dbline 267
inc R20
L31:
.dbline 267
cp R22,R20
brsh L28
.dbline -2
.dbline 278
; {
; LCD_Command_WriteByte(0x00);
; }
; }
; }
L27:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r endline 22 c
.dbsym r startline 10 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 287
;
; //******************************************************************************
; // Function : LCD_Write_Data
; // Input : x in [0,7] and y in [0,127]
; // Output : none
; // Description : Command Level Function,在指定行列写一个数据
; //******************************************************************************
; void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
; {
.dbline 288
; if(y < 64)
cpi R20,64
brsh L37
.dbline 289
; {
.dbline 290
; Set_CS1(1);
ldi R16,1
xcall _Set_CS1
.dbline 291
; Set_CS2(0);
clr R16
xcall _Set_CS2
.dbline 292
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 293
; LCD_Command_Set_Y(y);
mov R16,R20
xcall _LCD_Command_Set_Y
.dbline 294
; }
xjmp L38
L37:
.dbline 296
; else
; {
.dbline 297
; Set_CS1(0);
clr R16
xcall _Set_CS1
.dbline 298
; Set_CS2(1);
ldi R16,1
xcall _Set_CS2
.dbline 299
; LCD_Command_Set_X(x);
mov R16,R22
xcall _LCD_Command_Set_X
.dbline 300
; LCD_Command_Set_Y(y - 64);
mov R16,R20
subi R16,64
xcall _LCD_Command_Set_Y
.dbline 301
; }
L38:
.dbline 302
; LCD_Command_WriteByte(data);
ldd R16,y+4
xcall _LCD_Command_WriteByte
.dbline -2
.dbline 303
; }
L36:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l data 4 c
.dbsym r y 20 c
.dbsym r x 22 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 313
.dbline 315
clr R10
.dbline 316
mov R24,R12
cpi R24,64
brsh L40
mov R24,R14
cpi R24,128
brsh L40
.dbline 317
.dbline 318
mov R20,R12
lsr R20
lsr R20
lsr R20
.dbline 319
mov R22,R24
.dbline 320
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 321
L40:
.dbline -2
.dbline 322
;
; //******************************************************************************
; // Function : LCD_Write_Dot
; // Input : x in [0,63] and y in [0,127]
; // Output : none
; // Description : Application Level Function,在LCD的指定象素位置描点,注意此函数
; // 是覆盖式描点,原位置的一个字节数据将被此点取代
; //******************************************************************************
; 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;
; LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
; }
; }
L39:
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_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 333
;
; //******************************************************************************
; // Function : LCD_Write_Char
; // Input : x in [0,3] and y in [0,15],disp - start address of display buffer
; // Output : none
; // Description : Application Level Function,在LCD的指定显示单元显示一个字符。
; // 每个显示单元默认为8*16点阵字体,对128*64点阵LCD,x最多显示4行
; // 字符,y最多显示16个字符
; //******************************************************************************
; void LCD_Write_Char(INT8U x,INT8U y,const INT8U *disp)
; {
.dbline 337
; INT8U i;
; INT8U x_address;
; INT8U y_address;
; if((x < 4) && (y < 16))
ldd R24,y+11
cpi R24,4
brlo X0
xjmp L43
X0:
mov R24,R14
cpi R24,16
brlo X1
xjmp L43
X1:
.dbline 338
; {
.dbline 339
; for(i = 0;i < 8;i++)
clr R10
xjmp L48
L45:
.dbline 340
.dbline 341
ldd R22,y+11
lsl R22
.dbline 342
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 343
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 344
L46:
.dbline 339
inc R10
L48:
.dbline 339
mov R24,R10
cpi R24,8
brlo L45
.dbline 345
; {
; 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 346
.dbline 347
ldd R22,y+11
lsl R22
subi R22,255 ; addi 1
.dbline 348
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 349
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 350
L50:
.dbline 345
inc R10
L52:
.dbline 345
mov R24,R10
cpi R24,8
brlo L49
.dbline 351
L43:
.dbline -2
.dbline 352
; {
; 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 363
;
; //******************************************************************************
; // Function : LCD_Write_Word
; // Input : x in [0,3] and y in [0,14],disp - start address of display buffer
; // Output : none
; // Description : Application Level Function,在LCD的指定显示单元显示一个中文。
; // 每个显示单元默认为16*16点阵字体,对128*64点阵LCD,x最多显示4行
; // 字符,y最多显示16个字符,但不允许显示半个汉字
; //******************************************************************************
; void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
; {
.dbline 367
; INT8U i;
; INT8U x_address;
; INT8U y_address;
; if((x < 4) && (y < 15))
ldd R24,y+11
cpi R24,4
brlo X2
xjmp L54
X2:
mov R24,R14
cpi R24,15
brlo X3
xjmp L54
X3:
.dbline 368
; {
.dbline 369
; for(i = 0;i < 16;i++)
clr R10
xjmp L59
L56:
.dbline 370
.dbline 371
ldd R22,y+11
lsl R22
.dbline 372
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 373
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 374
L57:
.dbline 369
inc R10
L59:
.dbline 369
mov R24,R10
cpi R24,16
brlo L56
.dbline 375
; {
; 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 376
.dbline 377
ldd R22,y+11
lsl R22
subi R22,255 ; addi 1
.dbline 378
mov R20,R14
lsl R20
lsl R20
lsl R20
add R20,R10
.dbline 379
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 380
L61:
.dbline 375
inc R10
L63:
.dbline 375
mov R24,R10
cpi R24,16
brlo L60
.dbline 381
L54:
.dbline -2
.dbline 382
; {
; 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+13
; x1 -> y+11
.even
_LCD_Write_Picture::
xcall push_arg4
xcall push_gset5
sbiw R28,1
ldd R12,y+15
ldd R10,y+17
ldd R22,y+19
ldd R23,y+20
.dbline -1
.dbline 393
;
; //******************************************************************************
; // Function : LCD_Write_Picture
; // Input : x in [0,7] and y in [0,127],
; // x1_length - 纵向象素 y1_length - 横向象素,x1_length必须为8的
; // 整数倍,y1_length可以不必为8的整数倍。
; // Output : none
; // Description : Application Level Function,在LCD的指定区域显示图片
; //******************************************************************************
; void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x_length,INT8U y_length,const INT8U *pdata)
; {
.dbline 396
; INT8U x_address;
; INT8U y_address;
; for(x_address = x1;x_address <= x1 + (x_length >> 3) - 1;x_address++)
ldd R20,y+11
xjmp L68
L65:
.dbline 397
; {
.dbline 398
; for(y_address = y1;y_address < y1 + y_length;y_address++)
ldd R14,y+13
xjmp L72
L69:
.dbline 399
.dbline 400
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 401
L70:
.dbline 398
inc R14
L72:
.dbline 398
ldd R2,y+13
add R2,R10
cp R14,R2
brlo L69
.dbline 402
L66:
.dbline 396
inc R20
L68:
.dbline 396
mov R2,R12
lsr R2
lsr R2
lsr R2
ldd R24,y+11
add R24,R2
subi R24,1
cp R24,R20
brsh L65
.dbline -2
.dbline 403
; {
; LCD_Write_Data(x_address,y_address,*pdata++);
; }
; }
; }
L64:
adiw R28,1
xcall pop_gset5
adiw R28,4
.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 13 c
.dbsym l x1 11 c
.dbend
.area lit(rom, con, rel)
_DataBaseIndexList::
.word 16
.word _eChar_10
.word 32
.word _eChar_20
.word 33
.word _eChar_21
.word 34
.word _eChar_22
.word 35
.word _eChar_23
.word 36
.word _eChar_24
.word 37
.word _eChar_25
.word 38
.word _eChar_26
.word 39
.word _eChar_27
.word 40
.word _eChar_28
.word 41
.word _eChar_29
.word 42
.word _eChar_2A
.word 43
.word _eChar_2B
.word 44
.word _eChar_2C
.word 45
.word _eChar_2D
.word 46
.word _eChar_2E
.word 47
.word _eChar_2F
.word 48
.word _eChar_30
.word 49
.word _eChar_31
.word 50
.word _eChar_32
.word 51
.word _eChar_33
.word 52
.word _eChar_34
.word 53
.word _eChar_35
.word 54
.word _eChar_36
.word 55
.word _eChar_37
.word 56
.word _eChar_38
.word 57
.word _eChar_39
.word 58
.word _eChar_3A
.word 59
.word _eChar_3B
.word 60
.word _eChar_3C
.word 61
.word _eChar_3D
.word 62
.word _eChar_3E
.word 63
.word _eChar_3F
.word 64
.word _eChar_40
.word 65
.word _eChar_41
.word 66
.word _eChar_42
.word 67
.word _eChar_43
.word 68
.word _eChar_44
.word 69
.word _eChar_45
.word 70
.word _eChar_46
.word 71
.word _eChar_47
.word 72
.word _eChar_48
.word 73
.word _eChar_49
.word 74
.word _eChar_4A
.word 75
.word _eChar_4B
.word 76
.word _eChar_4C
.word 77
.word _eChar_4D
.word 78
.word _eChar_4E
.word 79
.word _eChar_4F
.word 80
.word _eChar_50
.word 81
.word _eChar_51
.word 82
.word _eChar_52
.word 83
.word _eChar_53
.word 84
.word _eChar_54
.word 85
.word _eChar_55
.word 86
.word _eChar_56
.word 87
.word _eChar_57
.word 88
.word _eChar_58
.word 89
.word _eChar_59
.word 90
.word _eChar_5A
.word 91
.word _eChar_5B
.word 92
.word _eChar_5C
.word 93
.word _eChar_5D
.word 94
.word _eChar_5E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -