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

📄 lcd.s

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 S
📖 第 1 页 / 共 3 页
字号:
;          SetPageCol(uPage+1,uCol);
	ldd R18,y+1
	ldd R16,y+2
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 313
;          for(j=0;j<width;j++)
	clr R12
	xjmp L97
L94:
	.dbline 314
;          {
	.dbline 315
;             SetPageCol(uPage+1,uCol+j);
	ldd R18,y+1
	add R18,R12
	ldd R16,y+2
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 317
; 				
;             ch_r=ASC_16[k].Msk[j];
	ldi R24,17
	mul R24,R20
	movw R2,R0
	ldi R24,<_ASC_16+1
	ldi R25,>_ASC_16+1
	add R2,R24
	adc R3,R25
	mov R30,R12
	clr R31
	add R30,R2
	adc R31,R3
	lpm R10,Z
	.dbline 318
;             ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
	ldi R24,17
	mul R24,R20
	movw R2,R0
	ldi R24,<_ASC_16+1
	ldi R25,>_ASC_16+1
	add R2,R24
	adc R3,R25
	mov R30,R12
	clr R31
	adiw R30,8
	add R30,R2
	adc R31,R3
	lpm R14,Z
	.dbline 319
;             ch_r=ch_r>>4;
	mov R24,R10
	swap R24
	andi R24,#0x0F
	mov R10,R24
	.dbline 320
;             ch_w=ch_w<<4;
	mov R24,R14
	andi R24,#0x0F
	swap R24
	mov R14,R24
	.dbline 321
;             ch_w|=ch_r;
	or R14,R10
	.dbline 322
;             SetPageCol(uPage+1,uCol+j);
	ldd R18,y+1
	add R18,R12
	ldd R16,y+2
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 323
;             if(uCol+j<64)
	ldd R24,y+1
	add R24,R12
	cpi R24,64
	brsh L100
	.dbline 324
;                write_LCD(LEFT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L101
L100:
	.dbline 326
;             else
;                write_LCD(RIGHT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L101:
	.dbline 327
L95:
	.dbline 313
	inc R12
L97:
	.dbline 313
	cp R12,R22
	brsh X5
	xjmp L94
X5:
	.dbline 328
;          }
;       }
L68:
	.dbline 329
;    }
L60:
	.dbline 330
;    SetPageCol(uPage,uCol+width);
	ldd R18,y+1
	add R18,R22
	ldd R16,y+2
	xcall _SetPageCol
	.dbline -2
L53:
	adiw R28,3
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r width 22 c
	.dbsym r len 22 c
	.dbsym l uPage 2 c
	.dbsym r ch_r 10 c
	.dbsym l uCol 1 c
	.dbsym r ch_w 14 c
	.dbsym r k 20 c
	.dbsym r j 12 c
	.dbsym r c 10 c
	.dbend
	.dbfunc e disp_hz _disp_hz fV
;          uPage -> y+1
;           ch_r -> R22
;              k -> R10
;           uCol -> R12
;           ch_w -> R14
;              j -> R20
;             hz -> R20,R21
	.even
_disp_hz::
	xcall push_gset5
	movw R20,R16
	sbiw R28,2
	.dbline -1
	.dbline 336
