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

📄 lcd.s

📁 AVR单片机 C语言程序设计经典实用
💻 S
📖 第 1 页 / 共 5 页
字号:
	cpi R24,64
	brlo L32
	.dbline 277
L29:
	.dbline 267
	inc R20
L31:
	.dbline 267
	cp R22,R20
	brsh L28
	.dbline -2
	.dbline 278
; 		{
; 			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 287
; 
; //******************************************************************************
; // 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 288
; 	if(y < 64)
	cpi R20,64
	brsh L37
	.dbline 289
; 	{
	.dbline 290
; 		Set_CS1(1);
	ldi R16,1
	xcall _Set_CS1
	.dbline 291
; 		Set_CS2(0);
	clr R16
	xcall _Set_CS2
	.dbline 292
; 		LCD_Command_Set_X(x);
	mov R16,R22
	xcall _LCD_Command_Set_X
	.dbline 293
; 		LCD_Command_Set_Y(y);
	mov R16,R20
	xcall _LCD_Command_Set_Y
	.dbline 294
; 	}
	xjmp L38
L37:
	.dbline 296
; 	else
; 	{
	.dbline 297
; 		Set_CS1(0);
	clr R16
	xcall _Set_CS1
	.dbline 298
; 		Set_CS2(1);
	ldi R16,1
	xcall _Set_CS2
	.dbline 299
; 		LCD_Command_Set_X(x);
	mov R16,R22
	xcall _LCD_Command_Set_X
	.dbline 300
; 		LCD_Command_Set_Y(y - 64);		
	mov R16,R20
	subi R16,64
	xcall _LCD_Command_Set_Y
	.dbline 301
; 	}
L38:
	.dbline 302
; 	LCD_Command_WriteByte(data);
	ldd R16,y+4
	xcall _LCD_Command_WriteByte
	.dbline -2
	.dbline 303
; }
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 313
	.dbline 315
	clr R10
	.dbline 316
	mov R24,R12
	cpi R24,64
	brsh L40
	mov R24,R14
	cpi R24,128
	brsh L40
	.dbline 317
	.dbline 318
	mov R20,R12
	lsr R20
	lsr R20
	lsr R20
	.dbline 319
	mov R22,R24
	.dbline 320
	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 321
L40:
	.dbline -2
	.dbline 322
; 
; //******************************************************************************
; // 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 333
; 
; //******************************************************************************
; // 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 337
; 	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 338
; 	{
	.dbline 339
; 		for(i = 0;i < 8;i++)
	clr R10
	xjmp L48
L45:
	.dbline 340
	.dbline 341
	ldd R22,y+11
	lsl R22
	.dbline 342
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 343
	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 344
L46:
	.dbline 339
	inc R10
L48:
	.dbline 339
	mov R24,R10
	cpi R24,8
	brlo L45
	.dbline 345
; 		{
; 			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 346
	.dbline 347
	ldd R22,y+11
	lsl R22
	subi R22,255    ; addi 1
	.dbline 348
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 349
	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 350
L50:
	.dbline 345
	inc R10
L52:
	.dbline 345
	mov R24,R10
	cpi R24,8
	brlo L49
	.dbline 351
L43:
	.dbline -2
	.dbline 352
; 		{
; 			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 363
; 
; //******************************************************************************
; // 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 367
; 	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 368
; 	{
	.dbline 369
; 		for(i = 0;i < 16;i++)
	clr R10
	xjmp L59
L56:
	.dbline 370
	.dbline 371
	ldd R22,y+11
	lsl R22
	.dbline 372
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 373
	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 374
L57:
	.dbline 369
	inc R10
L59:
	.dbline 369
	mov R24,R10
	cpi R24,16
	brlo L56
	.dbline 375
; 		{
; 			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 376
	.dbline 377
	ldd R22,y+11
	lsl R22
	subi R22,255    ; addi 1
	.dbline 378
	mov R20,R14
	lsl R20
	lsl R20
	lsl R20
	add R20,R10
	.dbline 379
	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 380
L61:
	.dbline 375
	inc R10
L63:
	.dbline 375
	mov R24,R10
	cpi R24,16
	brlo L60
	.dbline 381
L54:
	.dbline -2
	.dbline 382
; 		{
; 			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 393
; 
; //******************************************************************************
; // 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 396
; 	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 397
; 	{
	.dbline 398
; 		for(y_address = y1;y_address < y1 + y_length;y_address++)
	ldd R14,y+13
	xjmp L72
L69:
	.dbline 399
	.dbline 400
	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 401
L70:
	.dbline 398
	inc R14
L72:
	.dbline 398
	ldd R2,y+13
	add R2,R10
	cp R14,R2
	brlo L69
	.dbline 402
L66:
	.dbline 396
	inc R20
L68:
	.dbline 396
	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 403
; 		{
; 			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
	.area lit(rom, con, rel)
_DataBaseIndexList::
	.word 16
	.word _eChar_10
	.word 32
	.word _eChar_20
	.word 33
	.word _eChar_21
	.word 34
	.word _eChar_22
	.word 35
	.word _eChar_23
	.word 36
	.word _eChar_24
	.word 37
	.word _eChar_25
	.word 38
	.word _eChar_26
	.word 39
	.word _eChar_27
	.word 40
	.word _eChar_28
	.word 41
	.word _eChar_29
	.word 42
	.word _eChar_2A
	.word 43
	.word _eChar_2B
	.word 44
	.word _eChar_2C
	.word 45
	.word _eChar_2D
	.word 46
	.word _eChar_2E
	.word 47
	.word _eChar_2F
	.word 48
	.word _eChar_30
	.word 49
	.word _eChar_31
	.word 50
	.word _eChar_32
	.word 51
	.word _eChar_33
	.word 52
	.word _eChar_34
	.word 53
	.word _eChar_35
	.word 54
	.word _eChar_36
	.word 55
	.word _eChar_37
	.word 56
	.word _eChar_38
	.word 57
	.word _eChar_39
	.word 58
	.word _eChar_3A
	.word 59
	.word _eChar_3B
	.word 60
	.word _eChar_3C
	.word 61
	.word _eChar_3D
	.word 62
	.word _eChar_3E
	.word 63
	.word _eChar_3F
	.word 64
	.word _eChar_40
	.word 65
	.word _eChar_41
	.word 66
	.word _eChar_42
	.word 67
	.word _eChar_43
	.word 68
	.word _eChar_44
	.word 69
	.word _eChar_45
	.word 70
	.word _eChar_46
	.word 71
	.word _eChar_47
	.word 72
	.word _eChar_48
	.word 73
	.word _eChar_49
	.word 74
	.word _eChar_4A
	.word 75
	.word _eChar_4B
	.word 76
	.word _eChar_4C
	.word 77
	.word _eChar_4D
	.word 78
	.word _eChar_4E
	.word 79
	.word _eChar_4F
	.word 80
	.word _eChar_50
	.word 81
	.word _eChar_51
	.word 82
	.word _eChar_52
	.word 83
	.word _eChar_53
	.word 84
	.word _eChar_54
	.word 85
	.word _eChar_55
	.word 86
	.word _eChar_56
	.word 87
	.word _eChar_57
	.word 88
	.word _eChar_58
	.word 89
	.word _eChar_59
	.word 90
	.word _eChar_5A
	.word 91
	.word _eChar_5B
	.word 92
	.word _eChar_5C
	.word 93
	.word _eChar_5D
	.word 94
	.word _eChar_5E

⌨️ 快捷键说明

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