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

📄 lcd.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\lcd.o --depend=.\Obj\lcd.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Core\LCD.c]
                          THUMB

                          AREA ||i.LCD_Color2Index||, CODE, READONLY, ALIGN=2

                  LCD_Color2Index PROC
;;;314    */
;;;315    int LCD_Color2Index(LCD_COLOR Color) {
000000  4901              LDR      r1,|L1.8|
;;;316      return LCDDEV_L0_Color2Index(Color);
000002  6c89              LDR      r1,[r1,#0x48]  ; GUI_Context
000004  6809              LDR      r1,[r1,#0]
000006  4708              BX       r1
;;;317    }
;;;318    
                          ENDP

                  |L1.8|
                          DCD      GUI_Context

                          AREA ||i.LCD_DrawBitmap||, CODE, READONLY, ALIGN=2

                  LCD_DrawBitmap PROC
;;;149    */
;;;150    void LCD_DrawBitmap(int x0, int y0, int xsize, int ysize, int xMul, int yMul,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;151                           int BitsPerPixel, int BytesPerLine,
;;;152                           const U8 GUI_UNI_PTR * pPixel, const LCD_PIXELINDEX* pTrans)
;;;153    {
000004  4605              MOV      r5,r0
;;;154      U8  Data = 0;
;;;155      int x1, y1;
;;;156      /* Handle rotation if necessary */
;;;157      #if GUI_SUPPORT_ROTATION
;;;158      if (GUI_pLCD_APIList) {
000006  4873              LDR      r0,|L2.468|
000008  b087              SUB      sp,sp,#0x1c           ;153
00000a  f8d0c000          LDR      r12,[r0,#0]  ; GUI_pLCD_APIList
00000e  2600              MOVS     r6,#0                 ;154
000010  9c18              LDR      r4,[sp,#0x60]
000012  460f              MOV      r7,r1                 ;153
000014  4693              MOV      r11,r2                ;153
000016  f1bc0f00          CMP      r12,#0
00001a  d00c              BEQ      |L2.54|
;;;159        GUI_pLCD_APIList->pfDrawBitmap(x0, y0, xsize, ysize, xMul, yMul, BitsPerPixel, BytesPerLine, pPixel, pTrans);
00001c  e9dd0116          LDRD     r0,r1,[sp,#0x58]
000020  9b19              LDR      r3,[sp,#0x64]
000022  aa02              ADD      r2,sp,#8
000024  c213              STM      r2!,{r0,r1,r4}
000026  9305              STR      r3,[sp,#0x14]
000028  e9dd2314          LDRD     r2,r3,[sp,#0x50]
00002c  e9cd2300          STRD     r2,r3,[sp,#0]
;;;160        return;
000030  f8dc4000          LDR      r4,[r12,#0]
000034  e05d              B        |L2.242|
                  |L2.54|
;;;161      }
;;;162      #endif
;;;163      /* Handle the optional Y-magnification */
;;;164      y1 = y0 + ysize - 1;
000036  980a              LDR      r0,[sp,#0x28]
;;;165      x1 = x0 + xsize - 1;
000038  eb05010b          ADD      r1,r5,r11
00003c  183a              ADDS     r2,r7,r0              ;164
;;;166    /*  Handle BITMAP without magnification */
;;;167      if ((xMul | yMul) == 1) {
00003e  e9dd0314          LDRD     r0,r3,[sp,#0x50]
000042  1e52              SUBS     r2,r2,#1              ;164
000044  1e49              SUBS     r1,r1,#1              ;165
000046  4318              ORRS     r0,r0,r3
000048  2801              CMP      r0,#1
00004a  d16c              BNE      |L2.294|
;;;168        int Diff;
;;;169        /*  Clip y0 (top) */
;;;170        Diff = GUI_Context.ClipRect.y0 - y0;
00004c  4e62              LDR      r6,|L2.472|
00004e  f9b63006          LDRSH    r3,[r6,#6]  ; GUI_Context
000052  1bd8              SUBS     r0,r3,r7
;;;171        if (Diff > 0) {
000054  2800              CMP      r0,#0
000056  dd08              BLE      |L2.106|
;;;172          ysize -= Diff;
000058  9f0a              LDR      r7,[sp,#0x28]
00005a  1a3f              SUBS     r7,r7,r0
;;;173          if (ysize <= 0) {
00005c  970a              STR      r7,[sp,#0x28]
00005e  2f00              CMP      r7,#0
000060  dd4c              BLE      |L2.252|
;;;174    		    return;
;;;175          }
;;;176          y0     = GUI_Context.ClipRect.y0;
000062  461f              MOV      r7,r3
;;;177          #if GUI_SUPPORT_LARGE_BITMAPS                       /* Required only for 16 bit CPUs if some bitmaps are >64kByte */
;;;178            pPixel += (U32)     Diff * (U32)     BytesPerLine;
;;;179          #else
;;;180            pPixel += (unsigned)Diff * (unsigned)BytesPerLine;
000064  9b17              LDR      r3,[sp,#0x5c]
000066  fb004403          MLA      r4,r0,r3,r4
                  |L2.106|
;;;181          #endif
;;;182        }
;;;183        /*  Clip y1 (bottom) */
;;;184        Diff = y1 - GUI_Context.ClipRect.y1;
00006a  f9b6000a          LDRSH    r0,[r6,#0xa]  ; GUI_Context
00006e  1a10              SUBS     r0,r2,r0
;;;185        if (Diff > 0) {
000070  2800              CMP      r0,#0
000072  dd04              BLE      |L2.126|
;;;186          ysize -= Diff;
000074  9a0a              LDR      r2,[sp,#0x28]
000076  1a10              SUBS     r0,r2,r0
;;;187          if (ysize <= 0) {
000078  900a              STR      r0,[sp,#0x28]
00007a  2800              CMP      r0,#0
00007c  dd3e              BLE      |L2.252|
                  |L2.126|
;;;188    		    return;
;;;189          }
;;;190        }
;;;191        /*        Clip right side    */
;;;192        Diff = x1 - GUI_Context.ClipRect.x1;
00007e  f9b60008          LDRSH    r0,[r6,#8]  ; GUI_Context
000082  1a08              SUBS     r0,r1,r0
;;;193        if (Diff > 0) {
000084  2800              CMP      r0,#0
000086  dd01              BLE      |L2.140|
;;;194          xsize -= Diff;
000088  ebab0b00          SUB      r11,r11,r0
                  |L2.140|
;;;195        }
;;;196        /*        Clip left side ... (The difficult side ...)    */
;;;197        Diff = 0;
;;;198        if (x0 < GUI_Context.ClipRect.x0) {
00008c  f9b60004          LDRSH    r0,[r6,#4]  ; GUI_Context
000090  2200              MOVS     r2,#0                 ;197
000092  42a8              CMP      r0,r5
000094  dd20              BLE      |L2.216|
;;;199          Diff = GUI_Context.ClipRect.x0 - x0;
000096  1b42              SUBS     r2,r0,r5
;;;200    			xsize -= Diff;
;;;201    			switch (BitsPerPixel) {
000098  9816              LDR      r0,[sp,#0x58]
00009a  ebab0b02          SUB      r11,r11,r2            ;200
00009e  2804              CMP      r0,#4
0000a0  d037              BEQ      |L2.274|
0000a2  dc0b              BGT      |L2.188|
0000a4  2801              CMP      r0,#1
0000a6  d02c              BEQ      |L2.258|
0000a8  2802              CMP      r0,#2
0000aa  d115              BNE      |L2.216|
;;;202    			case 1:
;;;203      			pPixel+= (Diff>>3); x0 += (Diff>>3)<<3; Diff &=7;
;;;204    				break;
;;;205    			case 2:
;;;206    	  		pPixel+= (Diff>>2); x0 += (Diff>>2)<<2; Diff &=3;
0000ac  f0220003          BIC      r0,r2,#3
0000b0  eb0404a2          ADD      r4,r4,r2,ASR #2
0000b4  4405              ADD      r5,r5,r0
0000b6  f0020203          AND      r2,r2,#3
;;;207    				break;
0000ba  e00d              B        |L2.216|
                  |L2.188|
0000bc  4946              LDR      r1,|L2.472|
0000be  2808              CMP      r0,#8                 ;201
0000c0  f9b11004          LDRSH    r1,[r1,#4]            ;198
0000c4  eba10105          SUB      r1,r1,r5              ;199
;;;208    			case 4:
;;;209    				pPixel+= (Diff>>1); x0 += (Diff>>1)<<1; Diff &=1;
;;;210    				break;
;;;211    			case 8:
;;;212    				pPixel+= Diff;      x0 += Diff; Diff=0;
0000c8  4429              ADD      r1,r1,r5
0000ca  d02a              BEQ      |L2.290|
0000cc  2810              CMP      r0,#0x10              ;201
0000ce  d103              BNE      |L2.216|
;;;213    				break;
;;;214    			case 16:
;;;215    				pPixel+= (Diff<<1); x0 += Diff; Diff=0;
0000d0  eb040442          ADD      r4,r4,r2,LSL #1
                  |L2.212|
0000d4  460d              MOV      r5,r1
0000d6  2200              MOVS     r2,#0
                  |L2.216|
;;;216    				break;
;;;217    			}
;;;218        }
;;;219        if (xsize <=0) {
0000d8  f1bb0f00          CMP      r11,#0
0000dc  dd0e              BLE      |L2.252|
;;;220    		  return;
;;;221        }
;;;222        LCDDEV_L0_DrawBitmap   (x0,y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
0000de  9817              LDR      r0,[sp,#0x5c]
0000e0  e9cd4202          STRD     r4,r2,[sp,#8]
0000e4  9b19              LDR      r3,[sp,#0x64]
0000e6  9304              STR      r3,[sp,#0x10]
0000e8  9b16              LDR      r3,[sp,#0x58]
0000ea  9001              STR      r0,[sp,#4]
0000ec  9300              STR      r3,[sp,#0]
0000ee  6cb0              LDR      r0,[r6,#0x48]  ; GUI_Context
0000f0  68c4              LDR      r4,[r0,#0xc]
                  |L2.242|
0000f2  465a              MOV      r2,r11
0000f4  4639              MOV      r1,r7
0000f6  4628              MOV      r0,r5
0000f8  9b0a              LDR      r3,[sp,#0x28]
0000fa  47a0              BLX      r4
                  |L2.252|
;;;223      } else {
;;;224        /**** Handle BITMAP with magnification ***/
;;;225        int x,y;
;;;226        int yi;
;;;227        int Shift = 8-BitsPerPixel;
;;;228        for (y=y0, yi=0; yi<ysize; yi++, y+= yMul, pPixel+=BytesPerLine) {
;;;229          int yMax = y+yMul-1;
;;;230          /* Draw if within clip area (Optimization ... "if" is not required !) */
;;;231          if ((yMax >= GUI_Context.ClipRect.y0) && (y <= GUI_Context.ClipRect.y1)) {
;;;232            int BitsLeft =0;
;;;233            int xi;
;;;234            const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;235            for (x=x0, xi=0; xi<xsize; xi++, x+=xMul) {
;;;236              U8  Index;
;;;237              if (!BitsLeft) {
;;;238                Data = *pDataLine++;
;;;239                BitsLeft =8;
;;;240              }
;;;241              Index = Data>>Shift;
;;;242              Data    <<= BitsPerPixel;
;;;243              BitsLeft -= BitsPerPixel;
;;;244              if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) ==0)) {
;;;245                LCD_PIXELINDEX  OldColor = LCD_COLORINDEX;
;;;246                if (pTrans) {
;;;247                  LCD_COLORINDEX = *(pTrans+Index);
;;;248                } else {
;;;249                  LCD_COLORINDEX = Index;
;;;250                }
;;;251                LCD_FillRect(x,y, x+xMul-1, yMax);
;;;252                LCD_COLORINDEX = OldColor;
;;;253              }
;;;254            }
;;;255          }
;;;256        }
;;;257      }
;;;258    }
0000fc  b00b              ADD      sp,sp,#0x2c
0000fe  e8bd8ff0          POP      {r4-r11,pc}
                  |L2.258|
000102  f0220007          BIC      r0,r2,#7              ;203
000106  eb0404e2          ADD      r4,r4,r2,ASR #3       ;203
00010a  4405              ADD      r5,r5,r0              ;203
00010c  f0020207          AND      r2,r2,#7              ;203
000110  e7e2              B        |L2.216|
                  |L2.274|

⌨️ 快捷键说明

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