; }
; 
; 
; //---------------汉字显示函数------------------
; void disp_hz(unsigned char *hz)
; {
	.dbline 338
;    unsigned char k,j,uPage,uCol,ch_r,ch_w;
;    uPage = GetPage();
	xcall _GetPage
	std y+1,R16
	.dbline 339
;    uCol = GetCol();
	xcall _GetCol
	mov R12,R16
	.dbline 340
;    for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
	clr R10
	xjmp L106
L103:
	.dbline 341
;    {
	.dbline 342
;       if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16
	ldi R25,>_GB_16
	movw R30,R2
	add R30,R24
	adc R31,R25
	lpm R30,Z
	movw R26,R20
	ld R4,x
	cp R4,R30
	brne L107
	ldi R24,<_GB_16+1
	ldi R25,>_GB_16+1
	movw R30,R2
	add R30,R24
	adc R31,R25
	lpm R30,Z
	adiw R26,1
	ld R2,x
	cp R2,R30
	brne L107
	.dbline 343
;          break;
	xjmp L105
L107:
	.dbline 344
L104:
	.dbline 340
	inc R10
L106:
	.dbline 340
	mov R24,R10
	cpi R24,12
	brlo L103
L105:
	.dbline 346
;    }
; 
;    if(CurOffset==1)
	lds R24,_CurOffset
	cpi R24,1
	breq X6
	xjmp L110
X6:
	.dbline 347
;    {
	.dbline 348
;       for(j=0;j<ASC_HZ_WIDTH;j++)
	clr R20
	xjmp L115
L112:
	.dbline 349
;       {
	.dbline 350
;          SetPageCol(uPage,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	xcall _SetPageCol
	.dbline 351
;          ch_w=GB_16[k].Msk[j];
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R14,Z
	.dbline 352
;          if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w);
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L117
	.dbline 352
	std y+0,R14
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L118
L117:
	.dbline 353
;          else write_LCD(RIGHT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L118:
	.dbline 354
L113:
	.dbline 348
	inc R20
L115:
	.dbline 348
	cpi R20,12
	brlo L112
	.dbline 355
;       }
;       SetPageCol(uPage+1,uCol);
	mov R18,R12
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 357
; 
;       for(j=0;j<ASC_HZ_WIDTH;j++)
	clr R20
	xjmp L122
L119:
	.dbline 358
;       {
	.dbline 359
;          SetPageCol(uPage+1,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 360
;          if(uCol+j<64)
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L123
	.dbline 361
;             ch_r=read_LCD(LEFT);
	clr R16
	xcall _read_LCD
	mov R22,R16
	xjmp L124
L123:
	.dbline 363
;          else
;             ch_r=read_LCD(RIGHT);
	ldi R16,1
	xcall _read_LCD
	mov R22,R16
L124:
	.dbline 364
;          ch_r&=0xf0;
	andi R22,240
	.dbline 365
;          ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	adiw R30,12
	add R30,R2
	adc R31,R3
	lpm R30,Z
	andi R30,15
	mov R14,R30
	.dbline 366
;          ch_w|=ch_r;
	or R14,R22
	.dbline 367
;          SetPageCol(uPage+1,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 368
;          if(uCol+j<64)
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L126
	.dbline 369
;             write_LCD(LEFT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L127
L126:
	.dbline 371
;          else
;             write_LCD(RIGHT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L127:
	.dbline 372
L120:
	.dbline 357
	inc R20
L122:
	.dbline 357
	cpi R20,12
	brsh X7
	xjmp L119
X7:
	.dbline 373
;       }
;       SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
	mov R18,R12
	subi R18,244    ; addi 12
	ldd R16,y+1
	xcall _SetPageCol
	.dbline 374
;    }
	xjmp L111
L110:
	.dbline 377
; 
;    else //汉字上半部是写半个字节
;    {
	.dbline 378
;       for(j=0;j<ASC_HZ_WIDTH;j++)
	clr R20
	xjmp L131
L128:
	.dbline 379
;       {
	.dbline 380
;          SetPageCol(uPage,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	xcall _SetPageCol
	.dbline 381
;          if(uCol+j<64)
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L132
	.dbline 382
;             ch_r=read_LCD(LEFT);
	clr R16
	xcall _read_LCD
	mov R22,R16
	xjmp L133
L132:
	.dbline 383
;          else ch_r=read_LCD(RIGHT);
	ldi R16,1
	xcall _read_LCD
	mov R22,R16
L133:
	.dbline 384
;          ch_r&=0x0f;
	andi R22,15
	.dbline 385
;          ch_w=GB_16[k].Msk[j];
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R14,Z
	.dbline 386
;          ch_w=ch_w<<4;
	mov R24,R14
	andi R24,#0x0F
	swap R24
	mov R14,R24
	.dbline 387
;          ch_w|=ch_r;
	or R14,R22
	.dbline 388
;          SetPageCol(uPage,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	xcall _SetPageCol
	.dbline 389
;          if(uCol+j<64)
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L135
	.dbline 390
;             write_LCD(LEFT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L136
L135:
	.dbline 392
;          else
;             write_LCD(RIGHT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L136:
	.dbline 393
L129:
	.dbline 378
	inc R20
L131:
	.dbline 378
	cpi R20,12
	brsh X8
	xjmp L128
X8:
	.dbline 394
;       }
;       SetPageCol(uPage+1,uCol);
	mov R18,R12
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 395
;       for(j=0;j<ASC_HZ_WIDTH;j++)
	clr R20
	xjmp L140
L137:
	.dbline 396
;       {
	.dbline 397
;          SetPageCol(uPage+1,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 399
; 
;          ch_r=GB_16[k].Msk[j];
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R22,Z
	.dbline 400
;          ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
	ldi R24,26
	mul R24,R10
	movw R2,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	adiw R30,12
	add R30,R2
	adc R31,R3
	lpm R14,Z
	.dbline 401
;          ch_r=ch_r>>4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 402
;          ch_w=ch_w<<4;
	mov R24,R14
	andi R24,#0x0F
	swap R24
	mov R14,R24
	.dbline 403
;          ch_w|=ch_r;
	or R14,R22
	.dbline 404
;          SetPageCol(uPage+1,uCol+j);
	mov R18,R12
	add R18,R20
	ldd R16,y+1
	subi R16,255    ; addi 1
	xcall _SetPageCol
	.dbline 405
;          if(uCol+j<64)
	mov R24,R12
	add R24,R20
	cpi R24,64
	brsh L143
	.dbline 406
;             write_LCD(LEFT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L144
L143:
	.dbline 408
;          else
;             write_LCD(RIGHT,DATA,ch_w);
	std y+0,R14
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L144:
	.dbline 409
L138:
	.dbline 395
	inc R20
L140:
	.dbline 395
	cpi R20,12
	brsh X9
	xjmp L137
X9:
	.dbline 410
	mov R18,R12
	subi R18,244    ; addi 12
	ldd R16,y+1
	xcall _SetPageCol
	.dbline 411
L111:
	.dbline -2
L102:
	adiw R28,2
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l uPage 1 c
	.dbsym r ch_r 22 c
	.dbsym r k 10 c
	.dbsym r uCol 12 c
	.dbsym r ch_w 14 c
	.dbsym r j 20 c
	.dbsym r hz 20 pc
	.dbend
	.dbfunc e disp_str _disp_str fV
;              i -> R20
;              p -> R22,R23
	.even
_disp_str::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 417
;       }
;       SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
;    }
; }
; 
; 
; //-----------字符串显示函数----------------
; void disp_str(unsigned char *p)
; {
	.dbline 418
;    unsigned char i=0;
	clr R20
	xjmp L147
L146:
	.dbline 420
;    while(p[i]>0)
;    {
	.dbline 421
;       if(p[i] < 128)
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R24,z+0
	cpi R24,128
	brsh L149
	.dbline 422
;       {	/* ASCII */
	.dbline 423
;          disp_char(p[i]);
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R16,z+0
	xcall _disp_char
	.dbline 424
;       }
	xjmp L150
L149:
	.dbline 426
;       else
;       {	/* 中文 */
	.dbline 427
;          disp_hz(&p[i]);
	mov R16,R20
	clr R17
	add R16,R22
	adc R17,R23
	xcall _disp_hz
	.dbline 428
;          i++;
	inc R20
	.dbline 429
;       }
L150:
	.dbline 430
	inc R20
	.dbline 431
L147:
	.dbline 419
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R2,z+0
	clr R3
	cp R3,R2
	brlo L146
	.dbline -2
L145:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r p 22 pc
	.dbend
	.dbfunc e GUI_Point _GUI_Point fV
;              y -> R22,R23
;             ch -> R20,R21
;           flag -> R10
;             yy -> R14
;             xx -> R12
	.even
_GUI_Point::
	xcall push_gset5
	mov R14,R18
	mov R12,R16
	sbiw R28,1
	ldd R10,y+11
	.dbline -1
	.dbline 438
;       i++;
;    }
; }
; 
; 
; //-------------------绘点函数----------------------------------              
; //XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点
; void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
; {
	.dbline 440
;    unsigned int y,ch;
;    ch=yy%8;  //余数
	ldi R18,8
	ldi R19,0
	mov R16,R14
	clr R17
	xcall mod16s
	movw R20,R16
	.dbline 442
; 
;    y=1;
	ldi R22,1
	ldi R23,0
	.dbline 443
;    for(;ch!=0;)
	xjmp L155
L152:
	.dbline 444
	.dbline 445
	ldi R16,2
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R22,R16
	.dbline 446
	subi R20,1
	sbci R21,0
	.dbline 447
L153:
	.dbline 443
L155:
	.dbline 443
	cpi R20,0
	cpc R20,R21
	brne L152
X10:
	.dbline 448
;    {
;       y=y*2;
;       ch--;
;    }
;    if(xx<64)
	mov R24,R12
	cpi R24,64
	brsh L156
	.dbline 449
;    {
	.dbline 450
;       set_page_L(yy/8);
	mov R16,R14
	lsr R16
	lsr R16
	lsr R16
	xcall _set_page_L
	.dbline 451
;       set_col_addr_L(xx);
	mov R16,R12
	xcall _set_col_addr_L
	.dbline 452
;       ch=read_LCD(LEFT);
	clr R16
	xcall _read_LCD
	mov R20,R16
	clr R21
	.dbline 453
;       set_col_addr_L(xx);
	mov R16,R12
	xcall _set_col_addr_L
	.dbline 454
;       if(flag)
	tst R10
	breq L158
	.dbline 455
;          write_LCD(LEFT,DATA,ch|y);
	movw R2,R20
	or R2,R22
	or R3,R23
	std y+0,R2
	ldi R18,1
	clr R16
	xcall _write_LCD
	xjmp L157
L158:
	.dbline 457
;       else
;          write_LCD(LEFT,DATA,ch&(~y));
	movw R2,R22
	com R2
	com R3
	movw R4,R20
	and R4,R2
	and R5,R3
	std y+0,R4
	ldi R18,1
	clr R16
	xcall _write_LCD
	.dbline 458
;    }
	xjmp L157
L156:
	.dbline 460
;    else
;    {
	.dbline 461
;       set_page_R(yy/8);
	mov R16,R14
	lsr R16
	lsr R16
	lsr R16
	xcall _set_page_R
	.dbline 462
;       set_col_addr_R(xx-64);
	mov R16,R12
	subi R16,64
	xcall _set_col_addr_R
	.dbline 463
;       ch=read_LCD(RIGHT);
	ldi R16,1
	xcall _read_LCD
	mov R20,R16
	clr R21
	.dbline 464
;       set_col_addr_R(xx-64);
	mov R16,R12
	subi R16,64
	xcall _set_col_addr_R
	.dbline 465
;       if(flag)
	tst R10
	breq L160
	.dbline 466
;          write_LCD(RIGHT,DATA,ch|y);
	movw R2,R20
	or R2,R22
	or R3,R23
	std y+0,R2
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
	xjmp L161
L160:
	.dbline 468
;       else
;          write_LCD(RIGHT,DATA,ch&(~y));
	movw R2,R22
	com R2
	com R3
	movw R4,R20
	and R4,R2
	and R5,R3
	std y+0,R4
	ldi R18,1
	ldi R16,1
	xcall _write_LCD
L161:
	.dbline 469
L157:
	.dbline -2
L151:
	adiw R28,1
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r y 22 i
	.dbsym r ch 20 i
	.dbsym r flag 10 c
	.dbsym r yy 14 c
	.dbsym r xx 12 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\12864-ICC\lcd.c
_CurCol::
	.blkb 1
	.dbsym e CurCol _CurCol c
_CurPage::
	.blkb 1
	.dbsym e CurPage _CurPage c
_CurRow::
	.blkb 1
	.dbsym e CurRow _CurRow c
_CurOffset::
	.blkb 1
	.dbsym e CurOffset _CurOffset c

⌨️ 快捷键说明

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