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

📄 ylf240128a.s

📁 自己编制的北京友力发公司的液晶显示模块驱动程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	clr R10
	clr R11
	xjmp L43
L40:
	.dbline 347
;    for(i=0;i<10;i++) {            //8*8 
	.dbline 348
;       for(j=0;j<8;j++) 
	clr R22
	clr R23
	xjmp L47
L44:
	.dbline 349
	ldi R16,8
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	add R30,R22
	adc R31,R23
	ldi R24,<_GrCode
	ldi R25,>_GrCode
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _WriteData
L45:
	.dbline 348
	subi R22,255  ; offset = 1
	sbci R23,255
L47:
	.dbline 348
	cpi R22,8
	ldi R30,0
	cpc R23,R30
	brlo L44
	.dbline 350
L41:
	.dbline 347
	movw R24,R10
	adiw R24,1
	movw R10,R24
L43:
	.dbline 347
	movw R24,R10
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	brlo L40
	.dbline 351
;          WriteData(GrCode[i*8+j]); 
;    } 
;    len=(uchar)sizeof(ChCode);      //16*16 
	ldi R20,160
	clr R21
	.dbline 352
	clr R22
	clr R23
	xjmp L51
L48:
	.dbline 352
;    for (j=0;j<len;j++) { 
	.dbline 353
;       for(i=0;i<16;i+=2)  
	clr R10
	clr R11
	xjmp L55
L52:
	.dbline 354
	ldi R16,32
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	ldi R24,<_ChCode
	ldi R25,>_ChCode
	add R2,R24
	adc R3,R25
	movw R30,R10
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _WriteData
L53:
	.dbline 353
	movw R24,R10
	adiw R24,2
	movw R10,R24
L55:
	.dbline 353
	movw R24,R10
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlo L52
	.dbline 355
;          WriteData(ChCode[j][i]); 
;       for(i=1;i<16;i+=2)  
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L59
L56:
	.dbline 356
	ldi R16,32
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	ldi R24,<_ChCode
	ldi R25,>_ChCode
	add R2,R24
	adc R3,R25
	movw R30,R10
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _WriteData
L57:
	.dbline 355
	movw R24,R10
	adiw R24,2
	movw R10,R24
L59:
	.dbline 355
	movw R24,R10
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlo L56
	.dbline 357
;          WriteData(ChCode[j][i]); 
;       for(i=16;i<32;i+=2)  
	ldi R24,16
	ldi R25,0
	movw R10,R24
	xjmp L63
L60:
	.dbline 358
	ldi R16,32
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	ldi R24,<_ChCode
	ldi R25,>_ChCode
	add R2,R24
	adc R3,R25
	movw R30,R10
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _WriteData
L61:
	.dbline 357
	movw R24,R10
	adiw R24,2
	movw R10,R24
L63:
	.dbline 357
	movw R24,R10
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brlo L60
	.dbline 359
;          WriteData(ChCode[j][i]); 
;       for(i=17;i<32;i+=2)  
	ldi R24,17
	ldi R25,0
	movw R10,R24
	xjmp L67
L64:
	.dbline 360
	ldi R16,32
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R2,R16
	ldi R24,<_ChCode
	ldi R25,>_ChCode
	add R2,R24
	adc R3,R25
	movw R30,R10
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _WriteData
L65:
	.dbline 359
	movw R24,R10
	adiw R24,2
	movw R10,R24
L67:
	.dbline 359
	movw R24,R10
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brlo L64
	.dbline 362
L49:
	.dbline 352
	subi R22,255  ; offset = 1
	sbci R23,255
L51:
	.dbline 352
	cp R22,R20
	cpc R23,R21
	brsh X0
	xjmp L48
X0:
	.dbline 363
;          WriteData(ChCode[j][i]);          
; 
;    } 
;    WriteCmd(AWROFF); 
	ldi R16,178
	xcall _WriteCmd
	.dbline -2
L36:
	adiw R28,1
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r len 20 i
	.dbsym r j 22 i
	.dbsym r i 10 i
	.dbend
	.dbfunc e LcdInit _LcdInit fV
	.even
_LcdInit::
	sbiw R28,1
	.dbline -1
	.dbline 368
;     
; } 
; 
; void LcdInit(void) 
; { 
	.dbline 370
;     
;    CE_CLR; 
	cbi 0x1b,1
	.dbline 371
;    FS_CLR; 
	cbi 0x12,7
	.dbline 372
;    WR_SET;RD_SET;CD_SET; 
	sbi 0x1b,3
	.dbline 372
	sbi 0x1b,2
	.dbline 372
	sbi 0x15,0
	.dbline 373
;    RST_CLR; 
	cbi 0x12,5
	.dbline 374
;    delay(1000); 
	ldi R16,1000
	ldi R17,3
	xcall _delay
	.dbline 375
;    RST_SET; 
	sbi 0x12,5
	.dbline 377
;     
;    ClrRam(0x00); 
	clr R16
	clr R17
	xcall _ClrRam
	.dbline 379
;        
;    WrTwoParCmd(0x00,0x00,TXHOME); 
	ldi R24,64
	std y+0,R24
	clr R18
	clr R16
	xcall _WrTwoParCmd
	.dbline 380
;    WrTwoParCmd(0x1E,0x00,TXAREA); 
	ldi R24,65
	std y+0,R24
	clr R18
	ldi R16,30
	xcall _WrTwoParCmd
	.dbline 381
;    WrTwoParCmd(0x00,0x08,GRHOME); 
	ldi R24,66
	std y+0,R24
	ldi R18,8
	clr R16
	xcall _WrTwoParCmd
	.dbline 382
;    WrTwoParCmd(0x1E,0x00,GRAREA);    
	ldi R24,67
	std y+0,R24
	clr R18
	ldi R16,30
	xcall _WrTwoParCmd
	.dbline 383
;    WrTwoParCmd(0x00,0x00,CUPSET); 
	ldi R24,33
	std y+0,R24
	clr R18
	clr R16
	xcall _WrTwoParCmd
	.dbline 384
;    WriteCmd(0xA0); 
	ldi R16,160
	xcall _WriteCmd
	.dbline 385
;    WriteCmd(0x80); 
	ldi R16,128
	xcall _WriteCmd
	.dbline 386
;    WriteCmd(0x97);    
	ldi R16,151
	xcall _WriteCmd
	.dbline 390
;     
; //   ClrRam(0x00); 
;     
;    WrCGRAM(); 
	xcall _WrCGRAM
	.dbline 392
; 
;    WrTwoParCmd(0x00,0x00,ADPSET); 
	ldi R24,36
	std y+0,R24
	clr R18
	clr R16
	xcall _WrTwoParCmd
	.dbline 393
;    WrTwoParCmd(0x00,0x00,CUPSET); 
	ldi R24,33
	std y+0,R24
	clr R18
	clr R16
	xcall _WrTwoParCmd
	.dbline -2
L68:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WrCharCode _WrCharCode fV
;        address -> R20,R21
;       charcode -> y+5
;              y -> R22
;              x -> R20
	.even
_WrCharCode::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	sbiw R28,1
	.dbline -1
	.dbline 399
; } 
; 
; //Character Code Display--8*8 
; //x:0~29;  y:0~15  
; void WrCharCode(uchar x,uchar y,uchar charcode)  
; {  
	.dbline 401
;      uint address;  
;      address=y*LCDCOLUMN+x;  
	ldi R24,30
	mul R24,R22
	movw R2,R0
	mov R4,R20
	clr R5
	add R2,R4
	adc R3,R5
	movw R20,R2
	.dbline 402
;      WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);  //Set Display Ram Address  
	ldi R24,36
	std y+0,R24
	movw R18,R2
	mov R18,R19
	clr R19
	mov R16,R2
	xcall _WrTwoParCmd
	.dbline 403
;      WrOneParCmd(charcode,0xC4);  //Load Character Code,Address Non Variable  
	ldi R18,196
	ldd R16,y+5
	xcall _WrOneParCmd
	.dbline 404
;    address+=0x800;            //Text Attribute mode:blink 
	subi R20,0  ; offset = 2048
	sbci R21,248
	.dbline 405
;    WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);   
	ldi R24,36
	std y+0,R24
	movw R18,R20
	mov R18,R19
	clr R19
	mov R16,R20
	xcall _WrTwoParCmd
	.dbline 406
;      WrOneParCmd(0x08,0xC4); 
	ldi R18,196
	ldi R16,8
	xcall _WrOneParCmd
	.dbline -2
L69:
	adiw R28,1
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 i
	.dbsym l charcode 5 c
	.dbsym r y 22 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e AsctoCharCode _AsctoCharCode fc
