⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864_3wires_draw.s

📁 IC为ST7920的12864LCD
💻 S
📖 第 1 页 / 共 4 页
字号:
; 函数作用:
; 说    明:
; ********************************************************************/
; 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 + -