lcd.s
来自「用avr单片机接收GPS的数据的c语言程序」· S 代码 · 共 2,558 行 · 第 1/4 页
S
2,558 行
.dbline 516
; NOP();
nop
.dbline 517
; DDRA&=0x03;
in R24,0x1a
andi R24,3
out 0x1a,R24
.dbline 518
; DDRC&=0XFC;
in R24,0x14
andi R24,252
out 0x14,R24
.dbline -2
L53:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r lcd_wr_temp 20 c
.dbsym r lcd_wr_buffer 16 c
.dbend
.dbfunc e lcd_display2 _lcd_display2 fV
; lcd_row_counter -> y+1
; lcd_column_counter -> y+0
; lcd_invter -> R10
; lcd_asc -> R12
; asc_rdp -> R20,R21
; lcd_buffer1 -> R22
; lcd_asc_column -> R14
.even
_lcd_display2::
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 525
; }
;
; //LCD显示刷屏函数,起始地址放在lcd_display2_buffer[0][0]中
; //使用的全局变量:*lcd_display_rdp;
; //API function
; void lcd_display2(void)
; {
.dbline 533
; const unsigned char *asc_rdp;
; unsigned char lcd_row_counter;
; unsigned char lcd_column_counter;
; unsigned char lcd_asc;
; unsigned char lcd_asc_column;
; unsigned char lcd_buffer1;
; unsigned char lcd_invter;
; lcd_wr1_ins(0xc0); //显示起始行为0
ldi R16,192
xcall _lcd_wr1_ins
.dbline 534
; lcd_wr2_ins(0xc0); //显示起始行为0
ldi R16,192
xcall _lcd_wr2_ins
.dbline 535
; *lcd_display_rdp=lcd_display2_buffer[0][0];
lds R2,_lcd_display2_buffer
lds R30,_lcd_display_rdp
lds R31,_lcd_display_rdp+1
std z+0,R2
.dbline 536
; for (lcd_row_counter=0;lcd_row_counter<=7;lcd_row_counter++) //显示的0~7行循环计数
clr R0
std y+1,R0
xjmp L61
L58:
.dbline 537
; {
.dbline 538
; lcd_wr1_ins(lcd_row_counter+0xb8); //设置x页地址
ldd R16,y+1
subi R16,72 ; addi 184
xcall _lcd_wr1_ins
.dbline 539
; lcd_wr2_ins(lcd_row_counter+0xb8); //设置x页地址
ldd R16,y+1
subi R16,72 ; addi 184
xcall _lcd_wr2_ins
.dbline 540
; lcd_wr1_ins(0x40); //y地址清零
ldi R16,64
xcall _lcd_wr1_ins
.dbline 541
; lcd_wr2_ins(0x40); //y地址清零
ldi R16,64
xcall _lcd_wr2_ins
.dbline 542
; for (lcd_column_counter=0;lcd_column_counter<=9;lcd_column_counter++) //显示的0~20列循环计数(cs1为0~9列)
clr R0
std y+0,R0
xjmp L65
L62:
.dbline 543
; {
.dbline 544
; lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lds R30,_lcd_display_rdp
lds R31,_lcd_display_rdp+1
ldd R12,z+0
.dbline 545
; lcd_display_rdp++;
movw R24,R30
adiw R24,1
sts _lcd_display_rdp+1,R25
sts _lcd_display_rdp,R24
.dbline 546
; if (lcd_asc&BIT(7))
sbrs R12,7
rjmp L66
.dbline 547
; {
.dbline 548
; lcd_invter|=BIT(0);
mov R24,R10
ori R24,1
mov R10,R24
.dbline 549
; lcd_asc&=(~BIT(7));
mov R24,R12
andi R24,127
mov R12,R24
.dbline 550
; }
xjmp L67
L66:
.dbline 552
; else
; {
.dbline 553
; lcd_invter&=(~BIT(0));
mov R24,R10
andi R24,254
mov R10,R24
.dbline 554
; }
L67:
.dbline 555
; if ((lcd_asc<0x20)||(lcd_asc>=0x80))
mov R24,R12
cpi R24,32
brlo L70
cpi R24,128
brlo L68
L70:
.dbline 556
; {
.dbline 557
; lcd_asc=0x20;
ldi R24,32
mov R12,R24
.dbline 558
; }
L68:
.dbline 559
; lcd_asc=lcd_asc-0x20;
mov R24,R12
subi R24,32
mov R12,R24
.dbline 560
; for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++) //显示的5列的循环
clr R14
xjmp L74
L71:
.dbline 561
; {
.dbline 562
; asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
ldi R24,5
mul R24,R12
movw R2,R0
ldi R24,<_asc
ldi R25,>_asc
add R2,R24
adc R3,R25
mov R20,R14
clr R21
add R20,R2
adc R21,R3
.dbline 563
; lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
movw R30,R20
lpm R22,Z
.dbline 564
; if(lcd_invter&BIT(0))
sbrc R10,0
.dbline 565
; {
.dbline 566
; lcd_buffer1=~lcd_buffer1;
com R22
.dbline 567
; }
L75:
.dbline 568
mov R16,R22
xcall _lcd_wr1_data
.dbline 569
L72:
.dbline 560
inc R14
L74:
.dbline 560
ldi R24,4
cp R24,R14
brsh L71
.dbline 570
; lcd_wr1_data(lcd_buffer1);
; }
; if(lcd_invter&BIT(0))
sbrs R10,0
rjmp L77
.dbline 571
; {
.dbline 572
; lcd_wr1_data(0xff);
ldi R16,255
xcall _lcd_wr1_data
.dbline 573
; }
xjmp L78
L77:
.dbline 575
; else
; {
.dbline 576
; lcd_wr1_data(0x00);
clr R16
xcall _lcd_wr1_data
.dbline 577
; }
L78:
.dbline 578
L63:
.dbline 542
ldd R0,y+0
inc R0
std y+0,R0
L65:
.dbline 542
ldi R24,9
ldd R0,y+0
cp R24,R0
brlo X0
xjmp L62
X0:
.dbline 579
; }
; lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lds R30,_lcd_display_rdp
lds R31,_lcd_display_rdp+1
ldd R12,z+0
.dbline 580
; lcd_display_rdp++;
movw R24,R30
adiw R24,1
sts _lcd_display_rdp+1,R25
sts _lcd_display_rdp,R24
.dbline 581
; if (lcd_asc&BIT(7))
sbrs R12,7
rjmp L79
.dbline 582
; {
.dbline 583
; lcd_invter|=BIT(0);
mov R24,R10
ori R24,1
mov R10,R24
.dbline 584
; lcd_asc&=(~BIT(7));
mov R24,R12
andi R24,127
mov R12,R24
.dbline 585
; }
xjmp L80
L79:
.dbline 587
; else
; {
.dbline 588
; lcd_invter&=(~BIT(0));
mov R24,R10
andi R24,254
mov R10,R24
.dbline 589
; }
L80:
.dbline 590
; if ((lcd_asc<0x20)||(lcd_asc>=0x80))
mov R24,R12
cpi R24,32
brlo L83
cpi R24,128
brlo L81
L83:
.dbline 591
; {
.dbline 592
; lcd_asc=0x20;
ldi R24,32
mov R12,R24
.dbline 593
; }
L81:
.dbline 594
; lcd_asc=lcd_asc-0x20;
mov R24,R12
subi R24,32
mov R12,R24
.dbline 595
; for (lcd_asc_column=0;lcd_asc_column<=0x03;lcd_asc_column++) //显示的5列的循环
clr R14
xjmp L87
L84:
.dbline 596
; {
.dbline 597
; asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
ldi R24,5
mul R24,R12
movw R2,R0
ldi R24,<_asc
ldi R25,>_asc
add R2,R24
adc R3,R25
mov R20,R14
clr R21
add R20,R2
adc R21,R3
.dbline 598
; lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
movw R30,R20
lpm R22,Z
.dbline 599
; if(lcd_invter&BIT(0))
sbrc R10,0
.dbline 600
; {
.dbline 601
; lcd_buffer1=~lcd_buffer1;
com R22
.dbline 602
; }
L88:
.dbline 603
mov R16,R22
xcall _lcd_wr1_data
.dbline 604
L85:
.dbline 595
inc R14
L87:
.dbline 595
ldi R24,3
cp R24,R14
brsh L84
.dbline 605
; lcd_wr1_data(lcd_buffer1);
; }
; asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
ldi R24,5
mul R24,R12
movw R2,R0
ldi R24,<_asc
ldi R25,>_asc
add R2,R24
adc R3,R25
mov R20,R14
clr R21
add R20,R2
adc R21,R3
.dbline 606
; lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
movw R30,R20
lpm R22,Z
.dbline 607
; if(lcd_invter&BIT(0))
sbrc R10,0
.dbline 608
; {
.dbline 609
; lcd_buffer1=~lcd_buffer1;
com R22
.dbline 610
; }
L90:
.dbline 611
; lcd_wr2_data(lcd_buffer1);
mov R16,R22
xcall _lcd_wr2_data
.dbline 612
; if(lcd_invter&BIT(0))
sbrs R10,0
rjmp L92
.dbline 613
; {
.dbline 614
; lcd_wr2_data(0xff);
ldi R16,255
xcall _lcd_wr2_data
.dbline 615
; }
xjmp L93
L92:
.dbline 617
; else
; {
.dbline 618
; lcd_wr2_data(0x00);
clr R16
xcall _lcd_wr2_data
.dbline 619
; }
L93:
.dbline 620
; for (lcd_column_counter=11;lcd_column_counter<=20;lcd_column_counter++) //显示的0~20列循环计数(cs2为11~20列)
ldi R24,11
std y+0,R24
xjmp L97
L94:
.dbline 621
; {
.dbline 622
; lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lds R30,_lcd_display_rdp
lds R31,_lcd_display_rdp+1
ldd R12,z+0
.dbline 623
; lcd_display_rdp++;
movw R24,R30
adiw R24,1
sts _lcd_display_rdp+1,R25
sts _lcd_display_rdp,R24
.dbline 624
; if (lcd_asc&BIT(7))
sbrs R12,7
rjmp L98
.dbline 625
; {
.dbline 626
; lcd_invter|=BIT(0);
mov R24,R10
ori R24,1
mov R10,R24
.dbline 627
; lcd_asc&=(~BIT(7));
mov R24,R12
andi R24,127
mov R12,R24
.dbline 628
; }
xjmp L99
L98:
.dbline 630
; else
; {
.dbline 631
; lcd_invter&=(~BIT(0));
mov R24,R10
andi R24,254
mov R10,R24
.dbline 632
; }
L99:
.dbline 633
; if ((lcd_asc<0x20)||(lcd_asc>=0x80))
mov R24,R12
cpi R24,32
brlo L102
cpi R24,128
brlo L100
L102:
.dbline 634
; {
.dbline 635
; lcd_asc=0x20;
ldi R24,32
mov R12,R24
.dbline 636
; }
L100:
.dbline 637
; lcd_asc=lcd_asc-0x20;
mov R24,R12
subi R24,32
mov R12,R24
.dbline 638
; for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++) //显示的5列的循环
clr R14
xjmp L106
L103:
.dbline 639
; {
.dbline 640
; asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
ldi R24,5
mul R24,R12
movw R2,R0
ldi R24,<_asc
ldi R25,>_asc
add R2,R24
adc R3,R25
mov R20,R14
clr R21
add R20,R2
adc R21,R3
.dbline 641
; lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
movw R30,R20
lpm R22,Z
.dbline 642
; if(lcd_invter&BIT(0))
sbrc R10,0
.dbline 643
; {
.dbline 644
; lcd_buffer1=~lcd_buffer1;
com R22
.dbline 645
; }
L107:
.dbline 646
mov R16,R22
xcall _lcd_wr2_data
.dbline 647
L104:
.dbline 638
inc R14
L106:
.dbline 638
ldi R24,4
cp R24,R14
brsh L103
.dbline 648
; lcd_wr2_data(lcd_buffer1);
; }
; if(lcd_invter&BIT(0))
sbrs R10,0
rjmp L109
.dbline 649
; {
.dbline 650
; lcd_wr2_data(0xff);
ldi R16,255
xcall _lcd_wr2_data
.dbline 651
; }
xjmp L110
L109:
.dbline 653
; else
; {
.dbline 654
; lcd_wr2_data(0x00);
clr R16
xcall _lcd_wr2_data
.dbline 655
; }
L110:
.dbline 656
L95:
.dbline 620
ldd R0,y+0
inc R0
std y+0,R0
L97:
.dbline 620
ldi R24,20
ldd R0,y+0
cp R24,R0
brlo X1
xjmp L94
X1:
.dbline 657
clr R16
xcall _lcd_wr2_data
.dbline 658
clr R16
xcall _lcd_wr2_data
.dbline 659
L59:
.dbline 536
ldd R0,y+1
inc R0
std y+1,R0
L61:
.dbline 536
ldi R24,7
ldd R0,y+1
cp R24,R0
brlo X2
xjmp L58
X2:
.dbline 660
; }
; lcd_wr2_data(0x00);
; lcd_wr2_data(0x00);
; }
; lcd_wr1_ins(0x3f); //lcd模块1显示
ldi R16,63
xcall _lcd_wr1_ins
.dbline 661
; lcd_wr2_ins(0x3f); //lcd模块2显示
ldi R16,63
xcall _lcd_wr2_ins
.dbline -2
L57:
adiw R28,2
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l lcd_row_counter 1 c
.dbsym l lcd_column_counter 0 c
.dbsym r lcd_invter 10 c
.dbsym r lcd_asc 12 c
.dbsym r asc_rdp 20 pkc
.dbsym r lcd_buffer1 22 c
.dbsym r lcd_asc_column 14 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\Program\gps\lcd.c
_temp_i::
.blkb 1
.dbsym e temp_i _temp_i c
_lcd_display_rdp::
.blkb 2
.dbsym e lcd_display_rdp _lcd_display_rdp pc
_lcd_display_wrp::
.blkb 2
.dbsym e lcd_display_wrp _lcd_display_wrp pc
_lcd_display2_buffer::
.blkb 168
.dbsym e lcd_display2_buffer _lcd_display2_buffer A[168:8:21]c
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?