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

📄 lcd_back.s

📁 AVR单片机 C语言程序设计经典实用
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -