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

📄 lcd.s

📁 AVR单片机 C语言程序设计经典实用
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 269
; 	LCD_Command_SetStartLine(0);
	clr R16
	.dbline -2
	.dbline 270
; }
L26:
	.dbline 0 ; func end
	xjmp _LCD_Command_SetStartLine
	.dbend
	.dbfunc e LCD_Clear_Line _LCD_Clear_Line fV
;              i -> R20
;              j -> R10
;        endline -> R22
;      startline -> R10
	.even
_LCD_Clear_Line::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	.dbline -1
	.dbline 279
; 
; //******************************************************************************
; // Function    : LCD_Clear_Line
; // Input       : startline,endline - Line Range to be Cleare
; // Output      : none
; // Description : Command Level Function,Clear Screen Display
; //******************************************************************************
; void LCD_Clear_Line(INT8U startline,INT8U endline)
; {
	.dbline 281
; 	INT8U i,j;
; 	for(i = startline;i <= endline;i++)
	mov R20,R10
	xjmp L31
L28:
	.dbline 282
; 	{
	.dbline 283
; 		Set_CS1(1);
	ldi R16,1
	xcall _Set_CS1
	.dbline 284
; 		Set_CS2(1);
	ldi R16,1
	xcall _Set_CS2
	.dbline 285
; 		LCD_Command_Set_X(i);
	mov R16,R20
	xcall _LCD_Command_Set_X
	.dbline 286
; 		LCD_Command_Set_Y(0);
	clr R16
	xcall _LCD_Command_Set_Y
	.dbline 287
; 		for(j = 0;j < 64;j++)
	clr R10
	xjmp L35
L32:
	.dbline 288
	.dbline 289
	clr R16
	xcall _LCD_Command_WriteByte
	.dbline 290
L33:
	.dbline 287
	inc R10
L35:
	.dbline 287
	mov R24,R10
	cpi R24,64
	brlo L32
	.dbline 291
L29:
	.dbline 281
	inc R20
L31:
	.dbline 281
	cp R22,R20
	brsh L28
	.dbline -2
	.dbline 292
; 		{
; 			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 301
; 
; //******************************************************************************
; // 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 302
; 	if(y < 64)
	cpi R20,64
	brsh L37
	.dbline 303
; 	{
	.dbline 304
; 		Set_CS1(1);
	ldi R16,1
	xcall _Set_CS1
	.dbline 305
; 		Set_CS2(0);
	clr R16
	xcall _Set_CS2
	.dbline 306
; 		LCD_Command_Set_X(x);
	mov R16,R22
	xcall _LCD_Command_Set_X
	.dbline 307
; 		LCD_Command_Set_Y(y);
	mov R16,R20
	xcall _LCD_Command_Set_Y
	.dbline 308
; 	}
	xjmp L38
L37:
	.dbline 310
; 	else
; 	{
	.dbline 311
; 		Set_CS1(0);
	clr R16
	xcall _Set_CS1
	.dbline 312
; 		Set_CS2(1);
	ldi R16,1
	xcall _Set_CS2
	.dbline 313
; 		LCD_Command_Set_X(x);
	mov R16,R22
	xcall _LCD_Command_Set_X
	.dbline 314
; 		LCD_Command_Set_Y(y - 64);		
	mov R16,R20
	subi R16,64
	xcall _LCD_Command_Set_Y
	.dbline 315
; 	}
L38:
	.dbline 316
; 	LCD_Command_WriteByte(data);
	ldd R16,y+4
	xcall _LCD_Command_WriteByte
	.dbline -2
	.dbline 317
; }
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 327
	.dbline 329
	clr R10
	.dbline 330
	mov R24,R12
	cpi R24,64
	brsh L40
	mov R24,R14
	cpi R24,128
	brsh L40
	.dbline 331
	.dbline 332
	mov R20,R12
	lsr R20
	lsr R20
	lsr R20
	.dbline 333
	mov R22,R24
	.dbline 334
	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 335
L40:
	.dbline -2
	.dbline 336
; 
; //******************************************************************************
; // 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 347
; 
; //******************************************************************************
; // 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 351
; 	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 352
; 	{
	.dbline 353
; 		for(i = 0;i < 8;i++)
	clr R10
	xjmp L48
L45:
	.dbline 354
	.dbline 355
	ldd R22,y+11
	lsl R22
	.dbline 356
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 357
	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 358
L46:
	.dbline 353
	inc R10
L48:
	.dbline 353
	mov R24,R10
	cpi R24,8
	brlo L45
	.dbline 359
; 		{
; 			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 360
	.dbline 361
	ldd R22,y+11
	lsl R22
	subi R22,255    ; addi 1
	.dbline 362
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 363
	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 364
L50:
	.dbline 359
	inc R10
L52:
	.dbline 359
	mov R24,R10
	cpi R24,8
	brlo L49
	.dbline 365
L43:
	.dbline -2
	.dbline 366
; 		{
; 			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 377
; 
; //******************************************************************************
; // 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 381
; 	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 382
; 	{
	.dbline 383
; 		for(i = 0;i < 16;i++)
	clr R10
	xjmp L59
L56:
	.dbline 384
	.dbline 385
	ldd R22,y+11
	lsl R22
	.dbline 386
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 387
	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 388
L57:
	.dbline 383
	inc R10
L59:
	.dbline 383
	mov R24,R10
	cpi R24,16
	brlo L56
	.dbline 389
; 		{
; 			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 390
	.dbline 391
	ldd R22,y+11
	lsl R22
	subi R22,255    ; addi 1
	.dbline 392
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 393
	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 394
L61:
	.dbline 389
	inc R10
L63:
	.dbline 389
	mov R24,R10
	cpi R24,16
	brlo L60
	.dbline 395
L54:
	.dbline -2
	.dbline 396
; 		{
; 			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 407
; 
; //******************************************************************************
; // 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 410
; 	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 411
; 	{
	.dbline 412
; 		for(y_address = y1;y_address < y1 + y_length;y_address++)
	ldd R14,y+13
	xjmp L72
L69:
	.dbline 413
	.dbline 414
	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 415
L70:
	.dbline 412
	inc R14
L72:
	.dbline 412
	ldd R2,y+13
	add R2,R10
	cp R14,R2
	brlo L69
	.dbline 416
L66:
	.dbline 410
	inc R20
L68:
	.dbline 410
	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 417
; 		{
; 			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

⌨️ 快捷键说明

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