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

📄 lcd_driver.src

📁 128x64点阵液晶屏驱动
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 
; void lcd_write_data(char dat)

	RSEG  ?PR?_lcd_write_data?LCD_DRIVER
L?0053:
	USING	0
	CLR  	A
	MOV  	R7,A
	LCALL	_lcd_write_data
	CLR  	A
	MOV  	R7,A
_lcd_write_data:
	USING	0
			; SOURCE LINE # 96
;---- Variable 'dat?552' assigned to Register 'R3' ----
	MOV  	R3,AR7
; {
			; SOURCE LINE # 97
; 	char start_byte;
; 	int command;
; 
; 	start_byte = SYNC_CHARACTER | START_BYTE_RS;
			; SOURCE LINE # 101
;---- Variable 'start_byte?553' assigned to Register 'R7' ----
	MOV  	R7,#0FAH
; 	lcd_send_byte(start_byte);
			; SOURCE LINE # 102
	LCALL	_lcd_send_byte
; 
; 	command = dat & 0xf0;
			; SOURCE LINE # 104
	MOV  	A,R3
	ANL  	A,#0F0H
	MOV  	R7,A
	RLC  	A
	SUBB 	A,ACC
;---- Variable 'command?554' assigned to Register 'R4/R5' ----
	MOV  	R5,AR7
; 	command <<= 8;
			; SOURCE LINE # 105
	MOV  	A,R5
	MOV  	R4,A
; 	command &= 0xff00;
			; SOURCE LINE # 106
; 	command |= (dat & 0x0f) << 4;
			; SOURCE LINE # 107
	MOV  	A,R3
	ANL  	A,#0FH
	MOV  	R7,A
	RLC  	A
	SUBB 	A,ACC
	MOV  	R6,A
	MOV  	A,R7
	SWAP 	A
	MOV  	R0,A
	ANL  	A,#0FH
	XCH  	A,R0
	XRL  	A,R0
	MOV  	R7,A
	MOV  	A,R6
	SWAP 	A
	ANL  	A,#0F0H
	ORL  	A,R0
	MOV  	R6,A
	MOV  	A,R7
	MOV  	R5,A
	MOV  	A,R6
	ORL  	AR4,A
; 
; 	lcd_send_word(command);
			; SOURCE LINE # 109
	MOV  	R7,AR5
	MOV  	R6,AR4
	LJMP 	_lcd_send_word
; END OF _lcd_write_data

; }
; 
; void lcd_init(void)

	RSEG  ?PR?lcd_init?LCD_DRIVER
lcd_init:
	USING	0
			; SOURCE LINE # 112
; {
			; SOURCE LINE # 113
; 	SET_LCD_SCLK(0);
			; SOURCE LINE # 114
	CLR  	P2_7
; 	SET_LCD_CS(1);
			; SOURCE LINE # 115
	SETB 	P2_5
; 	SET_LCD_RESET(0);
			; SOURCE LINE # 116
	CLR  	P0_0
; 	Delay(200);
			; SOURCE LINE # 117
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 	SET_LCD_RESET(1);
			; SOURCE LINE # 118
	SETB 	P0_0
; 	Delay(200);
			; SOURCE LINE # 119
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 
; 	lcd_write_instruction(0x38, 0);
			; SOURCE LINE # 121
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#038H
	LCALL	_lcd_write_instruction
; 	Delay(200);
			; SOURCE LINE # 122
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 	lcd_write_instruction(0x38, 0);
			; SOURCE LINE # 123
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#038H
	LCALL	_lcd_write_instruction
; 	Delay(200);
			; SOURCE LINE # 124
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 	lcd_write_instruction(0x38, 0);
			; SOURCE LINE # 125
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#038H
	LCALL	_lcd_write_instruction
; 	Delay(200);
			; SOURCE LINE # 126
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 
; 	lcd_write_instruction(0x01, 1);
			; SOURCE LINE # 128
	MOV  	R5,#01H
	MOV  	R7,#01H
	LCALL	_lcd_write_instruction
; 	Delay(3000);
			; SOURCE LINE # 129
	MOV  	R7,#0B8H
	MOV  	R6,#0BH
	LCALL	_Delay
; 	lcd_write_instruction(0x06, 1);
			; SOURCE LINE # 130
	MOV  	R5,#01H
	MOV  	R7,#06H
	LCALL	_lcd_write_instruction
; 	Delay(200);
			; SOURCE LINE # 131
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LCALL	_Delay
; 	lcd_write_instruction(0x0c, 1);
			; SOURCE LINE # 132
	MOV  	R5,#01H
	MOV  	R7,#0CH
	LCALL	_lcd_write_instruction
; 	Delay(200);
			; SOURCE LINE # 133
	MOV  	R7,#0C8H
	MOV  	R6,#00H
	LJMP 	_Delay
; END OF lcd_init

; }
; 
; void lcd_char(int x, int y, unsigned short *buf, int height, int width)

	RSEG  ?PR?_lcd_char?LCD_DRIVER
_lcd_char:
	USING	0
			; SOURCE LINE # 136
	MOV  	buf?757,R3
	MOV  	buf?757+01H,R2
	MOV  	buf?757+02H,R1
;---- Variable 'y?756' assigned to Register 'R4/R5' ----
;---- Variable 'x?755' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 137
; 	char row, col, convert_coordinate;
; 	int i, j;
; 	//int 
; 	
; 	if (y < 32)
			; SOURCE LINE # 142
	CLR  	C
	MOV  	A,R5
	SUBB 	A,#020H
	MOV  	A,R4
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0024
; 	{
			; SOURCE LINE # 143
; 		row = y;
			; SOURCE LINE # 144
	MOV  	row?760,R5
; 		convert_coordinate = 0;
			; SOURCE LINE # 145
	CLR  	A
	MOV  	convert_coordinate?762,A
; 	}
			; SOURCE LINE # 146
	SJMP 	?C0025
?C0024:
; 	else
; 	{
			; SOURCE LINE # 148
; 		row = y - 32;
			; SOURCE LINE # 149
	MOV  	A,R5
	ADD  	A,#0E0H
	MOV  	row?760,A
; 		convert_coordinate = 8;
			; SOURCE LINE # 150
	MOV  	convert_coordinate?762,#08H
; 	}
			; SOURCE LINE # 151
?C0025:
; 	row |= 0x80;
			; SOURCE LINE # 152
	ORL  	row?760,#080H
; 
; 	col = x / 16;
			; SOURCE LINE # 154
	MOV  	R4,#00H
	MOV  	R5,#010H
	LCALL	?C?SIDIV
	MOV  	col?761,R7
; 	col += convert_coordinate;
			; SOURCE LINE # 155
	MOV  	A,convert_coordinate?762
	ADD  	A,col?761
	MOV  	col?761,A
; 	col |= 0x80;
			; SOURCE LINE # 156
	ORL  	col?761,#080H
; 	
; 	lcd_write_instruction(0x3e, 1);
			; SOURCE LINE # 158
	MOV  	R5,#01H
	MOV  	R7,#03EH
	LCALL	_lcd_write_instruction
; 	Delay(50);
			; SOURCE LINE # 159
	MOV  	R7,#032H
	MOV  	R6,#00H
	LCALL	_Delay
; 	lcd_write_instruction(row, 1);
			; SOURCE LINE # 160
	MOV  	R5,#01H
	MOV  	R7,row?760
	LCALL	_lcd_write_instruction
; 	lcd_write_instruction(col, 1);
			; SOURCE LINE # 161
	MOV  	R5,#01H
	MOV  	R7,col?761
	LCALL	_lcd_write_instruction
; 	Delay(50);
			; SOURCE LINE # 162
	MOV  	R7,#032H
	MOV  	R6,#00H
	LCALL	_Delay
; 	lcd_write_instruction(0x3a, 1);
			; SOURCE LINE # 163
	MOV  	R5,#01H
	MOV  	R7,#03AH
	LCALL	_lcd_write_instruction
; 	Delay(50);
			; SOURCE LINE # 164
	MOV  	R7,#032H
	MOV  	R6,#00H
	LJMP 	_Delay
; END OF _lcd_char

; 
; 	/*for(i = 0; i < height; i++);
; 		for(j = 0; j < width; j++)
; 			*buf*/
; }
; 
; void lcd_zh(int x, int y, char mat[16][2])

	RSEG  ?PR?_lcd_zh?LCD_DRIVER
_lcd_zh:
	USING	0
			; SOURCE LINE # 171
	MOV  	x?865,R6
	MOV  	x?865+01H,R7
	MOV  	y?866,R4
	MOV  	y?866+01H,R5
	MOV  	mat?867,R3
	MOV  	mat?867+01H,R2
	MOV  	mat?867+02H,R1
; {
			; SOURCE LINE # 172
; 	int i, j;
; 	for(i = 0; i < 16; i++)
			; SOURCE LINE # 174
	CLR  	A
	MOV  	i?868,A
	MOV  	i?868+01H,A
?C0027:
; 	{
			; SOURCE LINE # 175
; 		lcd_write_instruction(0x3e, 1);
			; SOURCE LINE # 176
	MOV  	R5,#01H
	MOV  	R7,#03EH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(i + 0 | 0x80, 1);
			; SOURCE LINE # 178
	MOV  	A,i?868+01H
	LCALL	L?0052
; 		//Delay(50);
; 		lcd_write_instruction(0 + 8| 0x80, 1);
			; SOURCE LINE # 180
	MOV  	R5,#01H
	MOV  	R7,#088H
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(0x3a, 1);
			; SOURCE LINE # 182
	MOV  	R5,#01H
	MOV  	R7,#03AH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_data(mat[i][0]);
			; SOURCE LINE # 184
	MOV  	A,i?868+01H
	ADD  	A,ACC
	MOV  	R7,A
	MOV  	A,i?868
	RLC  	A
	MOV  	R3,mat?867
	MOV  	R2,mat?867+01H
	MOV  	R1,mat?867+02H
	MOV  	DPL,R7
	MOV  	DPH,A
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	LCALL	_lcd_write_data
; 		lcd_write_data(mat[i][1]);
			; SOURCE LINE # 185
	MOV  	A,i?868+01H
	ADD  	A,ACC
	MOV  	R7,A
	MOV  	A,i?868
	RLC  	A
	MOV  	R6,A
	MOV  	R3,mat?867
	MOV  	A,mat?867+02H
	ADD  	A,R7
	MOV  	R1,A
	MOV  	A,mat?867+01H
	ADDC 	A,R6
	MOV  	R2,A
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	LCALL	_lcd_write_data
; 	}
			; SOURCE LINE # 186
	INC  	i?868+01H
	MOV  	A,i?868+01H
	JNZ  	?C0048
	INC  	i?868
?C0048:
	CLR  	C
	SUBB 	A,#010H
	MOV  	A,i?868
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0027
; }
			; SOURCE LINE # 187
?C0030:
	RET  	
; END OF _lcd_zh

; 
; void lcd_clear(void)

	RSEG  ?PR?lcd_clear?LCD_DRIVER
lcd_clear:
	USING	0
			; SOURCE LINE # 189
; {
			; SOURCE LINE # 190
; 	int i, j;
; 	for(i = 0; i < 32; i++)
			; SOURCE LINE # 192
;---- Variable 'i?970' assigned to Register 'DPTR' ----
	MOV  	DPTR,#00H
?C0031:
; 	{
			; SOURCE LINE # 193
; 		lcd_write_instruction(0x3e, 1);
			; SOURCE LINE # 194
	MOV  	R5,#01H
	MOV  	R7,#03EH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(i | 0x80, 1);
			; SOURCE LINE # 196
	LCALL	L?0051
; 		//Delay(50);
; 		lcd_write_instruction(0 | 0x80, 1);
			; SOURCE LINE # 198
	MOV  	R5,#01H
	MOV  	R7,#080H
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(0x3a, 1);
			; SOURCE LINE # 200
	MOV  	R5,#01H
	MOV  	R7,#03AH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		for(j = 0; j < 8; j++)
			; SOURCE LINE # 202
	CLR  	A
	MOV  	j?971,A
	MOV  	j?971+01H,A
?C0034:
; 		{
			; SOURCE LINE # 203
; 			lcd_write_data(0x00);
			; SOURCE LINE # 204
; 			lcd_write_data(0x00);
			; SOURCE LINE # 205
	LCALL	L?0053
; 		}
			; SOURCE LINE # 206
	INC  	j?971+01H
	MOV  	A,j?971+01H
	JNZ  	?C0049
	INC  	j?971
?C0049:
	CLR  	C
	SUBB 	A,#08H
	MOV  	A,j?971
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0034
; 	}
			; SOURCE LINE # 207
?C0033:
	INC  	DPTR
	MOV  	A,DPL
	XRL  	A,#020H
	ORL  	A,DPH
	JNZ  	?C0031
?C0032:
; 
; 	for(i = 0; i < 32; i++)
			; SOURCE LINE # 209
	CLR  	A
	MOV  	DPH,A
	MOV  	DPL,A
?C0037:
; 	{
			; SOURCE LINE # 210
; 		lcd_write_instruction(0x3e, 1);
			; SOURCE LINE # 211
	MOV  	R5,#01H
	MOV  	R7,#03EH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(i | 0x80, 1);
			; SOURCE LINE # 213
	LCALL	L?0051
; 		//Delay(50);
; 		lcd_write_instruction(8 | 0x80, 1);
			; SOURCE LINE # 215
	MOV  	R5,#01H
	MOV  	R7,#088H
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		lcd_write_instruction(0x3a, 1);
			; SOURCE LINE # 217
	MOV  	R5,#01H
	MOV  	R7,#03AH
	LCALL	_lcd_write_instruction
; 		//Delay(50);
; 		for(j = 0; j < 8; j++)
			; SOURCE LINE # 219
	CLR  	A
	MOV  	j?971,A
	MOV  	j?971+01H,A
?C0040:
; 		{
			; SOURCE LINE # 220
; 			lcd_write_data(0x00);
			; SOURCE LINE # 221
; 			lcd_write_data(0x00);
			; SOURCE LINE # 222
	LCALL	L?0053
; 		}
			; SOURCE LINE # 223
	INC  	j?971+01H
	MOV  	A,j?971+01H
	JNZ  	?C0050
	INC  	j?971
?C0050:
	CLR  	C
	SUBB 	A,#08H
	MOV  	A,j?971
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0040
; 	}
			; SOURCE LINE # 224
?C0039:
	INC  	DPTR
	MOV  	A,DPL
	XRL  	A,#020H
	ORL  	A,DPH
	JNZ  	?C0037
; }
			; SOURCE LINE # 225
?C0043:
	RET  	
; END OF lcd_clear

	END

⌨️ 快捷键说明

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