📄 disp.lst
字号:
(0159) {
(0160) unsigned char i;
(0161) unsigned int chr_m;
(0162) chr_m=chrx;
05E2 8548 LDD R20,Y+8
05E3 2755 CLR R21
(0163) chr_m=chr_m*16;
05E4 E100 LDI R16,0x10
05E5 E010 LDI R17,0
05E6 019A MOVW R18,R20
05E7 940E07B0 CALL empy16s
05E9 01A8 MOVW R20,R16
(0164) if(y >= 8)
05EA 2D8A MOV R24,R10
05EB 3088 CPI R24,0x8
05EC F408 BCC 0x05EE
05ED C035 RJMP 0x0623
(0165) {
(0166) y=y-8;
05EE 5088 SUBI R24,0x8
05EF 2EA8 MOV R10,R24
(0167) LCD_Write_ComR(0xb8|x); //行坐标确定页地址
05F0 2D0C MOV R16,R12
05F1 6B08 ORI R16,0xB8
05F2 DF9C RCALL _LCD_Write_ComR
(0168) LCD_Write_ComR(0x40|y<<3); //列坐标确定列地址
05F3 2D0A MOV R16,R10
05F4 0F00 LSL R16
05F5 0F00 LSL R16
05F6 0F00 LSL R16
05F7 6400 ORI R16,0x40
05F8 DF96 RCALL _LCD_Write_ComR
(0169) for(i=0;i<8;i++)
05F9 2766 CLR R22
05FA C00C RJMP 0x0607
(0170) {
(0171) LCD_Write_DatR(Ezk[chr_m+i]);
05FB 2E26 MOV R2,R22
05FC 2433 CLR R3
05FD 01FA MOVW R30,R20
05FE 0DE2 ADD R30,R2
05FF 1DF3 ADC R31,R3
0600 EA8C LDI R24,0xAC
0601 E098 LDI R25,0x8
0602 0FE8 ADD R30,R24
0603 1FF9 ADC R31,R25
0604 9104 LPM R16,0(Z)
0605 DF9B RCALL _LCD_Write_DatR
0606 9563 INC R22
0607 3068 CPI R22,0x8
0608 F390 BCS 0x05FB
(0172) }
(0173) LCD_Write_ComR(0xb9|x);
0609 2D0C MOV R16,R12
060A 6B09 ORI R16,0xB9
060B DF83 RCALL _LCD_Write_ComR
(0174) LCD_Write_ComR(0x40|y<<3);
060C 2D0A MOV R16,R10
060D 0F00 LSL R16
060E 0F00 LSL R16
060F 0F00 LSL R16
0610 6400 ORI R16,0x40
0611 DF7D RCALL _LCD_Write_ComR
(0175) for(i=8;i<16;i++)
0612 E068 LDI R22,0x8
0613 C00C RJMP 0x0620
(0176) {
(0177) LCD_Write_DatR(Ezk[chr_m+i]);
0614 2E26 MOV R2,R22
0615 2433 CLR R3
0616 01FA MOVW R30,R20
0617 0DE2 ADD R30,R2
0618 1DF3 ADC R31,R3
0619 EA8C LDI R24,0xAC
061A E098 LDI R25,0x8
061B 0FE8 ADD R30,R24
061C 1FF9 ADC R31,R25
061D 9104 LPM R16,0(Z)
061E DF82 RCALL _LCD_Write_DatR
061F 9563 INC R22
0620 3160 CPI R22,0x10
0621 F390 BCS 0x0614
(0178) }
(0179) }
0622 C032 RJMP 0x0655
(0180) else
(0181) {
(0182) LCD_Write_ComL(0xb8|x);
0623 2D0C MOV R16,R12
0624 6B08 ORI R16,0xB8
0625 DF44 RCALL _LCD_Write_ComL
(0183) LCD_Write_ComL(0x40|y<<3);
0626 2D0A MOV R16,R10
0627 0F00 LSL R16
0628 0F00 LSL R16
0629 0F00 LSL R16
062A 6400 ORI R16,0x40
062B DF3E RCALL _LCD_Write_ComL
(0184) for(i=0;i<8;i++)
062C 2766 CLR R22
062D C00C RJMP 0x063A
(0185) {
(0186) LCD_Write_DatL(Ezk[chr_m+i]);
062E 2E26 MOV R2,R22
062F 2433 CLR R3
0630 01FA MOVW R30,R20
0631 0DE2 ADD R30,R2
0632 1DF3 ADC R31,R3
0633 EA8C LDI R24,0xAC
0634 E098 LDI R25,0x8
0635 0FE8 ADD R30,R24
0636 1FF9 ADC R31,R25
0637 9104 LPM R16,0(Z)
0638 DF43 RCALL _LCD_Write_DatL
0639 9563 INC R22
063A 3068 CPI R22,0x8
063B F390 BCS 0x062E
(0187) }
(0188) LCD_Write_ComL(0xb9|x);
063C 2D0C MOV R16,R12
063D 6B09 ORI R16,0xB9
063E DF2B RCALL _LCD_Write_ComL
(0189) LCD_Write_ComL(0x40|y<<3);
063F 2D0A MOV R16,R10
0640 0F00 LSL R16
0641 0F00 LSL R16
0642 0F00 LSL R16
0643 6400 ORI R16,0x40
0644 DF25 RCALL _LCD_Write_ComL
(0190) for(i=8;i<16;i++)
0645 E068 LDI R22,0x8
0646 C00C RJMP 0x0653
(0191) {
(0192) LCD_Write_DatL(Ezk[chr_m+i]);
0647 2E26 MOV R2,R22
0648 2433 CLR R3
0649 01FA MOVW R30,R20
064A 0DE2 ADD R30,R2
064B 1DF3 ADC R31,R3
064C EA8C LDI R24,0xAC
064D E098 LDI R25,0x8
064E 0FE8 ADD R30,R24
064F 1FF9 ADC R31,R25
0650 9104 LPM R16,0(Z)
0651 DF2A RCALL _LCD_Write_DatL
0652 9563 INC R22
0653 3160 CPI R22,0x10
0654 F390 BCS 0x0647
(0193) }
(0194) }
0655 940E07C3 CALL pop_gset4
0657 9508 RET
_LCD_WrCHr16x16:
chr_m --> R20
i --> R22
chrx --> Y+8
y --> R10
x --> R12
0658 940E07C8 CALL push_gset4
065A 2EA2 MOV R10,R18
065B 2EC0 MOV R12,R16
(0195) }
(0196)
(0197) //======================================================
(0198) //显示16x16字符,位置按8x8一个点来定
(0199) // x:行坐标(0-3) y:列坐标(0-15) chrx:显示字符(字符在字库中的索引)
(0200) //======================================================
(0201) void LCD_WrCHr16x16(unsigned char x,unsigned char y,unsigned char chrx)
(0202) {
(0203) unsigned char i;
(0204) unsigned int chr_m;
(0205) chr_m=chrx;
065C 8548 LDD R20,Y+8
065D 2755 CLR R21
(0206) chr_m=chr_m*32;
065E E200 LDI R16,0x20
065F E010 LDI R17,0
0660 019A MOVW R18,R20
0661 940E07B0 CALL empy16s
0663 01A8 MOVW R20,R16
(0207) if(y>=8) //y以字节计算,在右半屏显示,y以字节单位
0664 2D8A MOV R24,R10
0665 3088 CPI R24,0x8
0666 F408 BCC 0x0668
0667 C067 RJMP 0x06CF
(0208) {
(0209) y=y-8;
0668 5088 SUBI R24,0x8
0669 2EA8 MOV R10,R24
(0210) LCD_Write_ComR(0xb8|x); //确定显示行位置
066A 2D0C MOV R16,R12
066B 6B08 ORI R16,0xB8
066C DF22 RCALL _LCD_Write_ComR
(0211) LCD_Write_ComR(0x40|y<<3); //确定显示列位置
066D 2D0A MOV R16,R10
066E 0F00 LSL R16
066F 0F00 LSL R16
0670 0F00 LSL R16
0671 6400 ORI R16,0x40
0672 DF1C RCALL _LCD_Write_ComR
(0212) for(i=0;i<8;i++)
0673 2766 CLR R22
0674 C00C RJMP 0x0681
(0213) {
(0214) LCD_Write_DatR(Hzk[chr_m+i]);
0675 2E26 MOV R2,R22
0676 2433 CLR R3
0677 01FA MOVW R30,R20
0678 0DE2 ADD R30,R2
0679 1DF3 ADC R31,R3
067A E88C LDI R24,0x8C
067B E090 LDI R25,0
067C 0FE8 ADD R30,R24
067D 1FF9 ADC R31,R25
067E 9104 LPM R16,0(Z)
067F DF21 RCALL _LCD_Write_DatR
0680 9563 INC R22
0681 3068 CPI R22,0x8
0682 F390 BCS 0x0675
(0215) }
(0216)
(0217) LCD_Write_ComR(0xb8|x);
0683 2D0C MOV R16,R12
0684 6B08 ORI R16,0xB8
0685 DF09 RCALL _LCD_Write_ComR
(0218) LCD_Write_ComR(0x48|y<<3);
0686 2D0A MOV R16,R10
0687 0F00 LSL R16
0688 0F00 LSL R16
0689 0F00 LSL R16
068A 6408 ORI R16,0x48
068B DF03 RCALL _LCD_Write_ComR
(0219) for(i=8;i<16;i++)
068C E068 LDI R22,0x8
068D C00C RJMP 0x069A
(0220) {
(0221) LCD_Write_DatR(Hzk[chr_m+i]);
068E 2E26 MOV R2,R22
068F 2433 CLR R3
0690 01FA MOVW R30,R20
0691 0DE2 ADD R30,R2
0692 1DF3 ADC R31,R3
0693 E88C LDI R24,0x8C
0694 E090 LDI R25,0
0695 0FE8 ADD R30,R24
0696 1FF9 ADC R31,R25
0697 9104 LPM R16,0(Z)
0698 DF08 RCALL _LCD_Write_DatR
0699 9563 INC R22
069A 3160 CPI R22,0x10
069B F390 BCS 0x068E
(0222) }
(0223)
(0224) LCD_Write_ComR(0xb9|x);
069C 2D0C MOV R16,R12
069D 6B09 ORI R16,0xB9
069E DEF0 RCALL _LCD_Write_ComR
(0225) LCD_Write_ComR(0x40|y<<3);
069F 2D0A MOV R16,R10
06A0 0F00 LSL R16
06A1 0F00 LSL R16
06A2 0F00 LSL R16
06A3 6400 ORI R16,0x40
06A4 DEEA RCALL _LCD_Write_ComR
(0226) for(i=16;i<24;i++)
06A5 E160 LDI R22,0x10
06A6 C00C RJMP 0x06B3
(0227) {
(0228) LCD_Write_DatR(Hzk[chr_m+i]);
06A7 2E26 MOV R2,R22
06A8 2433 CLR R3
06A9 01FA MOVW R30,R20
06AA 0DE2 ADD R30,R2
06AB 1DF3 ADC R31,R3
06AC E88C LDI R24,0x8C
06AD E090 LDI R25,0
06AE 0FE8 ADD R30,R24
06AF 1FF9 ADC R31,R25
06B0 9104 LPM R16,0(Z)
06B1 DEEF RCALL _LCD_Write_DatR
06B2 9563 INC R22
06B3 3168 CPI R22,0x18
06B4 F390 BCS 0x06A7
(0229) }
(0230) LCD_Write_ComR(0xb9|x);
06B5 2D0C MOV R16,R12
06B6 6B09 ORI R16,0xB9
06B7 DED7 RCALL _LCD_Write_ComR
(0231) LCD_Write_ComR(0x48|y<<3);
06B8 2D0A MOV R16,R10
06B9 0F00 LSL R16
06BA 0F00 LSL R16
06BB 0F00 LSL R16
06BC 6408 ORI R16,0x48
06BD DED1 RCALL _LCD_Write_ComR
(0232) for(i=24;i<32;i++)
06BE E168 LDI R22,0x18
06BF C00C RJMP 0x06CC
(0233) {
(0234) LCD_Write_DatR(Hzk[chr_m+i]);
06C0 2E26 MOV R2,R22
06C1 2433 CLR R3
06C2 01FA MOVW R30,R20
06C3 0DE2 ADD R30,R2
06C4 1DF3 ADC R31,R3
06C5 E88C LDI R24,0x8C
06C6 E090 LDI R25,0
06C7 0FE8 ADD R30,R24
06C8 1FF9 ADC R31,R25
06C9 9104 LPM R16,0(Z)
06CA DED6 RCALL _LCD_Write_DatR
06CB 9563 INC R22
06CC 3260 CPI R22,0x20
06CD F390 BCS 0x06C0
(0235) }
(0236) }
06CE C064 RJMP 0x0733
(0237) else
(0238) {
(0239) LCD_Write_ComL(0xb8|x);
06CF 2D0C MOV R16,R12
06D0 6B08 ORI R16,0xB8
06D1 DE98 RCALL _LCD_Write_ComL
(0240) LCD_Write_ComL(0x40|y<<3);
06D2 2D0A MOV R16,R10
06D3 0F00 LSL R16
06D4 0F00 LSL R16
06D5 0F00 LSL R16
06D6 6400 ORI R16,0x40
06D7 DE92 RCALL _LCD_Write_ComL
(0241) for(i=0;i<8;i++)
06D8 2766 CLR R22
06D9 C00C RJMP 0x06E6
(0242) {
(0243) LCD_Write_DatL(Hzk[chr_m+i]);
06DA 2E26 MOV R2,R22
06DB 2433 CLR R3
06DC 01FA MOVW R30,R20
06DD 0DE2 ADD R30,R2
06DE 1DF3 ADC R31,R3
06DF E88C LDI R24,0x8C
06E0 E090 LDI R25,0
06E1 0FE8 ADD R30,R24
06E2 1FF9 ADC R31,R25
06E3 9104 LPM R16,0(Z)
06E4 DE97 RCALL _LCD_Write_DatL
06E5 9563 INC R22
06E6 3068 CPI R22,0x8
06E7 F390 BCS 0x06DA
(0244) }
(0245)
(0246) LCD_Write_ComL(0xb8|x);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -