📄 main.lis
字号:
00AC .dbsym r hunum 10 c
00AC .dbsym r ShowBit 14 c
00AC .dbsym r ll 12 c
00AC .dbsym r l 20 c
00AC .dbsym l h 11 c
00AC .dbend
00AC .dbfunc e DisplayNumInt _DisplayNumInt fV
00AC ; srnum -> R22
00AC ; tnnum -> R12
00AC ; hunum -> R10
00AC ; ShowBit -> R14
00AC ; ll -> R12,R13
00AC ; l -> R20
00AC ; h -> y+11
.even
00AC _DisplayNumInt::
00AC 0E940000 xcall push_arg4
00B0 0E940000 xcall push_xgsetF0FC
00B4 422F mov R20,R18
00B6 2197 sbiw R28,1
00B8 CF84 ldd R12,y+15
00BA D888 ldd R13,y+16
00BC E988 ldd R14,y+17
00BE .dbline -1
00BE .dbline 95
00BE ; }
00BE ;
00BE ; //DisplayNumInt该函数主要用于测试显示中间变量
00BE ; void DisplayNumInt(unsigned char h,unsigned char l,unsigned int ll,unsigned char ShowBit)
00BE ; {
00BE .dbline 97
00BE ; unsigned char hunum,tnnum,srnum; //百、十、个位
00BE ; hunum=ll/100; //百位
00BE 24E6 ldi R18,100
00C0 30E0 ldi R19,0
00C2 8601 movw R16,R12
00C4 0E940000 xcall div16u
00C8 A02E mov R10,R16
00CA .dbline 98
00CA ; srnum=ll%10; //个位
00CA 2AE0 ldi R18,10
00CC 30E0 ldi R19,0
00CE 8601 movw R16,R12
00D0 0E940000 xcall mod16u
00D4 602F mov R22,R16
00D6 .dbline 99
00D6 ; tnnum=(ll-hunum*100)/10; //十位
00D6 84E6 ldi R24,100
00D8 8A9D mul R24,R10
00DA 8601 movw R16,R12
00DC 0019 sub R16,R0
00DE 1109 sbc R17,R1
00E0 2AE0 ldi R18,10
00E2 30E0 ldi R19,0
00E4 0E940000 xcall div16u
00E8 C02E mov R12,R16
00EA .dbline 101
00EA ;
00EA ; hunum+=0x30;srnum+=0x30;tnnum+=0x30;
00EA 8A2D mov R24,R10
00EC 805D subi R24,208 ; addi 48
00EE A82E mov R10,R24
00F0 .dbline 101
00F0 605D subi R22,208 ; addi 48
00F2 .dbline 101
00F2 8C2D mov R24,R12
00F4 805D subi R24,208 ; addi 48
00F6 C82E mov R12,R24
00F8 .dbline 102
00F8 ; if(ShowBit==3) //显示百,十,个,位
00F8 8E2D mov R24,R14
00FA 8330 cpi R24,3
00FC 91F4 brne L8
00FE X2:
00FE .dbline 103
00FE ; {
00FE .dbline 104
00FE ; PrintOneASCII(h,l,hunum);PrintOneASCII(h,l+8,tnnum);
00FE A882 std y+0,R10
0100 242F mov R18,R20
0102 0B85 ldd R16,y+11
0104 0E940000 xcall _PrintOneASCII
0108 .dbline 104
0108 C882 std y+0,R12
010A 242F mov R18,R20
010C 285F subi R18,248 ; addi 8
010E 0B85 ldd R16,y+11
0110 0E940000 xcall _PrintOneASCII
0114 .dbline 105
0114 ; PrintOneASCII(h,l+16,srnum);
0114 6883 std y+0,R22
0116 242F mov R18,R20
0118 205F subi R18,240 ; addi 16
011A 0B85 ldd R16,y+11
011C 0E940000 xcall _PrintOneASCII
0120 .dbline 106
0120 ; }
0120 0EC0 xjmp L9
0122 L8:
0122 .dbline 107
0122 ; else if(ShowBit==2) //显示十,个,位
0122 8E2D mov R24,R14
0124 8230 cpi R24,2
0126 59F4 brne L10
0128 X3:
0128 .dbline 108
0128 ; {
0128 .dbline 109
0128 ; PrintOneASCII(h,l,tnnum);PrintOneASCII(h,l+8,srnum);
0128 C882 std y+0,R12
012A 242F mov R18,R20
012C 0B85 ldd R16,y+11
012E 0E940000 xcall _PrintOneASCII
0132 .dbline 109
0132 6883 std y+0,R22
0134 242F mov R18,R20
0136 285F subi R18,248 ; addi 8
0138 0B85 ldd R16,y+11
013A 0E940000 xcall _PrintOneASCII
013E .dbline 110
013E ; }
013E L10:
013E L9:
013E .dbline -2
013E L7:
013E .dbline 0 ; func end
013E 2196 adiw R28,1
0140 0E940000 xcall pop_xgsetF0FC
0144 2496 adiw R28,4
0146 0895 ret
0148 .dbsym r srnum 22 c
0148 .dbsym r tnnum 12 c
0148 .dbsym r hunum 10 c
0148 .dbsym r ShowBit 14 c
0148 .dbsym r ll 12 i
0148 .dbsym r l 20 c
0148 .dbsym l h 11 c
0148 .dbend
0148 .dbfunc e MMCFntHZ _MMCFntHZ fpc
0148 ; flgover -> <dead>
0148 ; FntStartBlk -> y+10
0148 ; Dir_Attrib -> R14
0148 ; HzNmL -> R12
0148 ; HzNmH -> R14
0148 ; Blk -> y+6
0148 ; InOffset -> R12,R13
0148 ; Hzpt -> y+2
0148 ; HzChr -> R12,R13
0148 ; buffp -> R10,R11
.even
0148 _MMCFntHZ::
0148 0E940000 xcall push_xgsetF0FC
014C 6901 movw R12,R18
014E 5801 movw R10,R16
0150 2E97 sbiw R28,14
0152 .dbline -1
0152 .dbline 115
0152 ; }
0152 ;
0152 ; //从SD卡上读取汉字字型信息,输入汉字的内码号(常指针),返回汉字的字型指针
0152 ; unsigned char * MMCFntHZ(unsigned char *buffp,unsigned char *HzChr)
0152 ; {
0152 .dbline 120
0152 ; unsigned int InOffset;
0152 ; unsigned long Blk,Hzpt,FntStartBlk; //字库文件的起始扇区
0152 ; unsigned char HzNmH,HzNmL;
0152 ; unsigned char flgover;
0152 ; unsigned char Dir_Attrib = 0;
0152 .dbline 122
0152 ; //汉字在汉字库中的位置=汉字点阵数*[(区码-A0h-1)*94+(位码-A0h-1)]
0152 ; HzNmH=HzChr[0];HzNmL=HzChr[1];
0152 F601 movw R30,R12
0154 E080 ldd R14,z+0
0156 .dbline 122
0156 3196 adiw R30,1
0158 C080 ldd R12,z+0
015A .dbline 127
015A ; //显示内码:
015A ; //DisplayLong(HzNmH*65536+HzNmL,3);
015A ; //Delay(500);
015A ; /////
015A ; Hzpt=32*((HzNmH-0xA0-1)*(unsigned long)94+(HzNmL-0xA0-1));
015A 8E2D mov R24,R14
015C 9927 clr R25
015E 805A subi R24,160
0160 9040 sbci R25,0
0162 0197 sbiw R24,1
0164 1C01 movw R2,R24
0166 4424 clr R4
0168 37FC sbrc R3,7
016A 4094 com R4
016C 5524 clr R5
016E 47FC sbrc R4,7
0170 5094 com R5
0172 4EE5 ldi R20,94
0174 50E0 ldi R21,0
0176 60E0 ldi R22,0
0178 70E0 ldi R23,0
017A 5A92 st -y,R5
017C 4A92 st -y,R4
017E 3A92 st -y,R3
0180 2A92 st -y,R2
0182 8A01 movw R16,R20
0184 9B01 movw R18,R22
0186 0E940000 xcall empy32u
018A 1801 movw R2,R16
018C 2901 movw R4,R18
018E 8C2D mov R24,R12
0190 9927 clr R25
0192 805A subi R24,160
0194 9040 sbci R25,0
0196 0197 sbiw R24,1
0198 3C01 movw R6,R24
019A 8824 clr R8
019C 77FC sbrc R7,7
019E 8094 com R8
01A0 9924 clr R9
01A2 87FC sbrc R8,7
01A4 9094 com R9
01A6 260C add R2,R6
01A8 371C adc R3,R7
01AA 481C adc R4,R8
01AC 591C adc R5,R9
01AE 40E2 ldi R20,32
01B0 50E0 ldi R21,0
01B2 60E0 ldi R22,0
01B4 70E0 ldi R23,0
01B6 5A92 st -y,R5
01B8 4A92 st -y,R4
01BA 3A92 st -y,R3
01BC 2A92 st -y,R2
01BE 8A01 movw R16,R20
01C0 9B01 movw R18,R22
01C2 0E940000 xcall empy32u
01C6 0A83 std y+2,R16
01C8 1B83 std y+3,R17
01CA 2C83 std y+4,R18
01CC 3D83 std y+5,R19
01CE .dbline 133
01CE ; //显示汉字字型在字库中的位置:
01CE ; //DisplayLong(Hzpt,1);
01CE ; //Delay(500);
01CE ; /////
01CE ; //由汉字内码,计算它所在的扇区号和偏移位置
01CE ; Blk=Hzpt/512;InOffset=Hzpt%512; //512是每个扇区的大小
01CE 89E0 ldi R24,9
01D0 90E0 ldi R25,0
01D2 0A81 ldd R16,y+2
01D4 1B81 ldd R17,y+3
01D6 2C81 ldd R18,y+4
01D8 3D81 ldd R19,y+5
01DA 8A93 st -y,R24
01DC 0E940000 xcall lsr32
01E0 0E83 std y+6,R16
01E2 1F83 std y+7,R17
01E4 2887 std y+8,R18
01E6 3987 std y+9,R19
01E8 .dbline 133
01E8 4FEF ldi R20,255
01EA 51E0 ldi R21,1
01EC 60E0 ldi R22,0
01EE 70E0 ldi R23,0
01F0 2A80 ldd R2,y+2
01F2 3B80 ldd R3,y+3
01F4 4C80 ldd R4,y+4
01F6 5D80 ldd R5,y+5
01F8 2422 and R2,R20
01FA 3522 and R3,R21
01FC 4622 and R4,R22
01FE 5722 and R5,R23
0200 6101 movw R12,R2
0202 .dbline 139
0202 ; //显示汉字字型在字库中的位置(扇区为单位):
0202 ; //DisplayLong(Blk*65536+InOffset,2);
0202 ; //Delay(500);
0202 ; //////////////////
0202 ; //读取该文件:
0202 ; MMC_SD_ReadSingleBlock((FONT_ClusterVar-2)*SecPerClus+data_offset+Blk,buffp);
0202 B982 std y+1,R11
0204 A882 std y+0,R10
0206 42E0 ldi R20,2
0208 50E0 ldi R21,0
020A 60E0 ldi R22,0
020C 70E0 ldi R23,0
020E 20910200 lds R18,_FONT_ClusterVar+2
0212 30910300 lds R19,_FONT_ClusterVar+2+1
0216 00910000 lds R16,_FONT_ClusterVar
021A 10910100 lds R17,_FONT_ClusterVar+1
021E 041B sub R16,R20
0220 150B sbc R17,R21
0222 260B sbc R18,R22
0224 370B sbc R19,R23
0226 20900000 lds R2,_SecPerClus
022A 3324 clr R3
022C 4424 clr R4
022E 5524 clr R5
0230 5A92 st -y,R5
0232 4A92 st -y,R4
0234 3A92 st -y,R3
0236 2A92 st -y,R2
0238 0E940000 xcall empy32u
023C 1801 movw R2,R16
023E 2901 movw R4,R18
0240 80900200 lds R8,_data_offset+2
0244 90900300 lds R9,_data_offset+2+1
0248 60900000 lds R6,_data_offset
024C 70900100 lds R7,_data_offset+1
0250 260C add R2,R6
0252 371C adc R3,R7
0254 481C adc R4,R8
0256 591C adc R5,R9
0258 6E80 ldd R6,y+6
025A 7F80 ldd R7,y+7
025C 8884 ldd R8,y+8
025E 9984 ldd R9,y+9
0260 260C add R2,R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -