📄 disp.lst
字号:
06E8 2D0C MOV R16,R12
06E9 6B08 ORI R16,0xB8
06EA DE7F RCALL _LCD_Write_ComL
(0247) LCD_Write_ComL(0x48|y<<3);
06EB 2D0A MOV R16,R10
06EC 0F00 LSL R16
06ED 0F00 LSL R16
06EE 0F00 LSL R16
06EF 6408 ORI R16,0x48
06F0 DE79 RCALL _LCD_Write_ComL
(0248) for(i=8;i<16;i++)
06F1 E068 LDI R22,0x8
06F2 C00C RJMP 0x06FF
(0249) {
(0250) LCD_Write_DatL(Hzk[chr_m+i]);
06F3 2E26 MOV R2,R22
06F4 2433 CLR R3
06F5 01FA MOVW R30,R20
06F6 0DE2 ADD R30,R2
06F7 1DF3 ADC R31,R3
06F8 E88C LDI R24,0x8C
06F9 E090 LDI R25,0
06FA 0FE8 ADD R30,R24
06FB 1FF9 ADC R31,R25
06FC 9104 LPM R16,0(Z)
06FD DE7E RCALL _LCD_Write_DatL
06FE 9563 INC R22
06FF 3160 CPI R22,0x10
0700 F390 BCS 0x06F3
(0251) }
(0252)
(0253) LCD_Write_ComL(0xb9|x);
0701 2D0C MOV R16,R12
0702 6B09 ORI R16,0xB9
0703 DE66 RCALL _LCD_Write_ComL
(0254) LCD_Write_ComL(0x40|y<<3);
0704 2D0A MOV R16,R10
0705 0F00 LSL R16
0706 0F00 LSL R16
0707 0F00 LSL R16
0708 6400 ORI R16,0x40
0709 DE60 RCALL _LCD_Write_ComL
(0255) for(i=16;i<24;i++)
070A E160 LDI R22,0x10
070B C00C RJMP 0x0718
(0256) {
(0257) LCD_Write_DatL(Hzk[chr_m+i]);
070C 2E26 MOV R2,R22
070D 2433 CLR R3
070E 01FA MOVW R30,R20
070F 0DE2 ADD R30,R2
0710 1DF3 ADC R31,R3
0711 E88C LDI R24,0x8C
0712 E090 LDI R25,0
0713 0FE8 ADD R30,R24
0714 1FF9 ADC R31,R25
0715 9104 LPM R16,0(Z)
0716 DE65 RCALL _LCD_Write_DatL
0717 9563 INC R22
0718 3168 CPI R22,0x18
0719 F390 BCS 0x070C
(0258) }
(0259) LCD_Write_ComL(0xb9|x);
071A 2D0C MOV R16,R12
071B 6B09 ORI R16,0xB9
071C DE4D RCALL _LCD_Write_ComL
(0260) LCD_Write_ComL(0x48|y<<3);
071D 2D0A MOV R16,R10
071E 0F00 LSL R16
071F 0F00 LSL R16
0720 0F00 LSL R16
0721 6408 ORI R16,0x48
0722 DE47 RCALL _LCD_Write_ComL
(0261) for(i=24;i<32;i++)
0723 E168 LDI R22,0x18
0724 C00C RJMP 0x0731
(0262) {
(0263) LCD_Write_DatL(Hzk[chr_m+i]);
0725 2E26 MOV R2,R22
0726 2433 CLR R3
0727 01FA MOVW R30,R20
0728 0DE2 ADD R30,R2
0729 1DF3 ADC R31,R3
072A E88C LDI R24,0x8C
072B E090 LDI R25,0
072C 0FE8 ADD R30,R24
072D 1FF9 ADC R31,R25
072E 9104 LPM R16,0(Z)
072F DE4C RCALL _LCD_Write_DatL
0730 9563 INC R22
0731 3260 CPI R22,0x20
0732 F390 BCS 0x0725
(0264) }
(0265) }
0733 940E07C3 CALL pop_gset4
0735 9508 RET
_LCD_WrMap8x8:
chr_m --> R20
i --> R22
chrx --> Y+8
y --> R10
x --> R12
0736 940E07C8 CALL push_gset4
0738 2EA2 MOV R10,R18
0739 2EC0 MOV R12,R16
(0266)
(0267) }
(0268)
(0269) //======================================================
(0270) //显示128x64点阵图型,位置按8x8一个点来定
(0271) // x:行坐标(0-3) y:列坐标(0-15) chrx:图型索引值
(0272) //======================================================
(0273) void LCD_WrMap8x8(unsigned char x,unsigned char y,unsigned char chrx)
(0274) {
(0275) unsigned char i;
(0276) unsigned int chr_m;
(0277) chr_m=chrx;
073A 8548 LDD R20,Y+8
073B 2755 CLR R21
(0278) chr_m=chr_m*64;
073C E400 LDI R16,0x40
073D E010 LDI R17,0
073E 019A MOVW R18,R20
073F 940E07B0 CALL empy16s
0741 01A8 MOVW R20,R16
(0279) if(y>=8) //y以字节计算,在右半屏显示,y以字节单位
0742 2D8A MOV R24,R10
0743 3088 CPI R24,0x8
0744 F0E0 BCS 0x0761
(0280) {
(0281) y=y-8;
0745 5088 SUBI R24,0x8
0746 2EA8 MOV R10,R24
(0282) LCD_Write_ComR(0xb8|x); //确定显示行位置
0747 2D0C MOV R16,R12
0748 6B08 ORI R16,0xB8
0749 DE45 RCALL _LCD_Write_ComR
(0283) LCD_Write_ComR(0x40|y<<3); //确定显示列位置
074A 2D0A MOV R16,R10
074B 0F00 LSL R16
074C 0F00 LSL R16
074D 0F00 LSL R16
074E 6400 ORI R16,0x40
074F DE3F RCALL _LCD_Write_ComR
(0284) for(i=0;i<64;i++)
0750 2766 CLR R22
0751 C00C RJMP 0x075E
(0285) {
(0286) LCD_Write_DatR(Hzk[chr_m+i]);
0752 2E26 MOV R2,R22
0753 2433 CLR R3
0754 01FA MOVW R30,R20
0755 0DE2 ADD R30,R2
0756 1DF3 ADC R31,R3
0757 E88C LDI R24,0x8C
0758 E090 LDI R25,0
0759 0FE8 ADD R30,R24
075A 1FF9 ADC R31,R25
075B 9104 LPM R16,0(Z)
075C DE44 RCALL _LCD_Write_DatR
075D 9563 INC R22
075E 3460 CPI R22,0x40
075F F390 BCS 0x0752
(0287) }
(0288) }
0760 C019 RJMP 0x077A
(0289) else
(0290) {
(0291) LCD_Write_ComL(0xb8|x);
0761 2D0C MOV R16,R12
0762 6B08 ORI R16,0xB8
0763 DE06 RCALL _LCD_Write_ComL
(0292) LCD_Write_ComL(0x40|y<<3);
0764 2D0A MOV R16,R10
0765 0F00 LSL R16
0766 0F00 LSL R16
0767 0F00 LSL R16
0768 6400 ORI R16,0x40
0769 DE00 RCALL _LCD_Write_ComL
(0293) for(i=0;i<64;i++)
076A 2766 CLR R22
076B C00C RJMP 0x0778
(0294) {
(0295) LCD_Write_DatL(Hzk[chr_m+i]);
076C 2E26 MOV R2,R22
076D 2433 CLR R3
076E 01FA MOVW R30,R20
076F 0DE2 ADD R30,R2
0770 1DF3 ADC R31,R3
0771 E88C LDI R24,0x8C
0772 E090 LDI R25,0
0773 0FE8 ADD R30,R24
0774 1FF9 ADC R31,R25
0775 9104 LPM R16,0(Z)
0776 DE05 RCALL _LCD_Write_DatL
0777 9563 INC R22
0778 3460 CPI R22,0x40
0779 F390 BCS 0x076C
(0296) }
(0297) }
077A 940E07C3 CALL pop_gset4
077C 9508 RET
_main:
i --> R20
077D 9721 SBIW R28,1
(0298) }
(0299)
(0300) //=============
(0301) //主程序
(0302) //=============
(0303) void main(void)
(0304) {
(0305) unsigned int i;
(0306) DDRA=0xff; PORTA=0x00; //数据端口输出
077E EF8F LDI R24,0xFF
077F BB8A OUT 0x1A,R24
0780 2422 CLR R2
0781 BA2B OUT 0x1B,R2
(0307) DDRC=0xff; PORTC=0x04; //控制端口输出
0782 BB84 OUT 0x14,R24
0783 E084 LDI R24,4
0784 BB85 OUT 0x15,R24
(0308)
(0309) //#asm("wdr");
(0310)
(0311) //#asm("SEI"); //开总中断
(0312) Delay(200);
0785 EC08 LDI R16,0xC8
0786 E010 LDI R17,0
0787 DDCD RCALL _Delay
(0313)
(0314) LCD_Init(); //LCD初始化
0788 DE2B RCALL _LCD_Init
(0315) LCD_Clr(); //LCD清屏
0789 DE37 RCALL _LCD_Clr
(0316)
(0317) Delay(200);
078A EC08 LDI R16,0xC8
078B E010 LDI R17,0
078C DDC8 RCALL _Delay
(0318) Delay(200);
078D EC08 LDI R16,0xC8
078E E010 LDI R17,0
078F DDC5 RCALL _Delay
(0319)
(0320) for(i=0; i<8; i++)
0790 2744 CLR R20
0791 2755 CLR R21
0792 C016 RJMP 0x07A9
(0321) {
(0322) LCD_WrMap8x8(i,0,2*i);
0793 E002 LDI R16,2
0794 E010 LDI R17,0
0795 019A MOVW R18,R20
0796 940E07B0 CALL empy16s
0798 8308 STD Y+0,R16
0799 2722 CLR R18
079A 2F04 MOV R16,R20
079B DF9A RCALL _LCD_WrMap8x8
(0323) LCD_WrMap8x8(i,8,2*i+1);
079C E002 LDI R16,2
079D E010 LDI R17,0
079E 019A MOVW R18,R20
079F 940E07B0 CALL empy16s
07A1 01C8 MOVW R24,R16
07A2 9601 ADIW R24,1
07A3 8388 STD Y+0,R24
07A4 E028 LDI R18,0x8
07A5 2F04 MOV R16,R20
07A6 DF8F RCALL _LCD_WrMap8x8
07A7 5F4F SUBI R20,0xFF
07A8 4F5F SBCI R21,0xFF
07A9 3048 CPI R20,0x8
07AA E0E0 LDI R30,0
07AB 075E CPC R21,R30
07AC F330 BCS 0x0793
(0324) }
(0325) //for(i=0;i<8;i++) LCD_WrCHr8x16(0,i,i); //第一行显示8x16西文字符
(0326) //for(i=0;i<8;i++) LCD_WrCHr16x16(0,i*2,i);
(0327) //for(i=0;i<8;i++) LCD_WrCHr16x16(2,i*2,i+8); //第二行显示16x16中文字符
(0328) //for(i=0;i<8;i++) LCD_WrCHr16x16(4,i*2,i+16); //第三行显示16x16中文字符
(0329) //for(i=0;i<8;i++) LCD_WrCHr16x16(6,i*2,i+24); //第三行显示16x16中文字符
(0330)
(0331) //for(i=0;i<8;i++) LCD_WrCHr16x16(6,i*2,i+24); //第四行显示16x16中文字符
(0332)
(0333) while(1)
FILE: <library>
07AD CFFF RJMP 0x07AD
07AE 9621 ADIW R28,1
07AF 9508 RET
empy16s:
07B0 920A ST R0,-Y
07B1 921A ST R1,-Y
07B2 938A ST R24,-Y
07B3 939A ST R25,-Y
07B4 9F02 MUL R16,R18
07B5 01C0 MOVW R24,R0
07B6 9F12 MUL R17,R18
07B7 0D90 ADD R25,R0
07B8 9F03 MUL R16,R19
07B9 0D90 ADD R25,R0
07BA 018C MOVW R16,R24
07BB 9199 LD R25,Y+
07BC 9189 LD R24,Y+
07BD 9019 LD R1,Y+
07BE 9009 LD R0,Y+
07BF 9508 RET
pop_gset2:
07C0 E0E2 LDI R30,2
07C1 940C07D2 JMP pop
pop_gset4:
07C3 E0E8 LDI R30,0x8
07C4 940C07D2 JMP pop
push_gset5:
07C6 92FA ST R15,-Y
07C7 92EA ST R14,-Y
push_gset4:
07C8 92DA ST R13,-Y
07C9 92CA ST R12,-Y
push_gset3:
07CA 92BA ST R11,-Y
07CB 92AA ST R10,-Y
push_gset2:
07CC 937A ST R23,-Y
07CD 936A ST R22,-Y
push_gset1:
07CE 935A ST R21,-Y
07CF 934A ST R20,-Y
07D0 9508 RET
pop_gset1:
07D1 E0E1 LDI R30,1
pop:
07D2 9149 LD R20,Y+
07D3 9159 LD R21,Y+
07D4 FDE0 SBRC R30,0
07D5 9508 RET
07D6 9169 LD R22,Y+
07D7 9179 LD R23,Y+
07D8 FDE1 SBRC R30,1
07D9 9508 RET
07DA 90A9 LD R10,Y+
07DB 90B9 LD R11,Y+
07DC FDE2 SBRC R30,2
07DD 9508 RET
07DE 90C9 LD R12,Y+
07DF 90D9 LD R13,Y+
07E0 FDE3 SBRC R30,3
07E1 9508 RET
07E2 90E9 LD R14,Y+
07E3 90F9 LD R15,Y+
07E4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -