📄 lcd12864_3wires_draw.s
字号:
; 函数作用:
; 说 明:
; ********************************************************************/
; void Char_Set_XY(uchar x, uchar y, uchar *p)
; {
.dbline 388
; if(y == 0)
tst R10
brne L31
.dbline 389
; {
.dbline 390
; W_1byte(0,0,(0x80+x));
mov R24,R22
subi R24,128 ; addi 128
std y+0,R24
clr R18
clr R16
xcall _W_1byte
.dbline 391
; }
L31:
.dbline 392
; if(y == 1)
mov R24,R10
cpi R24,1
brne L33
.dbline 393
; {
.dbline 394
; W_1byte(0,0,(0x90+x));
mov R24,R22
subi R24,112 ; addi 144
std y+0,R24
clr R18
clr R16
xcall _W_1byte
.dbline 395
; }
L33:
.dbline 396
; if(y == 2)
mov R24,R10
cpi R24,2
brne L35
.dbline 397
; {
.dbline 398
; W_1byte(0,0,(0x88+x));
mov R24,R22
subi R24,120 ; addi 136
std y+0,R24
clr R18
clr R16
xcall _W_1byte
.dbline 399
; }
L35:
.dbline 400
; if(y == 3)
mov R24,R10
cpi R24,3
brne L40
.dbline 401
; {
.dbline 402
; W_1byte(0,0,(0x98+x));
mov R24,R22
subi R24,104 ; addi 152
std y+0,R24
clr R18
clr R16
xcall _W_1byte
.dbline 403
; }
xjmp L40
L39:
.dbline 405
.dbline 406
movw R30,R20
ld R2,Z+
movw R20,R30
std y+0,R2
ldi R18,1
clr R16
xcall _W_1byte
.dbline 407
L40:
.dbline 404
; while(*p != 0)
movw R30,R20
ldd R2,z+0
tst R2
brne L39
.dbline -2
L30:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r p 20 pc
.dbsym r y 10 c
.dbsym r x 22 c
.dbend
.dbfunc e Set_Draw _Set_Draw fV
.even
_Set_Draw::
sbiw R28,1
.dbline -1
.dbline 421
; {
; W_1byte(0,1,*p++);
; }
; }
; //===================================================================*/
;
; /********************************************************************
; 函 数 名:Set_Draw(
; 入口参数:无
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:
; 说 明:
; ********************************************************************/
; void Set_Draw(void)
; {
.dbline 423
; //W_1byte(0,0,0x01); //清屏
; Delay(20); //延时
ldi R16,20
ldi R17,0
xcall _Delay
.dbline 425
; //W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
; W_1byte(0,0,0x36);
ldi R24,54
std y+0,R24
clr R18
clr R16
xcall _W_1byte
.dbline 426
; Delay(20); //延时
ldi R16,20
ldi R17,0
xcall _Delay
.dbline -2
L42:
adiw R28,1
.dbline 0 ; func end
ret
.dbend
.dbfunc e Draw_Pic _Draw_Pic fV
; temp_y -> R20
; temp_x -> R22
; i -> R10
; j -> R12
; Draw -> R14,R15
; y -> R10
; x -> R20
.even
_Draw_Pic::
xcall push_gset5
mov R10,R18
mov R20,R16
sbiw R28,1
ldd R14,y+11
ldd R15,y+12
.dbline -1
.dbline 441
; }
; //===================================================================*/
; /********************************************************************
; 函 数 名:Draw_Pic 128*64
; 入口参数:x,y,*Draw
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:
; 说 明:
; ********************************************************************/
; /*************************************************/
;
; void Draw_Pic(uchar x, uchar y, const uchar *Draw)
; {
.dbline 443
; uchar i, j, temp_x, temp_y; //
; temp_x = x; //
mov R22,R20
.dbline 444
; temp_y = y; //
mov R20,R10
.dbline 445
; temp_x |= 0x80; //
ori R22,128
.dbline 446
; temp_y |= 0x80; //
ori R20,128
.dbline 447
; for(i=0;i<32;i++ ) //上半屏32行
clr R10
xjmp L47
L44:
.dbline 448
; {
.dbline 449
; W_1byte(0,0,temp_y++); //设置绘图区的Y地址坐标0
mov R2,R20
subi R20,255 ; addi 1
std y+0,R2
clr R18
clr R16
xcall _W_1byte
.dbline 450
; W_1byte(0,0,temp_x); //设置绘图区的X地址坐标0
std y+0,R22
clr R18
clr R16
xcall _W_1byte
.dbline 451
; for(j=0;j<16;j++) //
clr R12
xjmp L51
L48:
.dbline 452
.dbline 453
movw R2,R14
movw R24,R2
adiw R24,1
movw R14,R24
movw R30,R2
lpm R30,Z
std y+0,R30
ldi R18,1
clr R16
xcall _W_1byte
.dbline 454
L49:
.dbline 451
inc R12
L51:
.dbline 451
mov R24,R12
cpi R24,16
brlo L48
.dbline 455
L45:
.dbline 447
inc R10
L47:
.dbline 447
mov R24,R10
cpi R24,32
brlo L44
.dbline 457
; {
; W_1byte(0,1,*Draw++); //
; }
; }
;
; temp_x = 0x88; //
ldi R22,136
.dbline 458
; temp_y = 0x80; //
ldi R20,128
.dbline 459
; j = 0; //
clr R12
.dbline 460
; for(;i<64;i++ )
xjmp L55
L52:
.dbline 461
; {
.dbline 462
; W_1byte(0,0,temp_y++); //设置绘图区的Y地址坐标
mov R2,R20
subi R20,255 ; addi 1
std y+0,R2
clr R18
clr R16
xcall _W_1byte
.dbline 463
; W_1byte(0,0,temp_x); //设置绘图区的X地址坐标
std y+0,R22
clr R18
clr R16
xcall _W_1byte
.dbline 464
; for(j=0;j<16;j++)
clr R12
xjmp L59
L56:
.dbline 465
.dbline 466
movw R2,R14
movw R24,R2
adiw R24,1
movw R14,R24
movw R30,R2
lpm R30,Z
std y+0,R30
ldi R18,1
clr R16
xcall _W_1byte
.dbline 467
L57:
.dbline 464
inc R12
L59:
.dbline 464
mov R24,R12
cpi R24,16
brlo L56
.dbline 468
L53:
.dbline 460
inc R10
L55:
.dbline 460
mov R24,R10
cpi R24,64
brlo L52
.dbline -2
L43:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r temp_y 20 c
.dbsym r temp_x 22 c
.dbsym r i 10 c
.dbsym r j 12 c
.dbsym r Draw 14 pkc
.dbsym r y 10 c
.dbsym r x 20 c
.dbend
.dbfunc e Set_White _Set_White fV
; clr_y -> R14
; clr_x -> R10
; white_y -> R22
; white_x -> y+2
; i -> R20
; white_end_x -> y+1
; j -> R12
; clear -> y+15
; end_x -> y+13
; y -> R12
; x -> R20
.even
_Set_White::
xcall push_gset5
mov R12,R18
mov R20,R16
sbiw R28,3
.dbline -1
.dbline 474
; {
; W_1byte(0,1,*Draw++); //
; }
; }
;
; }
; /**************************************************/
; /**************************************************/
; void Set_White(uchar x,uchar y,uchar end_x,uchar clear)
; {
.dbline 476
; uchar i, j, white_x, white_y,white_end_x,clr_x,clr_y; //
; white_end_x = (end_x-x+1);
ldd R24,y+13
sub R24,R20
subi R24,255 ; addi 1
std y+1,R24
.dbline 477
; white_end_x <<= 1;
mov R2,R24
lsl R2
std y+1,R2
.dbline 478
; if(y==1)
mov R24,R12
cpi R24,1
brne L61
.dbline 479
; {
.dbline 480
; white_x = (0x80+x-1);
mov R24,R20
subi R24,128 ; addi 128
subi R24,1
std y+2,R24
.dbline 481
; white_y = 0x80;
ldi R22,128
.dbline 482
; clr_x = 0x80;
ldi R24,128
mov R10,R24
.dbline 483
; clr_y = 0x80;
mov R14,R24
.dbline 484
; }
xjmp L62
L61:
.dbline 485
; else if(y==2)
mov R24,R12
cpi R24,2
brne L63
.dbline 486
; {
.dbline 487
; white_x = (0x80+x-1);
mov R24,R20
subi R24,128 ; addi 128
subi R24,1
std y+2,R24
.dbline 488
; white_y = 0x90;
ldi R22,144
.dbline 489
; clr_x = 0x80;
ldi R24,128
mov R10,R24
.dbline 490
; clr_y = 0x90;
ldi R24,144
mov R14,R24
.dbline 491
; }
xjmp L64
L63:
.dbline 492
; else if(y==3)
mov R24,R12
cpi R24,3
brne L65
.dbline 493
; {
.dbline 494
; white_x = (0x88+x-1);
mov R24,R20
subi R24,120 ; addi 136
subi R24,1
std y+2,R24
.dbline 495
; white_y = 0x80;
ldi R22,128
.dbline 496
; clr_x = 0x88;
ldi R24,136
mov R10,R24
.dbline 497
; clr_y = 0x80;
ldi R24,128
mov R14,R24
.dbline 498
; }
xjmp L66
L65:
.dbline 499
; else if(y==4)
mov R24,R12
cpi R24,4
brne L67
.dbline 500
; {
.dbline 501
; white_x = (0x88+x-1);
mov R24,R20
subi R24,120 ; addi 136
subi R24,1
std y+2,R24
.dbline 502
; white_y = 0x90;
ldi R22,144
.dbline 503
; clr_x = 0x88;
ldi R24,136
mov R10,R24
.dbline 504
; clr_y = 0x90;
ldi R24,144
mov R14,R24
.dbline 505
; }
L67:
L66:
L64:
L62:
.dbline 506
; if(clear==0)//要反白时,先将整行的液晶全部清成不反白(此处行指y)
ldd R0,y+15
tst R0
brne L69
.dbline 507
; {
.dbline 508
; for(i=0;i<16;i++ ) //16行
clr R20
xjmp L74
L71:
.dbline 509
; {
.dbline 510
; W_1byte(0,0,clr_y++); //设置绘图区的Y地址坐标0
mov R2,R14
mov R24,R2
subi R24,255 ; addi 1
mov R14,R24
std y+0,R2
clr R18
clr R16
xcall _W_1byte
.dbline 511
; W_1byte(0,0,clr_x); //设置绘图区的X地址坐标0
std y+0,R10
clr R18
clr R16
xcall _W_1byte
.dbline 512
; for(j=0;j<16;j++) //
clr R12
xjmp L78
L75:
.dbline 513
.dbline 514
clr R2
std y+0,R2
ldi R18,1
clr R16
xcall _W_1byte
.dbline 515
nop
.dbline 516
L76:
.dbline 512
inc R12
L78:
.dbline 512
mov R24,R12
cpi R24,16
brlo L75
.dbline 517
L72:
.dbline 508
inc R20
L74:
.dbline 508
cpi R20,16
brlo L71
.dbline 518
; {
; W_1byte(0,1,0x00); //清成不反白
; nop();
; }
; }
; }
L69:
.dbline 519
; nop();
nop
.dbline 520
; for(i=0;i<16;i++ ) //16行,因为是16*16汉字
clr R20
xjmp L82
L79:
.dbline 521
; {
.dbline 522
; W_1byte(0,0,white_y++); //设置绘图区的Y地址坐标0
mov R2,R22
subi R22,255 ; addi 1
std y+0,R2
clr R18
clr R16
xcall _W_1byte
.dbline 523
; W_1byte(0,0,white_x); //设置绘图区的X地址坐标0
ldd R0,y+2
std y+0,R0
clr R18
clr R16
xcall _W_1byte
.dbline 524
; for(j=0;j<white_end_x;j++) //
clr R12
xjmp L86
L83:
.dbline 525
; {
.dbline 526
; if(clear==1)
ldd R24,y+15
cpi R24,1
brne L87
.dbline 527
; {
.dbline 528
; W_1byte(0,1,0x00); //取消这一行的8个点的反白,液晶地址自动加1
clr R2
std y+0,R2
ldi R18,1
clr R16
xcall _W_1byte
.dbline 530
; //(此处行指一个一个液晶点所组成的行)
; }
xjmp L88
L87:
.dbline 532
; else
; {
.dbline 533
; W_1byte(0,1,0xff); //反白这一行的8个点,液晶地址自动加1
ldi R24,255
std y+0,R24
ldi R18,1
clr R16
xcall _W_1byte
.dbline 535
; //(此处行指一个一个液晶点所组成的行)
; }
L88:
.dbline 536
nop
.dbline 537
L84:
.dbline 524
inc R12
L86:
.dbline 524
ldd R0,y+1
cp R12,R0
brlo L83
.dbline 538
L80:
.dbline 520
inc R20
L82:
.dbline 520
cpi R20,16
brlo L79
.dbline -2
L60:
adiw R28,3
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r clr_y 14 c
.dbsym r clr_x 10 c
.dbsym r white_y 22 c
.dbsym l white_x 2 c
.dbsym r i 20 c
.dbsym l white_end_x 1 c
.dbsym r j 12 c
.dbsym l clear 15 c
.dbsym l end_x 13 c
.dbsym r y 12 c
.dbsym r x 20 c
.dbend
.area data(ram, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega128\LCD12864\lcd12864_3wires_draw.c
L8:
.blkb 5
.area idata
.byte 183,180,176,215,0
.area data(ram, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega128\LCD12864\lcd12864_3wires_draw.c
L7:
.blkb 17
.area idata
.byte 191,201,210,212,181,165,215,214,183,180,176,215,187,242,178,187
.byte 0
.area data(ram, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega128\LCD12864\lcd12864_3wires_draw.c
L6:
.blkb 9
.area idata
.byte 183,180,176,215,193,183,207,176,0
.area data(ram, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega128\LCD12864\lcd12864_3wires_draw.c
L5:
.blkb 15
.area idata
.byte 'S,'T,55,57,50,48,95,51,95,'w,'i,'r,'e,'s,0
.area data(ram, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega128\LCD12864\lcd12864_3wires_draw.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -