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

📄 lcd.s

📁 AVR单片机 C语言程序设计经典实用
💻 S
📖 第 1 页 / 共 2 页
字号:
; }
L18:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status 22 c
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_Read_Data _LCD_Read_Data fc
;           data -> R20
;         status -> R20
	.even
_LCD_Read_Data::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 169
; 
; //******************************************************************************
; // Function    : LCD_Read_Data
; // Input       : status - Detect LCD Status when 1 
; // Output      : Data read from LCD
; // Description : Read Data from LCD
; //******************************************************************************
; INT8U LCD_Read_Data(INT8U status)
; {
	.dbline 171
; 	INT8U data;
; 	if(status == 1)
	cpi R20,1
	brne L25
	.dbline 172
; 	{
L27:
	.dbline 173
	.dbline 173
	.dbline 173
L28:
	.dbline 173
; 		while(LCD_Read_BF() != 0) {;}
	xcall _LCD_Read_BF
	tst R16
	brne L27
	.dbline 174
; 	}
L25:
	.dbline 175
; 	DDRA = 0x00;
	clr R2
	out 0x1a,R2
	.dbline 176
; 	Set_EN(0);
	clr R16
	xcall _Set_EN
	.dbline 177
; 	Set_RS(1);
	ldi R16,1
	xcall _Set_RS
	.dbline 178
; 	Set_RW(1);
	ldi R16,1
	xcall _Set_RW
	.dbline 179
; 	Set_EN(1);
	ldi R16,1
	xcall _Set_EN
	.dbline 180
; 	NOP();
	nop
	.dbline 181
; 	NOP();
	nop
	.dbline 182
; 	data = PINA;
	in R20,0x19
	.dbline 183
; 	Set_EN(0);
	clr R16
	xcall _Set_EN
	.dbline 184
; 	DDRA = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 185
; 	return(data);
	mov R16,R20
	.dbline -2
L24:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbsym r status 20 c
	.dbend
	.dbfunc e LCD_Reset _LCD_Reset fV
	.even
_LCD_Reset::
	.dbline -1
	.dbline 195
; }
; 
; //******************************************************************************
; // Function    : LCD_Reset
; // Input       : none 
; // Output      : none
; // Description : LCD software reset,must execute according to time sequence
; //******************************************************************************
; void LCD_Reset(void)
; {
	.dbline 196
; 	Delay_ms(15);
	ldi R16,15
	xcall _Delay_ms
	.dbline 197
; 	LCD_Write_Command(0x38,0);
	clr R18
	ldi R16,56
	xcall _LCD_Write_Command
	.dbline 198
; 	Delay_ms(5);
	ldi R16,5
	xcall _Delay_ms
	.dbline 199
; 	LCD_Write_Command(0x38,0);
	clr R18
	ldi R16,56
	xcall _LCD_Write_Command
	.dbline 200
; 	Delay_ms(5);
	ldi R16,5
	xcall _Delay_ms
	.dbline 201
; 	LCD_Write_Command(0x38,0);
	clr R18
	ldi R16,56
	xcall _LCD_Write_Command
	.dbline 202
; 	LCD_Write_Command(0x38,1);
	ldi R18,1
	ldi R16,56
	xcall _LCD_Write_Command
	.dbline 203
; 	LCD_Write_Command(0x08,1);
	ldi R18,1
	ldi R16,8
	xcall _LCD_Write_Command
	.dbline 204
; 	LCD_Write_Command(0x01,1);
	ldi R18,1
	ldi R16,1
	xcall _LCD_Write_Command
	.dbline 205
; 	LCD_Write_Command(0x06,1);
	ldi R18,1
	ldi R16,6
	xcall _LCD_Write_Command
	.dbline 206
; 	LCD_Write_Command(0x0C,1);
	ldi R18,1
	ldi R16,12
	.dbline -2
	.dbline 207
; }
L30:
	.dbline 0 ; func end
	xjmp _LCD_Write_Command
	.dbend
	.dbfunc e LCD_Show_Char _LCD_Show_Char fV
;        address -> R20
;           code -> y+4
;              y -> R20
;              x -> R22
	.even
_LCD_Show_Char::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 218
	.dbline 220
	cpi R22,2
	brsh L32
	cpi R20,16
	brsh L32
	.dbline 221
	.dbline 222
	ldi R24,64
	mul R24,R22
	mov R2,R0
	add R2,R20
	mov R20,R2
	.dbline 223
	ldi R18,1
	mov R16,R2
	ori R16,128
	xcall _LCD_Write_Command
	.dbline 224
	ldi R18,1
	ldd R16,y+4
	xcall _LCD_Write_Data
	.dbline 225
L32:
	.dbline -2
	.dbline 226
; 
; //******************************************************************************
; // Function    : LCD_Show_Char
; // Input       : x - Row of LCD(0 to 1);
; //               y - Column of LCD(0 to 15);
; //               code - Code of Char  
; // Output      : none
; // Description : Display a Char at Setting Row and Column
; //******************************************************************************
; void LCD_Show_Char(INT8U x,INT8U y,INT8U code)
; {
; 	INT8U address;
; 	if((x < 2) && (y < 16))
; 	{
; 		address = 0x40 * x + y;
; 		LCD_Write_Command(0x80 | address,1);
; 		LCD_Write_Data(code,1);
; 	}
; }
L31:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym l code 4 c
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e LCD_Show_String _LCD_Show_String fV
;      x_address -> R20
;      y_address -> R22
;          pdata -> R10,R11
;              y -> R12
;              x -> R22
	.even
_LCD_Show_String::
	xcall push_gset4
	mov R12,R18
	mov R22,R16
	sbiw R28,1
	ldd R10,y+9
	ldd R11,y+10
	.dbline -1
	.dbline 237
; 
; //******************************************************************************
; // Function    : LCD_Show_String
; // Input       : x - Row of LCD(0 to 1);
; //               y - Column of LCD(0 to 15);
; //               pdata - Pointer to a String  
; // Output      : none
; // Description : Display a String from at Setting Row and Column
; //******************************************************************************
; void LCD_Show_String(INT8U x,INT8U y,INT8U *pdata)
; {
	.dbline 238
; 	INT8U x_address = x;
	mov R20,R22
	.dbline 239
; 	INT8U y_address = y;
	mov R22,R12
	xjmp L36
L35:
	.dbline 241
; 	while(*pdata != '\0')
; 	{
	.dbline 242
; 		LCD_Show_Char(x_address,y_address,*pdata++);
	movw R30,R10
	ld R2,Z+
	movw R10,R30
	std y+0,R2
	mov R18,R22
	mov R16,R20
	xcall _LCD_Show_Char
	.dbline 243
; 		y_address++;
	inc R22
	.dbline 244
; 		if((x_address == 0) && (y_address >= 16))
	tst R20
	brne L38
	cpi R22,16
	brlo L38
	.dbline 245
; 		{ 
	.dbline 246
; 			x_address = 1;
	ldi R20,1
	.dbline 247
; 			y_address = 0;
	clr R22
	.dbline 248
; 		}
	xjmp L39
L38:
	.dbline 249
; 		else if((x_address == 1) && (y_address >= 16))
	cpi R20,1
	brne L40
	cpi R22,16
	brlo L40
	.dbline 250
; 		{
	.dbline 251
; 			return;
	xjmp L34
L40:
L39:
	.dbline 253
L36:
	.dbline 240
	movw R30,R10
	ldd R2,z+0
	tst R2
	brne L35
	.dbline -2
	.dbline 254
; 		}
; 	}
; }
L34:
	adiw R28,1
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r x_address 20 c
	.dbsym r y_address 22 c
	.dbsym r pdata 10 pc
	.dbsym r y 12 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e Delay_ms _Delay_ms fV
;            cnt -> R20,R21
;           time -> R16
	.even
_Delay_ms::
	xcall push_gset1
	.dbline -1
	.dbline 263
; 
; //******************************************************************************
; // Function    : Delay_ms
; // Input       : time - Delay Time  
; // Output      : none
; // Description : Inaccurate ms Level Delay for Software Reset of LCD
; //******************************************************************************
; void Delay_ms(INT8U time)
; {
	.dbline 264
; 	INT16U cnt = 0;
	clr R20
	clr R21
	xjmp L44
L43:
	.dbline 266
; 	while(time--)
; 	{
	.dbline 267
; 		for(cnt = 0;cnt < 5000;cnt++)
	clr R20
	clr R21
	xjmp L49
L46:
	.dbline 268
	.dbline 269
	nop
	.dbline 270
L47:
	.dbline 267
	subi R20,255  ; offset = 1
	sbci R21,255
L49:
	.dbline 267
	cpi R20,136
	ldi R30,19
	cpc R21,R30
	brlo L46
	.dbline 271
L44:
	.dbline 265
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L43
	.dbline -2
	.dbline 272
; 		{
; 			NOP();
; 		}
; 	}
; }
L42:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r cnt 20 i
	.dbsym r time 16 c
	.dbend

⌨️ 快捷键说明

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