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

📄 lcd12864.s

📁 atmega128 adc LCD
💻 S
📖 第 1 页 / 共 2 页
字号:
; 			}
; 		}
L65:
	.dbline 216
; 	CSA_CLR;
	cbi 0x15,7
	.dbline 217
; 	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 221
; }
; 
; /*在指定位置显示一个汉字*/
; void disp_word(unsigned char x, unsigned char y, unsigned char word) {
	.dbline 223
; 
; 	unsigned char i = 0x00;
	clr R22
	.dbline 226
; 	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 229
; 
; 	/*显示高16位*/	
; 	i = 0x00;
	.dbline 230
; 	if (x < 64) {						/*地址在左半屏范围内*/
	mov R24,R10
	cpi R24,64
	brsh L71
	.dbline 230
	.dbline 231
; 		LCD0_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD0_write_com
	.dbline 232
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L74
L73:
	.dbline 233
; 		while (i < 16) {
	.dbline 234
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 235
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 236
; 			x ++;
	inc R10
	.dbline 237
; 			i ++;
	inc R22
	.dbline 238
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L76
	.dbline 238
	.dbline 239
; 				break;
	xjmp L75
L76:
	.dbline 241
L74:
	.dbline 233
	cpi R22,16
	brlo L73
L75:
	.dbline 242
; 				}
; 			}
; 		}
L71:
	.dbline 243
; 	if (i < 16) {						/*地址进入左半屏范围*/
	cpi R22,16
	brsh L78
	.dbline 243
	.dbline 244
; 		LCD1_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD1_write_com
	.dbline 245
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L81
L80:
	.dbline 246
	.dbline 247
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 248
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 249
	inc R10
	.dbline 250
	inc R22
	.dbline 251
L81:
	.dbline 246
; 		while (i < 16) {
	cpi R22,16
	brlo L80
	.dbline 252
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L78:
	.dbline 255
; 
; 	/*显示低16位*/
; 	i = 0x00;
	clr R22
	.dbline 256
; 	x -= 16;
	mov R24,R10
	subi R24,16
	mov R10,R24
	.dbline 257
; 	if (x < 64) {						/*地址在左半屏范围内*/
	cpi R24,64
	brsh L83
	.dbline 257
	.dbline 258
; 		LCD0_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD0_write_com
	.dbline 259
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L86
L85:
	.dbline 260
; 		while (i < 16) {
	.dbline 261
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 262
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 263
; 			x ++;
	inc R10
	.dbline 264
; 			i ++;
	inc R22
	.dbline 265
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L88
	.dbline 265
	.dbline 266
; 				break;
	xjmp L87
L88:
	.dbline 268
L86:
	.dbline 260
	cpi R22,16
	brlo L85
L87:
	.dbline 269
; 				}
; 			}
; 		}
L83:
	.dbline 270
; 	if (i < 16) {						/*地址进入左半屏范围*/
	cpi R22,16
	brsh L90
	.dbline 270
	.dbline 271
; 		LCD1_write_com((y+1) | 0xB8);
	mov R16,R12
	subi R16,255    ; addi 1
	ori R16,184
	xcall _LCD1_write_com
	.dbline 272
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L93
L92:
	.dbline 273
	.dbline 274
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 275
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 276
	inc R10
	.dbline 277
	inc R22
	.dbline 278
L93:
	.dbline 273
; 		while (i < 16) {
	cpi R22,16
	brlo L92
	.dbline 279
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
L90:
	.dbline 280
; 	CSA_CLR;
	cbi 0x15,7
	.dbline 281
; 	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 285
; }
; 
; /*显示一串字符*/
; void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
	xjmp L97
L96:
	.dbline 287
	.dbline 288
	movw R30,R20
	ldd R2,z+0
	std y+0,R2
	mov R18,R22
	mov R16,R10
	xcall _disp_char
	.dbline 289
	mov R24,R10
	subi R24,248    ; addi 8
	mov R10,R24
	.dbline 290
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 291
L97:
	.dbline 287
; 
; 	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 295
; 		disp_char(x, y, *str);
; 		x += 8;
; 		str ++;
; 		}
; }
; 
; /*显示屏初始化函数*/
; void disp_init(void) {
	.dbline 297
; 	
; 	DDRA = 0xFF;						/*I/O口方向设置*/
	ldi R24,255
	out 0x1a,R24
	.dbline 298
; 	DDRC = 0xFF;
	out 0x14,R24
	.dbline 300
; 
; 	RST_CLR;
	cbi 0x15,5
	.dbline 301
; 	delay_ms(10);
	ldi R16,10
	xcall _delay_ms
	.dbline 302
; 	RST_SET;
	sbi 0x15,5
	.dbline 304
; 
; 	LCD0_write_com(0xC0);				/*显示起行设置*/
	ldi R16,192
	xcall _LCD0_write_com
	.dbline 305
; 	LCD1_write_com(0xC0);
	ldi R16,192
	xcall _LCD1_write_com
	.dbline 307
; 	
; 	LCD0_write_com(0x3F);				/*开显示设置*/
	ldi R16,63
	xcall _LCD0_write_com
	.dbline 308
; 	LCD1_write_com(0x3F);
	ldi R16,63
	xcall _LCD1_write_com
	.dbline -2
L99:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e disp_myself _disp_myself fV
;              q -> R20,R21
;              i -> R22
;          ascii -> y+8
;              y -> R12
;              x -> R10
	.even
_disp_myself::
	xcall push_gset4
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 312
; }
; 
; /*在指定位置显示一个8*8的 字符*/
; void disp_myself(unsigned char x, unsigned char y, unsigned char ascii) {
	.dbline 314
; 
; 	unsigned char i = 0x00;
	clr R22
	.dbline 318
; 	const unsigned char *q;				/*取字库指针*/
; 	
; 	
; 	ascii -= 0x20;
	ldd R24,y+8
	subi R24,32
	std y+8,R24
	.dbline 319
; 	q = &ENGLISH_FONT[ascii *16];		/*定位指针地址*/
	ldi R24,16
	ldd R0,y+8
	mul R24,R0
	movw R20,R0
	ldi R24,<_ENGLISH_FONT
	ldi R25,>_ENGLISH_FONT
	add R20,R24
	adc R21,R25
	.dbline 322
; 
; 	/*显示高8位*/	
; 	i = 0x00;
	.dbline 323
; 	if (x < 64) {						/*地址在左半屏范围内*/
	mov R24,R10
	cpi R24,64
	brsh L101
	.dbline 323
	.dbline 324
; 		LCD0_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD0_write_com
	.dbline 325
; 		LCD0_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD0_write_com
	xjmp L104
L103:
	.dbline 326
; 		while (i < 8) {
	.dbline 327
; 			LCD0_write_data(*q);
	movw R30,R20
	lpm R16,Z
	xcall _LCD0_write_data
	.dbline 328
; 			q ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 329
; 			x ++;
	inc R10
	.dbline 330
; 			i ++;
	inc R22
	.dbline 331
; 			if (x > 63) {				/*判断地址是否越界*/
	ldi R24,63
	cp R24,R10
	brsh L106
	.dbline 331
	.dbline 332
; 				break;
	xjmp L105
L106:
	.dbline 334
L104:
	.dbline 326
	cpi R22,8
	brlo L103
L105:
	.dbline 335
; 				}
; 			}
; 		}
L101:
	.dbline 336
; 	if (i < 8) {						/*地址进入左半屏范围*/
	cpi R22,8
	brsh L108
	.dbline 336
	.dbline 337
; 		LCD1_write_com(y | 0xB8);
	mov R16,R12
	ori R16,184
	xcall _LCD1_write_com
	.dbline 338
; 		LCD1_write_com(x | 0x40);
	mov R16,R10
	ori R16,64
	xcall _LCD1_write_com
	xjmp L111
L110:
	.dbline 339
	.dbline 340
	movw R30,R20
	lpm R16,Z
	xcall _LCD1_write_data
	.dbline 341
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 342
	inc R10
	.dbline 343
	inc R22
	.dbline 344
L111:
	.dbline 339
	cpi R22,8
	brlo L110
	.dbline 345
L108:
	.dbline -2
L100:
	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_to_bcd _disp_to_bcd fV
;              f -> R14,R15
;              e -> R12,R13
;              b -> R10,R11
;              c -> R22,R23
;              a -> R20,R21
;              d -> R10,R11
;              x -> R22,R23
	.even
_disp_to_bcd::
	xcall push_gset5
	movw R22,R16
	sbiw R28,2
	.dbline -1
	.dbline 349
; 		while (i < 8) {
; 			LCD1_write_data(*q);
; 			q ++;
; 			x ++;
; 			i ++;
; 			}
; 		}
; 		}
; 	
; 
; void disp_to_bcd(int x){
	.dbline 350
;      unsigned int a=x%10,b=x/10,c=b%10,d=b/10,e=d%10,f=d/10;
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall mod16s
	movw R20,R16
	.dbline 350
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall div16s
	movw R10,R16
	.dbline 350
	ldi R18,10
	ldi R19,0
	xcall mod16u
	movw R22,R16
	.dbline 350
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall div16u
	movw R10,R16
	.dbline 350
	ldi R18,10
	ldi R19,0
	xcall mod16u
	movw R12,R16
	.dbline 350
	ldi R18,10
	ldi R19,0
	movw R16,R10
	xcall div16u
	movw R14,R16
	.dbline 351
; 	 a+=48,c+=48,e+=48,f+=48;
	subi R20,208  ; offset = 48
	sbci R21,255
	subi R22,208  ; offset = 48
	sbci R23,255
	movw R24,R12
	adiw R24,48
	movw R12,R24
	movw R24,R14
	adiw R24,48
	movw R14,R24
	.dbline 352
; 	 disp_char(40, 2, f);
	std y+0,R14
	ldi R18,2
	ldi R16,40
	xcall _disp_char
	.dbline 353
; 	 disp_char(48, 2, e);
	std y+0,R12
	ldi R18,2
	ldi R16,48
	xcall _disp_char
	.dbline 354
; 	 disp_char_str(56, 2, ".");
	ldi R24,<L114
	ldi R25,>L114
	std y+1,R25
	std y+0,R24
	ldi R18,2
	ldi R16,56
	xcall _disp_char_str
	.dbline 355
; 	 disp_char(64, 2, c);
	std y+0,R22
	ldi R18,2
	ldi R16,64
	xcall _disp_char
	.dbline 356
; 	 disp_char(72, 2, a);
	std y+0,R20
	ldi R18,2
	ldi R16,72
	xcall _disp_char
	.dbline 357
; 	 disp_char_str(80, 2, "V");
	ldi R24,<L115
	ldi R25,>L115
	std y+1,R25
	std y+0,R24
	ldi R18,2
	ldi R16,80
	xcall _disp_char_str
	.dbline 358
	movw R24,R10
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	brlo L118
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	brne L116
	cpi R22,0
	cpc R22,R23
	brne L116
X2:
	cpi R20,0
	cpc R20,R21
	brne L116
X3:
L118:
	.dbline 358
; 	 if(d<11||d==11&&c==0&&a==0){
	.dbline 359
;      disp_word(32, 4, CB5E7);					/*写入“电压偏低”四个汉字*/
	ldi R24,6
	std y+0,R24
	ldi R18,4
	ldi R16,32
	xcall _disp_word
	.dbline 360
; 	 disp_word(48, 4, CD1B9);
	ldi R24,7
	std y+0,R24
	ldi R18,4
	ldi R16,48
	xcall _disp_word
	.dbline 361
; 	 disp_word(64, 4, CC6AB);
	ldi R24,10
	std y+0,R24
	ldi R18,4
	ldi R16,64
	xcall _disp_word
	.dbline 362
; 	 disp_word(80, 4, CB5CD);}
	ldi R24,11
	std y+0,R24
	ldi R18,4
	ldi R16,80
	xcall _disp_word
	.dbline 362
	xjmp L117
L116:
	.dbline 363
	.dbline 364
	ldi R24,6
	std y+0,R24
	ldi R18,4
	ldi R16,32
	xcall _disp_word
	.dbline 365
	ldi R24,7
	std y+0,R24
	ldi R18,4
	ldi R16,48
	xcall _disp_word
	.dbline 366
	ldi R24,8
	std y+0,R24
	ldi R18,4
	ldi R16,64
	xcall _disp_word
	.dbline 367
	ldi R24,9
	std y+0,R24
	ldi R18,4
	ldi R16,80
	xcall _disp_word
	.dbline 367
L117:
	.dbline -2
L113:
	adiw R28,2
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r f 14 i
	.dbsym r e 12 i
	.dbsym r b 10 i
	.dbsym r c 22 i
	.dbsym r a 20 i
	.dbsym r d 10 i
	.dbsym r x 22 I
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
L115:
	.blkb 2
	.area idata
	.byte 'V,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
L114:
	.blkb 2
	.area idata
	.byte 46,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c

⌨️ 快捷键说明

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