;       charcode -> R20
;            asc -> R16
	.even
_AsctoCharCode::
	xcall push_gset1
	.dbline -1
	.dbline 410
; }  
; 
; uchar AsctoCharCode(uchar asc) 
; { 
	.dbline 412
;    uchar charcode; 
;    charcode=(asc<20)? 0:(asc-0x20); 
	cpi R16,20
	brsh L71
	clr R20
	clr R21
	xjmp L72
L71:
	mov R20,R16
	clr R21
	subi R20,32
	sbci R21,0
L72:
	.dbline 413
;    return charcode; 
	mov R16,R20
	.dbline -2
L70:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r charcode 20 c
	.dbsym r asc 16 c
	.dbend
	.dbfunc e WrCharStr _WrCharStr fV
;            len -> R20
;              i -> R22
;        charstr -> R10,R11
;              y -> R12
;              x -> R14
	.even
_WrCharStr::
	xcall push_gset5
	mov R12,R18
	mov R14,R16
	sbiw R28,1
	ldd R10,y+11
	ldd R11,y+12
	.dbline -1
	.dbline 417
; } 
; 
; void WrCharStr(uchar x,uchar y,char charstr[]) 
; { 
	.dbline 420
;    uchar i,len; 
;     
;    len=strlen(charstr); 
	movw R16,R10
	xcall _strlen
	mov R20,R16
	.dbline 421
	clr R22
	xjmp L77
L74:
	.dbline 421
;    for(i=0;i<len;i++) { 
	.dbline 422
;       WrCharCode(x,y,AsctoCharCode(charstr[i]) ); 
	mov R30,R22
	clr R31
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _AsctoCharCode
	std y+0,R16
	mov R18,R12
	mov R16,R14
	xcall _WrCharCode
	.dbline 423
;       if (x<LCDCOLUMN)x++; 
	mov R24,R14
	cpi R24,30
	brsh L78
	.dbline 423
	inc R14
	xjmp L79
L78:
	.dbline 425
;       else 
;          { 
	.dbline 426
;          y++; 
	inc R12
	.dbline 427
;          x=0; 
	clr R14
	.dbline 428
;          } 
L79:
	.dbline 429
L75:
	.dbline 421
	inc R22
L77:
	.dbline 421
	cp R22,R20
	brlo L74
	.dbline -2
L73:
	adiw R28,1
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r len 20 c
	.dbsym r i 22 c
	.dbsym r charstr 10 pc
	.dbsym r y 12 c
	.dbsym r x 14 c
	.dbend
	.dbfunc e WrNumeral _WrNumeral fV
;            str -> y+6
;              g -> y+1
;              i -> R20
;        numeral -> R14,R15
;          grade -> R12
;              y -> R10
;              x -> y+21
	.even
_WrNumeral::
	xcall push_arg4
	xcall push_gset5
	mov R10,R18
	sbiw R28,11
	ldd R12,y+25
	ldd R14,y+27
	ldd R15,y+28
	.dbline -1
	.dbline 432
;    } 
; } 
; void WrNumeral(uchar x,uchar y,uchar grade,uint numeral) 
; { 
	.dbline 436
	clr R20
	xjmp L84
L81:
	.dbline 436
;    uchar i,g[5]; 
;    uchar str[5]; 
; 
;    for(i=0;i<5;i++) { 
	.dbline 437
;       g[i]=numeral%grade; 
	mov R18,R12
	clr R19
	movw R16,R14
	xcall mod16u
	movw R24,R28
	adiw R24,1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 438
;       numeral/=grade; 
	mov R18,R12
	clr R19
	movw R16,R14
	xcall div16u
	movw R14,R16
	.dbline 439
;       str[4-i]=(g[i]>9)?(g[i]+0x37):(g[i]+0x30); 
	movw R24,R28
	adiw R24,1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,9
	cp R24,R2
	brsh L85
	movw R24,R28
	adiw R24,1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	clr R23
	subi R22,201  ; offset = 55
	sbci R23,255
	xjmp L86
L85:
	movw R24,R28
	adiw R24,1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R22,z+0
	clr R23
	subi R22,208  ; offset = 48
	sbci R23,255
L86:
	mov R2,R20
	clr R3
	ldi R30,4
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	movw R24,R28

⌨️ 快捷键说明

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