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

📄 lcd12864.s

📁 这是一个LCD12864程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 170
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 171
; 			x ++;
	inc R10
	.dbline 172
; 			i ++;
	inc R22
	.dbline 173
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L51
	.dbline 173
	.dbline 174
; 				break;
	xjmp L50
L51:
	.dbline 176
L49:
	.dbline 168
	cpi R22,8
	brlo L48
L50:
	.dbline 177
; 				}
; 			}
; 		}
L46:
	.dbline 178
; 	if (i < 8) {						/*地址进入左半屏范围*/
	cpi R22,8
	brsh L53
	.dbline 178
	.dbline 179
; 		LCD1_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD1_write_com
	.dbline 180
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L56
L55:
	.dbline 181
	.dbline 182
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 183
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 184
	inc R10
	.dbline 185
	inc R22
	.dbline 186
L56:
	.dbline 181
; 		while (i < 8) {
	cpi R22,8
	brlo L55
	.dbline 187
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L53:
	.dbline 190
; 
; 	/*显示低8位*/
; 	i = 0x00;
	clr R22
	.dbline 191
; 	x -= 8;
	mov R24,R10
	subi R24,8
	mov R10,R24
	.dbline 192
; 	if (x < 64) {						/*地址在左半屏范围内*/
	cpi R24,64
	brsh L58
	.dbline 192
	.dbline 193
; 		LCD0_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD0_write_com
	.dbline 194
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L61
L60:
	.dbline 195
; 		while (i < 8) {
	.dbline 196
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 197
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 198
; 			x ++;
	inc R10
	.dbline 199
; 			i ++;
	inc R22
	.dbline 200
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L63
	.dbline 200
	.dbline 201
; 				break;
	xjmp L62
L63:
	.dbline 203
L61:
	.dbline 195
	cpi R22,8
	brlo L60
L62:
	.dbline 204
; 				}
; 			}
; 		}
L58:
	.dbline 205
; 	if (i < 8) {						/*地址进入左半屏范围*/
	cpi R22,8
	brsh L65
	.dbline 205
	.dbline 206
; 		LCD1_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD1_write_com
	.dbline 207
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L68
L67:
	.dbline 208
	.dbline 209
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 210
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 211
	inc R10
	.dbline 212
	inc R22
	.dbline 213
L68:
	.dbline 208
; 		while (i < 8) {
	cpi R22,8
	brlo L67
	.dbline 214
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L65:
	.dbline 215
; 	CSA_CLR;
	cbi 0x15,7
	.dbline 216
; 	CSB_CLR;
	cbi 0x15,6
	.dbline -2
L45:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r q 20 pkc
	.dbsym r i 22 c
	.dbsym l ascii 8 c
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e disp_word _disp_word fV
;              q -> R20,R21
;              i -> R22
;           word -> y+8
;              y -> R12
;              x -> R10
	.even
_disp_word::
	xcall push_gset4
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 220
; }
; 
; /*在指定位置显示一个汉字*/
; void disp_word(unsigned char x, unsigned char y, unsigned char word) {
	.dbline 222
; 
; 	unsigned char i = 0x00;
	clr R22
	.dbline 225
; 	const unsigned char *q;				/*取字库指针*/
; 	
; 	q = &CHINESE_FONT[word * 32];		/*定位指针地址*/
	ldi R24,32
	ldd R0,y+8
	mul R24,R0
	movw R20,R0
	ldi R24,<_CHINESE_FONT
	ldi R25,>_CHINESE_FONT
	add R20,R24
	adc R21,R25
	.dbline 228
; 
; 	/*显示高16位*/	
; 	i = 0x00;
	.dbline 229
; 	if (x < 64) {						/*地址在左半屏范围内*/
	mov R24,R10
	cpi R24,64
	brsh L71
	.dbline 229
	.dbline 230
; 		LCD0_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD0_write_com
	.dbline 231
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L74
L73:
	.dbline 232
; 		while (i < 16) {
	.dbline 233
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 234
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 235
; 			x ++;
	inc R10
	.dbline 236
; 			i ++;
	inc R22
	.dbline 237
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L76
	.dbline 237
	.dbline 238
; 				break;
	xjmp L75
L76:
	.dbline 240
L74:
	.dbline 232
	cpi R22,16
	brlo L73
L75:
	.dbline 241
; 				}
; 			}
; 		}
L71:
	.dbline 242
; 	if (i < 16) {						/*地址进入左半屏范围*/
	cpi R22,16
	brsh L78
	.dbline 242
	.dbline 243
; 		LCD1_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD1_write_com
	.dbline 244
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L81
L80:
	.dbline 245
	.dbline 246
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 247
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 248
	inc R10
	.dbline 249
	inc R22
	.dbline 250
L81:
	.dbline 245
; 		while (i < 16) {
	cpi R22,16
	brlo L80
	.dbline 251
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L78:
	.dbline 254
; 
; 	/*显示低16位*/
; 	i = 0x00;
	clr R22
	.dbline 255
; 	x -= 16;
	mov R24,R10
	subi R24,16
	mov R10,R24
	.dbline 256
; 	if (x < 64) {						/*地址在左半屏范围内*/
	cpi R24,64
	brsh L83
	.dbline 256
	.dbline 257
; 		LCD0_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD0_write_com
	.dbline 258
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L86
L85:
	.dbline 259
; 		while (i < 16) {
	.dbline 260
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 261
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 262
; 			x ++;
	inc R10
	.dbline 263
; 			i ++;
	inc R22
	.dbline 264
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L88
	.dbline 264
	.dbline 265
; 				break;
	xjmp L87
L88:
	.dbline 267
L86:
	.dbline 259
	cpi R22,16
	brlo L85
L87:
	.dbline 268
; 				}
; 			}
; 		}
L83:
	.dbline 269
; 	if (i < 16) {						/*地址进入左半屏范围*/
	cpi R22,16
	brsh L90
	.dbline 269
	.dbline 270
; 		LCD1_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD1_write_com
	.dbline 271
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L93
L92:
	.dbline 272
	.dbline 273
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 274
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 275
	inc R10
	.dbline 276
	inc R22
	.dbline 277
L93:
	.dbline 272
; 		while (i < 16) {
	cpi R22,16
	brlo L92
	.dbline 278
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L90:
	.dbline 279
; 	CSA_CLR;
	cbi 0x15,7
	.dbline 280
; 	CSB_CLR;
	cbi 0x15,6
	.dbline -2
L70:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r q 20 pkc
	.dbsym r i 22 c
	.dbsym l word 8 c
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e disp_char_str _disp_char_str fV
;            str -> R20,R21
;              y -> R22
;              x -> R10
	.even
_disp_char_str::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	sbiw R28,1
	ldd R20,y+7
	ldd R21,y+8
	.dbline -1
	.dbline 284
; }
; 
; /*显示一串字符*/
; void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
	xjmp L97
L96:
	.dbline 286
	.dbline 287
	movw R30,R20
	ldd R2,z+0
	std y+0,R2
	mov R18,R22
	mov R16,R10
	xcall _disp_char
	.dbline 288
	mov R24,R10
	subi R24,248    ; addi 8
	mov R10,R24
	.dbline 289
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 290
L97:
	.dbline 286
; 
; 	while (*str != 0) {
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L96
	.dbline -2
L95:
	adiw R28,1
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r str 20 pc
	.dbsym r y 22 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e disp_init _disp_init fV
	.even
_disp_init::
	.dbline -1
	.dbline 294
; 		disp_char(x, y, *str);
; 		x += 8;
; 		str ++;
; 		}
; }
; 
; /*显示屏初始化函数*/
; void disp_init(void) {
	.dbline 296
; 	
; 	DDRA = 0xFF;						/*I/O口方向设置*/
	ldi R24,255
	out 0x1a,R24
	.dbline 297
; 	DDRC = 0xFF;
	out 0x14,R24
	.dbline 299
; 
; 	RST_CLR;
	cbi 0x15,5
	.dbline 300
; 	delay_ms(10);
	ldi R16,10
	xcall _delay_ms
	.dbline 301
; 	RST_SET;
	sbi 0x15,5
	.dbline 303
; 
; 	LCD0_write_com(0xC0);				/*显示起行设置*/
	ldi R16,192
	xcall _LCD0_write_com
	.dbline 304
; 	LCD1_write_com(0xC0);
	ldi R16,192
	xcall _LCD1_write_com
	.dbline 306
; 	
; 	LCD0_write_com(0x3F);				/*开显示设置*/
	ldi R16,63
	xcall _LCD0_write_com
	.dbline 307
; 	LCD1_write_com(0x3F);
	ldi R16,63
	xcall _LCD1_write_com
	.dbline -2
L99:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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