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

📄 lcd_gbk.txt

📁 mp3量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码。系统会自动删除debug和release目录
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -olcd_gbk.o --depend=lcd_gbk.d --device=DARMP --apcs=interwork -O3 -IC:\Keil\ARM\INC\Philips --omf_browse=lcd_gbk.crf LCD_GBK.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  GBK_Ini PROC
;;;28     uint8 GBK_Ini()//gbk初始化
;;;29     {
000000  e92d4010          PUSH     {r4,lr}
;;;30     	GBK12 = FAT_Open("\\st12.sys");//打开文件,得到簇号
000004  e28f0f91          ADR      r0,|L1.592|
000008  ebfffffe          BL       FAT_Open
00000c  e59f4248          LDR      r4,|L1.604|
;;;31     	if(GBK12 == 1)return 1;
000010  e3500001          CMP      r0,#1
000014  e5840000          STR      r0,[r4,#0]            ;30  ; GBK12
000018  0a000004          BEQ      |L1.48|
;;;32     	//GBK16 = FAT_Open("\\st16.sys");
;;;33     	//if(GBK16 == 1)return 1;
;;;34     	//GBK2UNI = FAT_Open("\\gbk2uni.sys");
;;;35     	//if(GBK2UNI == 1)return 1;
;;;36     	UNI2GBK = FAT_Open("\\uni2gbk.sys");
00001c  e28f0f8f          ADR      r0,|L1.608|
000020  ebfffffe          BL       FAT_Open
;;;37     	if(UNI2GBK == 1)return 1;
000024  e3500001          CMP      r0,#1
000028  e584000c          STR      r0,[r4,#0xc]          ;36  ; UNI2GBK
00002c  1a000002          BNE      |L1.60|
                  |L1.48|
000030  e3a00001          MOV      r0,#1
                  |L1.52|
000034  e8bd4010          POP      {r4,lr}
;;;38     
;;;39     	//将簇号转成扇区号
;;;40     	GBK12 = (uint32)FirstDataSector+(uint32)(GBK12 - 2)*(uint32)SectorsPerClust;//calculate the actual sector number
;;;41     	GBK16 = (uint32)FirstDataSector+(uint32)(GBK16 - 2)*(uint32)SectorsPerClust;//calculate the actual sector number
;;;42     	GBK2UNI = (uint32)FirstDataSector+(uint32)(GBK2UNI - 2)*(uint32)SectorsPerClust;//calculate the actual sector number
;;;43     	UNI2GBK = (uint32)FirstDataSector+(uint32)(UNI2GBK - 2)*(uint32)SectorsPerClust;//calculate the actual sector number
;;;44     
;;;45     	return 0;
;;;46     }
000038  e12fff1e          BX       lr
                  |L1.60|
00003c  e5942000          LDR      r2,[r4,#0]            ;40  ; GBK12
000040  e59f1228          LDR      r1,|L1.624|
000044  e2423002          SUB      r3,r2,#2              ;40
000048  e59f2224          LDR      r2,|L1.628|
00004c  e5911000          LDR      r1,[r1,#0]            ;40  ; FirstDataSector
000050  e1d220b0          LDRH     r2,[r2,#0]            ;40  ; SectorsPerClust
000054  e2400002          SUB      r0,r0,#2              ;43
000058  e0231392          MLA      r3,r2,r3,r1           ;40
00005c  e5843000          STR      r3,[r4,#0]            ;41  ; GBK12
000060  e5943004          LDR      r3,[r4,#4]            ;41  ; GBK16
000064  e0201092          MLA      r0,r2,r0,r1           ;43
000068  e2433002          SUB      r3,r3,#2              ;41
00006c  e0231392          MLA      r3,r2,r3,r1           ;41
000070  e5843004          STR      r3,[r4,#4]            ;42  ; GBK16
000074  e5943008          LDR      r3,[r4,#8]            ;42  ; GBK2UNI
000078  e2433002          SUB      r3,r3,#2              ;42
00007c  e0231392          MLA      r3,r2,r3,r1           ;42
000080  e5a43008          STR      r3,[r4,#8]!           ;43  ; GBK2UNI, UNI2GBK
000084  e5840004          STR      r0,[r4,#4]            ;43
000088  e3a00000          MOV      r0,#0                 ;45
00008c  eaffffe8          B        |L1.52|
;;;47     
                          ENDP

                  Unicode_to_GBK PROC
;;;50     uint8 Unicode_to_GBK(uint8 *ch)
;;;51     {
000090  e92d4030          PUSH     {r4,r5,lr}
000094  e24ddf81          SUB      sp,sp,#0x204
000098  e1a05000          MOV      r5,r0
;;;52     	uint16 temp;
;;;53     	uint16 sector_offset;//扇区偏移
;;;54     	uint16 byte_offset;//字节偏移
;;;55     	uint8 buffer[512];
;;;56     	temp = get16_little(ch);//由于FAT中文件民unicode码是 地字节在前,所以要按uint型读
00009c  ebfffffe          BL       get16_little
;;;57     	temp -= 0x4e00;//减去基础数据
0000a0  e2400c4e          SUB      r0,r0,#0x4e00
0000a4  e1a00800          LSL      r0,r0,#16
0000a8  e1a00820          LSR      r0,r0,#16
;;;58     	temp *= 2;//每个汉字两个字节
0000ac  e3e01801          MVN      r1,#0x10000
0000b0  e0010080          AND      r0,r1,r0,LSL #1
;;;59     	sector_offset = temp/BytesPerSector;//计算出扇区偏移,确定存在哪个扇区
0000b4  e59f11bc          LDR      r1,|L1.632|
0000b8  e1d110b0          LDRH     r1,[r1,#0]  ; BytesPerSector
0000bc  ebfffffe          BL       __aeabi_uidivmod
;;;60     	byte_offset = temp%BytesPerSector;//存在哪个字节
0000c0  e1a04001          MOV      r4,r1
;;;61     	if(FAT_ReadSector(UNI2GBK + sector_offset,buffer))return 1;//读那个扇区
0000c4  e59f1190          LDR      r1,|L1.604|
0000c8  e59f21ac          LDR      r2,|L1.636|
0000cc  e591100c          LDR      r1,[r1,#0xc]  ; UNI2GBK
0000d0  e5922000          LDR      r2,[r2,#0]  ; FAT_ReadSector
0000d4  e0800001          ADD      r0,r0,r1
0000d8  e28d1004          ADD      r1,sp,#4
0000dc  e1a0e00f          MOV      lr,pc
0000e0  e12fff12          BX       r2
0000e4  e3500000          CMP      r0,#0
0000e8  13a00001          MOVNE    r0,#1
0000ec  1a000006          BNE      |L1.268|
;;;62     	*ch = buffer[byte_offset];//将数据读出
0000f0  e28d0004          ADD      r0,sp,#4
0000f4  e7d01004          LDRB     r1,[r0,r4]
;;;63     	*(ch+1) = buffer[byte_offset+1];
0000f8  e0800004          ADD      r0,r0,r4
0000fc  e5c51000          STRB     r1,[r5,#0]            ;62
000100  e5d00001          LDRB     r0,[r0,#1]
000104  e5c50001          STRB     r0,[r5,#1]
;;;64     	return 0;
000108  e3a00000          MOV      r0,#0
                  |L1.268|
00010c  e28ddf81          ADD      sp,sp,#0x204
000110  e8bd4030          POP      {r4,r5,lr}
;;;65     }
000114  e12fff1e          BX       lr
;;;66     
                          ENDP

                  GBK_to_Unicode PROC
;;;68     {
;;;69     	return 0;
000118  e3a00000          MOV      r0,#0
;;;70     }
00011c  e12fff1e          BX       lr
;;;71     
                          ENDP

                  Read_One_GBK12 PROC
;;;72     uint8 Read_One_GBK12(uint8 *ch)
;;;73     {
000120  e92d4ff0          PUSH     {r4-r11,lr}
;;;74     	uint32 temp1;
;;;75     	uint8 temp2;
;;;76     	uint16  sector_offset;
;;;77     	uint16  byte_offset;
;;;78     	uint8 buffer[512];
;;;79     	temp1=*ch;
000124  e5d01000          LDRB     r1,[r0,#0]
;;;80     	temp2=*(ch+1);
000128  e5d00001          LDRB     r0,[r0,#1]
00012c  e24ddf81          SUB      sp,sp,#0x204          ;73
;;;81     	if(temp1<0x81||temp2<0x40)return 1;
000130  e3510081          CMP      r1,#0x81
000134  23500040          CMPCS    r0,#0x40
000138  3a00002f          BCC      |L1.508|
;;;82     	temp1-=0x81;
;;;83     	temp2-=0x40;
00013c  e2400040          SUB      r0,r0,#0x40
000140  e2411081          SUB      r1,r1,#0x81           ;82
000144  e20000ff          AND      r0,r0,#0xff
;;;84     	temp1*=192;//xx7f and xxff are included
000148  e3a020c0          MOV      r2,#0xc0
;;;85     	temp1+=temp2;
00014c  e0200291          MLA      r0,r1,r2,r0
;;;86     	temp1*=24;
000150  e3a01018          MOV      r1,#0x18
000154  e0000091          MUL      r0,r1,r0
;;;87     	sector_offset = temp1/BytesPerSector;
000158  e59fb118          LDR      r11,|L1.632|
00015c  e1db10b0          LDRH     r1,[r11,#0]  ; BytesPerSector
000160  ebfffffe          BL       __aeabi_uidivmod
;;;88     	byte_offset = temp1%BytesPerSector;
;;;89     	if(FAT_ReadSector(GBK12 + sector_offset,buffer))return 1;
000164  e59f90f0          LDR      r9,|L1.604|
000168  e59fa10c          LDR      r10,|L1.636|
00016c  e1a06800          LSL      r6,r0,#16             ;87
000170  e5990000          LDR      r0,[r9,#0]  ; GBK12
000174  e1a05801          LSL      r5,r1,#16             ;88
000178  e59a2000          LDR      r2,[r10,#0]  ; FAT_ReadSector
00017c  e1a06826          LSR      r6,r6,#16             ;87
000180  e1a05825          LSR      r5,r5,#16             ;88
000184  e0800006          ADD      r0,r0,r6
000188  e28d1004          ADD      r1,sp,#4
00018c  e1a0e00f          MOV      lr,pc
000190  e12fff12          BX       r2
000194  e3500000          CMP      r0,#0
000198  1a000017          BNE      |L1.508|
00019c  e59f80dc          LDR      r8,|L1.640|
;;;90     	if(byte_offset>488)
0001a0  e3550f7a          CMP      r5,#0x1e8
0001a4  e28d7004          ADD      r7,sp,#4              ;89
;;;91     	{
;;;92     		for(temp2 = 0,temp1 = byte_offset;temp2<(BytesPerSector - byte_offset);temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];
;;;93     		if(FAT_ReadSector(GBK12 + sector_offset + 1,buffer))return 1;
;;;94     		for(temp1 = 0;temp2<24;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];
;;;95     	}
;;;96     	else for(temp2 = 0,temp1 = byte_offset;temp2<24;temp2++,temp1++)GBK_Buffer[temp2] = buffer[temp1];
0001a8  93a00000          MOVLS    r0,#0
0001ac  9a00001e          BLS      |L1.556|
0001b0  e1db10b0          LDRH     r1,[r11,#0]           ;92
0001b4  e3a04000          MOV      r4,#0                 ;92
0001b8  e0410005          SUB      r0,r1,r5              ;92
                  |L1.444|
0001bc  e1500004          CMP      r0,r4                 ;92
0001c0  c7d71005          LDRBGT   r1,[r7,r5]            ;92
0001c4  c2855001          ADDGT    r5,r5,#1              ;92
0001c8  c7c81004          STRBGT   r1,[r8,r4]            ;92
0001cc  c2841001          ADDGT    r1,r4,#1              ;92
0001d0  c20140ff          ANDGT    r4,r1,#0xff           ;92
0001d4  cafffff8          BGT      |L1.444|
0001d8  e5990000          LDR      r0,[r9,#0]            ;93  ; GBK12
0001dc  e59a2000          LDR      r2,[r10,#0]           ;93  ; FAT_ReadSector
0001e0  e0800006          ADD      r0,r0,r6              ;93
0001e4  e2800001          ADD      r0,r0,#1              ;93
0001e8  e28d1004          ADD      r1,sp,#4              ;93
0001ec  e1a0e00f          MOV      lr,pc                 ;93
0001f0  e12fff12          BX       r2                    ;93
0001f4  e3500000          CMP      r0,#0                 ;93
0001f8  0a000008          BEQ      |L1.544|
                  |L1.508|
0001fc  e3a00001          MOV      r0,#1                 ;93
                  |L1.512|
000200  e28ddf81          ADD      sp,sp,#0x204          ;93
000204  e8bd4ff0          POP      {r4-r11,lr}           ;93
;;;97     	return 0;
;;;98     }
000208  e12fff1e          BX       lr
                  |L1.524|
00020c  e7d71000          LDRB     r1,[r7,r0]            ;94
000210  e2800001          ADD      r0,r0,#1              ;94
000214  e7c81004          STRB     r1,[r8,r4]            ;94
000218  e2841001          ADD      r1,r4,#1              ;94
00021c  e20140ff          AND      r4,r1,#0xff           ;94
                  |L1.544|
000220  e3540018          CMP      r4,#0x18              ;94
000224  3afffff8          BCC      |L1.524|
000228  ea000006          B        |L1.584|
                  |L1.556|
00022c  e7d71005          LDRB     r1,[r7,r5]            ;96
000230  e2855001          ADD      r5,r5,#1              ;96
000234  e7c81000          STRB     r1,[r8,r0]            ;96
000238  e2800001          ADD      r0,r0,#1              ;96
00023c  e20000ff          AND      r0,r0,#0xff           ;96
000240  e3500018          CMP      r0,#0x18              ;96
000244  3afffff8          BCC      |L1.556|
                  |L1.584|
000248  e3a00000          MOV      r0,#0                 ;97
00024c  eaffffeb          B        |L1.512|
                  |L1.592|
000250  5c737431          DCB      "\\\163\164\61"
000254  322e7379          DCB      "2.sy"
000258  73000000          DCB      "s\0\0\0"
                  |L1.604|
00025c  00000000          DCD      ||.data||
                  |L1.608|
000260  5c756e69          DCB      "\\\165\156\151"
000264  3267626b          DCB      "2gbk"

⌨️ 快捷键说明

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