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

📄 1335.s

📁 AVR单片机
💻 S
📖 第 1 页 / 共 3 页
字号:
;     lcd_pixel(x + xc, y - yc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	sub R18,R22
	sbc R19,R23
	ldd R16,y+11
	ldd R17,y+12
	add R16,R20
	adc R17,R21
	xcall _lcd_pixel
	.dbline 329
;     lcd_pixel(x - xc, y + yc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	add R18,R22
	adc R19,R23
	ldd R16,y+11
	ldd R17,y+12
	sub R16,R20
	sbc R17,R21
	xcall _lcd_pixel
	.dbline 330
;     lcd_pixel(x - xc, y - yc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	sub R18,R22
	sbc R19,R23
	ldd R16,y+11
	ldd R17,y+12
	sub R16,R20
	sbc R17,R21
	xcall _lcd_pixel
	.dbline 331
;     lcd_pixel(x + yc, y + xc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	add R18,R20
	adc R19,R21
	ldd R16,y+11
	ldd R17,y+12
	add R16,R22
	adc R17,R23
	xcall _lcd_pixel
	.dbline 332
;     lcd_pixel(x + yc, y - xc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	sub R18,R20
	sbc R19,R21
	ldd R16,y+11
	ldd R17,y+12
	add R16,R22
	adc R17,R23
	xcall _lcd_pixel
	.dbline 333
;     lcd_pixel(x - yc, y + xc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	add R18,R20
	adc R19,R21
	ldd R16,y+11
	ldd R17,y+12
	sub R16,R22
	sbc R17,R23
	xcall _lcd_pixel
	.dbline 334
;     lcd_pixel(x - yc, y - xc, show);
	std y+0,R10
	ldd R18,y+13
	ldd R19,y+14
	sub R18,R20
	sbc R19,R21
	ldd R16,y+11
	ldd R17,y+12
	sub R16,R22
	sbc R17,R23
	xcall _lcd_pixel
	.dbline 335
;     if (p < 0)
	movw R24,R12
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L63
X12:
	.dbline 336
;       p += (xc++ << 2) + 6;
	movw R2,R20
	subi R20,255  ; offset = 1
	sbci R21,255
	movw R24,R2
	lsl R24
	rol R25
	lsl R24
	rol R25
	adiw R24,6
	add R12,R24
	adc R13,R25
	xjmp L64
L63:
	.dbline 338
;     else
;       p += ((xc++ - yc--)<<2) + 10;
	movw R2,R20
	subi R20,255  ; offset = 1
	sbci R21,255
	movw R14,R22
	subi R22,1
	sbci R23,0
	movw R24,R2
	sub R24,R14
	sbc R25,R15
	lsl R24
	rol R25
	lsl R24
	rol R25
	adiw R24,10
	add R12,R24
	adc R13,R25
L64:
	.dbline 339
;   }
L61:
	.dbline 325
	cp R22,R20
	cpc R23,R21
	brlt X14
	xjmp L60
X14:
X13:
	.dbline -2
L59:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r p 12 I
	.dbsym r yc 22 I
	.dbsym r xc 20 I
	.dbsym r show 10 c
	.dbsym r radius 12 I
	.dbsym l y 13 I
	.dbsym l x 11 I
	.dbend
	.dbfunc e lcd_line _lcd_line fV
;          stepy -> R12,R13
;          stepx -> R14,R15
;             dx -> R22,R23
;             dy -> R20,R21
;       fraction -> R10,R11
;           show -> y+19
;             y2 -> y+17
;             x2 -> y+15
;             y1 -> y+13
;             x1 -> y+11
	.even
_lcd_line::
	xcall push_arg4
	xcall push_xgsetF0FC
	sbiw R28,1
	.dbline -1
	.dbline 348
; }
; 
; 
; /***********************************************************************
; Draws a line from x1,y1 go x2,y2. Line can be drawn in any direction.
; Set show to 1 to draw pixel, set to 0 to hide pixel.
; ***********************************************************************/
; void lcd_line(int x1, int y1, int x2, int y2, unsigned char show) 
; {
	.dbline 349
;   int dy = y2 - y1;
	ldd R20,y+17
	ldd R21,y+18
	ldd R0,y+13
	ldd R1,y+14
	sub R20,R0
	sbc R21,R1
	.dbline 350
;   int dx = x2 - x1;
	ldd R22,y+15
	ldd R23,y+16
	ldd R0,y+11
	ldd R1,y+12
	sub R22,R0
	sbc R23,R1
	.dbline 352
;   int stepx, stepy, fraction;
;   if (dy < 0) 
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brge L66
X15:
	.dbline 353
;   {
	.dbline 354
;     dy = -dy;
	com R20
	com R21
	subi R20,0xFF
	sbci R21,0xFF
	.dbline 355
;     stepy = -1;
	ldi R24,-1
	ldi R25,-1
	movw R12,R24
	.dbline 356
;   }
	xjmp L67
L66:
	.dbline 358
;   else 
;   {
	.dbline 359
;     stepy = 1;
	ldi R24,1
	ldi R25,0
	movw R12,R24
	.dbline 360
;   }
L67:
	.dbline 361
;   if (dx < 0)
	cpi R22,0
	ldi R30,0
	cpc R23,R30
	brge L68
X16:
	.dbline 362
;   {
	.dbline 363
;     dx = -dx;
	com R22
	com R23
	subi R22,0xFF
	sbci R23,0xFF
	.dbline 364
;     stepx = -1;
	ldi R24,-1
	ldi R25,-1
	movw R14,R24
	.dbline 365
;   }
	xjmp L69
L68:
	.dbline 367
;   else
;   {
	.dbline 368
;     stepx = 1;
	ldi R24,1
	ldi R25,0
	movw R14,R24
	.dbline 369
;   }
L69:
	.dbline 370
;   dy <<= 1;
	lsl R20
	rol R21
	.dbline 371
;   dx <<= 1;
	lsl R22
	rol R23
	.dbline 372
;   lcd_pixel(x1,y1,show);
	ldd R0,y+19
	std y+0,R0
	ldd R18,y+13
	ldd R19,y+14
	ldd R16,y+11
	ldd R17,y+12
	xcall _lcd_pixel
	.dbline 373
;   if (dx > dy)
	cp R20,R22
	cpc R21,R23
	brge L70
X17:
	.dbline 374
;   {
	.dbline 375
;     fraction = dy - (dx >> 1); 
	movw R2,R22
	asr R3
	ror R2
	movw R10,R20
	sub R10,R2
	sbc R11,R3
	xjmp L73
L72:
	.dbline 377
;     while (x1 != x2)
;     {
	.dbline 378
;       if (fraction >= 0)
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L75
X18:
	.dbline 379
;       {
	.dbline 380
;         y1 += stepy;
	ldd R0,y+13
	ldd R1,y+14
	add R0,R12
	adc R1,R13
	std y+14,R1
	std y+13,R0
	.dbline 381
;         fraction -= dx;
	sub R10,R22
	sbc R11,R23
	.dbline 382
;       }
L75:
	.dbline 383
;       x1 += stepx;
	ldd R0,y+11
	ldd R1,y+12
	add R0,R14
	adc R1,R15
	std y+12,R1
	std y+11,R0
	.dbline 384
;       fraction += dy;  
	add R10,R20
	adc R11,R21
	.dbline 385
;       lcd_pixel(x1,y1,show);
	ldd R0,y+19
	std y+0,R0
	ldd R18,y+13
	ldd R19,y+14
	ldd R16,y+11
	ldd R17,y+12
	xcall _lcd_pixel
	.dbline 386
;     }
L73:
	.dbline 376
	ldd R0,y+11
	ldd R1,y+12
	ldd R16,y+15
	ldd R17,y+16
	cp R0,R16
	cpc R1,R17
	brne L72
X19:
	.dbline 387
;   }
	xjmp L71
L70:
	.dbline 389
;   else
;   {
	.dbline 390
;     fraction = dx - (dy >> 1);
	movw R2,R20
	asr R3
	ror R2
	movw R10,R22
	sub R10,R2
	sbc R11,R3
	xjmp L78
L77:
	.dbline 392
;     while (y1 != y2)
;     {
	.dbline 393
;       if (fraction >= 0)
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L80
X20:
	.dbline 394
;       {
	.dbline 395
;         x1 += stepx;
	ldd R0,y+11
	ldd R1,y+12
	add R0,R14
	adc R1,R15
	std y+12,R1
	std y+11,R0
	.dbline 396
;         fraction -= dy;
	sub R10,R20
	sbc R11,R21
	.dbline 397
;       }
L80:
	.dbline 398
;       y1 += stepy;
	ldd R0,y+13
	ldd R1,y+14
	add R0,R12
	adc R1,R13
	std y+14,R1
	std y+13,R0
	.dbline 399
;       fraction += dx;
	add R10,R22
	adc R11,R23
	.dbline 400
;       lcd_pixel(x1,y1,show);
	ldd R0,y+19
	std y+0,R0
	ldd R18,y+13
	ldd R19,y+14
	ldd R16,y+11
	ldd R17,y+12
	xcall _lcd_pixel
	.dbline 401
;     }
L78:
	.dbline 391
	ldd R0,y+13
	ldd R1,y+14
	ldd R16,y+17
	ldd R17,y+18
	cp R0,R16
	cpc R1,R17
	brne L77
X21:
	.dbline 402
;   }
L71:
	.dbline -2
L65:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r stepy 12 I
	.dbsym r stepx 14 I
	.dbsym r dx 22 I
	.dbsym r dy 20 I
	.dbsym r fraction 10 I
	.dbsym l show 19 c
	.dbsym l y2 17 I
	.dbsym l x2 15 I
	.dbsym l y1 13 I
	.dbsym l x1 11 I
	.dbend
	.dbfunc e lcd_chinesechar _lcd_chinesechar fV
;        Address -> R20,R21
;           high -> R20
;            low -> R22
;              k -> R10
;              i -> R12
;    lcd_fanxian -> y+16
;         length -> R14
;          width -> y+12
;          code1 -> y+10
;              y -> R20,R21
;              x -> R22,R23
	.even
_lcd_chinesechar::
	xcall push_xgsetF0FC
	movw R20,R18
	movw R22,R16
	ldd R14,y+14
	.dbline -1
	.dbline 437
; }
; 
; /***********************************************************************
; Happy end :-)
; ***********************************************************************/
; 
; 
; /*
; *******************************************************************************
; *
; *函数名称:void lcd_chinesechar(int x, int y,unsigned char *code1 ,
;                      unsigned char width,unsigned char length,unsigned char lcd_fanxian) 
; *
; *功能: 在指定位置显示一个width*length的汉字
; *
; *变量说明:
; *
; *
; *
; *
; *
; *
; *作者:段胜柱
; *
; *时间:
; ***************************************************************************
; */
; 
; 
; 
; 
; 
; void lcd_chinesechar(int x, int y,unsigned char const  *code1 ,
;                      unsigned char width,unsigned char length,unsigned char lcd_fanxian) 
; {
	.dbline 442
;     unsigned char i,k;
; 	int Address;
; 
; 	unsigned char low,high;	
; 	x--;
	subi R22,1
	sbci R23,0
	.dbline 443
; 	y--;
	subi R20,1
	sbci R21,0
	.dbline 444
; 	Address = (y * (LCD_X_SIZE/8)) + (x / 8);
	ldi R18,8
	ldi R19,0
	movw R16,R22
	xcall div16s
	movw R2,R16
	ldi R16,40
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R20,R16
	add R20,R2
	adc R21,R3
	.dbline 445
; 	low = (unsigned char) (Address & 0x00ff);
	mov R22,R20
	andi R23,0
	.dbline 446
;     high = (unsigned char) (((Address & 0xff00) >> 8));
	andi R20,0
	mov R20,R21
	clr R21
	.dbline 447
;     lcd_write_command(0x4f);
	ldi R16,79
	xcall _lcd_write_command
	.dbline 449
;     
;     for(k=0;k<width;k++)
	clr R10
	xjmp L86
L83:
	.dbline 450
;     {
	.dbline 452
; 	
;         lcd_write_command(0x46);
	ldi R16,70
	xcall _lcd_write_command
	.dbline 453
;         lcd_write_data(low + k*length);
	mul R10,R14
	mov R16,R22
	add R16,R0
	xcall _lcd_write_data
	.dbline 454
;         lcd_write_data(high);
	mov R16,R20
	xcall _lcd_write_data
	.dbline 455
;         lcd_write_command(0x42);
	ldi R16,66
	xcall _lcd_write_command
	.dbline 457
;         
;         for(i=0;i<length;i++)
	clr R12
	xjmp L90
L87:
	.dbline 458
;         {
	.dbline 459
;             if(lcd_fanxian == 1)
	ldd R24,y+16
	cpi R24,1
	brne L91
X22:
	.dbline 460
;             {                
	.dbline 461
;                lcd_write_data(~code1[i * width + k]);lcd_delay(20000);
	ldd R0,y+12
	mul R12,R0
	movw R30,R0
	mov R2,R10
	clr R3
	add R30,R2
	adc R31,R3
	ldd R0,y+10
	ldd R1,y+11
	add R30,R0
	adc R31,R1
	elpm R16,Z
	com R16
	xcall _lcd_write_data
	.dbline 461
	ldi R16,20000
	ldi R17,78
	xcall _lcd_delay
	.dbline 462
;             }
	xjmp L92
L91:
	.dbline 464
;             else
;             {
	.dbline 466
;                 
;                 lcd_write_data(code1[i * width + k]);
	ldd R0,y+12
	mul R12,R0
	movw R30,R0
	mov R2,R10
	clr R3
	add R30,R2
	adc R31,R3
	ldd R0,y+10
	ldd R1,y+11
	add R30,R0
	adc R31,R1
	elpm R16,Z
	xcall _lcd_write_data
	.dbline 467
; 				lcd_delay(2000);
	ldi R16,2000
	ldi R17,7
	xcall _lcd_delay
	.dbline 468
;             }
L92:
	.dbline 469
;         }
L88:
	.dbline 457
	inc R12
L90:
	.dbline 457
	cp R12,R14
	brlo L87
X23:
	.dbline 470
;     }
L84:
	.dbline 449
	inc R10
L86:
	.dbline 449
	ldd R0,y+12
	cp R10,R0
	brsh X25
	xjmp L83
X25:
X24:
	.dbline -2
L82:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r Address 20 I
	.dbsym r high 20 c
	.dbsym r low 22 c
	.dbsym r k 10 c
	.dbsym r i 12 c
	.dbsym l lcd_fanxian 16 c
	.dbsym r length 14 c
	.dbsym l width 12 c
	.dbsym l code1 10 pkc
	.dbsym r y 20 I
	.dbsym r x 22 I
	.dbend
	.area lit(rom, con, rel)
L58:
	.word 0x0,0x4334
L57:
	.word 0xf5c3,0x4048
; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -