lcd_rotateccw.txt

来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 548 行 · 第 1/2 页

TXT
548
字号
;;;208        if (xsize <= 0) {
0000aa  980b              LDR      r0,[sp,#0x2c]
0000ac  2800              CMP      r0,#0
0000ae  dd15              BLE      |L2.220|
0000b0  e9dd7809          LDRD     r7,r8,[sp,#0x24]
0000b4  2400              MOVS     r4,#0
0000b6  e00f              B        |L2.216|
                  |L2.184|
0000b8  f1ba0f01          CMP      r10,#1
0000bc  d109              BNE      |L2.210|
0000be  9b1b              LDR      r3,[sp,#0x6c]
0000c0  9a0b              LDR      r2,[sp,#0x2c]
0000c2  e9cd2300          STRD     r2,r3,[sp,#0]
0000c6  1938              ADDS     r0,r7,r4
0000c8  462b              MOV      r3,r5
0000ca  4632              MOV      r2,r6
0000cc  4641              MOV      r1,r8
0000ce  f7fffffe          BL       _DrawBitLine1BPP
                  |L2.210|
0000d2  9819              LDR      r0,[sp,#0x64]
0000d4  1c64              ADDS     r4,r4,#1
0000d6  4406              ADD      r6,r6,r0
                  |L2.216|
0000d8  455c              CMP      r4,r11
0000da  dbed              BLT      |L2.184|
                  |L2.220|
;;;209    		  return;
;;;210        }
;;;211        _DrawBitmap(x0, y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
;;;212      } else {
;;;213        /* Handle BITMAP with magnification */
;;;214        int x, y, xi, yi;
;;;215        int Shift = 8 - BitsPerPixel;
;;;216        for (x = x0, xi = 0; xi < ysize; xi++, x += yMul, pPixel += BytesPerLine) {
;;;217          int xMax = x + yMul - 1;
;;;218          if ((xMax >= GUI_Context.ClipRect.x0) && (x <= GUI_Context.ClipRect.x1)) {
;;;219            int BitsLeft = 0;
;;;220            const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;221            for (y = y0, yi = 0; yi < xsize; yi++, y -= xMul) {
;;;222              U8  Index;
;;;223              if (!BitsLeft) {
;;;224                Data = *pDataLine++;
;;;225                BitsLeft =8;
;;;226              }
;;;227              Index = Data >> Shift;
;;;228              Data    <<= BitsPerPixel;
;;;229              BitsLeft -= BitsPerPixel;
;;;230              if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0)) {
;;;231                LCD_PIXELINDEX OldColor = LCD_COLORINDEX;
;;;232                if (pTrans) {
;;;233                  LCD_COLORINDEX = *(pTrans + Index);
;;;234                } else {
;;;235                  LCD_COLORINDEX = Index;
;;;236                }
;;;237                LCD_FillRect(x, y - xMul + 1, xMax, y);
;;;238                LCD_COLORINDEX = OldColor;
;;;239              }
;;;240            }
;;;241          }
;;;242        }
;;;243      }
;;;244    }
0000dc  b00d              ADD      sp,sp,#0x34
0000de  e8bd8ff0          POP      {r4-r11,pc}
                  |L2.226|
0000e2  f1ca0008          RSB      r0,r10,#8             ;215
0000e6  9003              STR      r0,[sp,#0xc]          ;216
0000e8  9809              LDR      r0,[sp,#0x24]         ;216
0000ea  9005              STR      r0,[sp,#0x14]         ;216
0000ec  2000              MOVS     r0,#0                 ;216
0000ee  9004              STR      r0,[sp,#0x10]         ;216
0000f0  e04b              B        |L2.394|
                  |L2.242|
0000f2  9917              LDR      r1,[sp,#0x5c]         ;217
0000f4  9805              LDR      r0,[sp,#0x14]         ;217
0000f6  4a26              LDR      r2,|L2.400|
0000f8  4408              ADD      r0,r0,r1              ;217
0000fa  9008              STR      r0,[sp,#0x20]         ;217
0000fc  1e40              SUBS     r0,r0,#1              ;217
0000fe  9002              STR      r0,[sp,#8]            ;218
000100  f9b21004          LDRSH    r1,[r2,#4]            ;218  ; GUI_Context
000104  4281              CMP      r1,r0                 ;218
000106  dc38              BGT      |L2.378|
000108  4610              MOV      r0,r2                 ;218
00010a  f9b00008          LDRSH    r0,[r0,#8]            ;218  ; GUI_Context
00010e  9905              LDR      r1,[sp,#0x14]         ;218
000110  4288              CMP      r0,r1                 ;218
000112  db32              BLT      |L2.378|
000114  2400              MOVS     r4,#0                 ;219
000116  46b0              MOV      r8,r6                 ;220
000118  4627              MOV      r7,r4                 ;221
00011a  f8dd9028          LDR      r9,[sp,#0x28]         ;221
00011e  e029              B        |L2.372|
                  |L2.288|
000120  b914              CBNZ     r4,|L2.296|
000122  f8185b01          LDRB     r5,[r8],#1            ;224
000126  2408              MOVS     r4,#8                 ;225
                  |L2.296|
000128  9903              LDR      r1,[sp,#0xc]          ;227
00012a  eba4040a          SUB      r4,r4,r10             ;229
00012e  fa35f001          LSRS     r0,r5,r1              ;227
000132  fa05f50a          LSL      r5,r5,r10             ;228
000136  b2ed              UXTB     r5,r5                 ;228
000138  d103              BNE      |L2.322|
00013a  4915              LDR      r1,|L2.400|
00013c  7b09              LDRB     r1,[r1,#0xc]          ;230  ; GUI_Context
00013e  0789              LSLS     r1,r1,#30             ;230
000140  d414              BMI      |L2.364|
                  |L2.322|
000142  4913              LDR      r1,|L2.400|
000144  9a1b              LDR      r2,[sp,#0x6c]         ;231
000146  8849              LDRH     r1,[r1,#2]            ;231  ; GUI_Context
000148  9101              STR      r1,[sp,#4]            ;232
00014a  b10a              CBZ      r2,|L2.336|
00014c  f8320010          LDRH     r0,[r2,r0,LSL #1]     ;233
                  |L2.336|
000150  490f              LDR      r1,|L2.400|
000152  464b              MOV      r3,r9                 ;237
000154  8048              STRH     r0,[r1,#2]            ;235
000156  9916              LDR      r1,[sp,#0x58]         ;237
000158  9a02              LDR      r2,[sp,#8]            ;237
00015a  eba90101          SUB      r1,r9,r1              ;237
00015e  1c49              ADDS     r1,r1,#1              ;237
000160  9805              LDR      r0,[sp,#0x14]         ;237
000162  f7fffffe          BL       LCD_FillRect
000166  490a              LDR      r1,|L2.400|
000168  9801              LDR      r0,[sp,#4]            ;238
00016a  8048              STRH     r0,[r1,#2]            ;238
                  |L2.364|
00016c  9916              LDR      r1,[sp,#0x58]         ;221
00016e  1c7f              ADDS     r7,r7,#1              ;221
000170  eba90901          SUB      r9,r9,r1              ;221
                  |L2.372|
000174  980b              LDR      r0,[sp,#0x2c]         ;221
000176  4287              CMP      r7,r0                 ;221
000178  dbd2              BLT      |L2.288|
                  |L2.378|
00017a  9804              LDR      r0,[sp,#0x10]         ;216
00017c  1c40              ADDS     r0,r0,#1              ;216
00017e  9004              STR      r0,[sp,#0x10]         ;216
000180  9808              LDR      r0,[sp,#0x20]         ;216
000182  9005              STR      r0,[sp,#0x14]         ;216
000184  9819              LDR      r0,[sp,#0x64]         ;216
000186  4406              ADD      r6,r6,r0              ;216
000188  9804              LDR      r0,[sp,#0x10]         ;216
                  |L2.394|
00018a  4558              CMP      r0,r11                ;216
00018c  dbb1              BLT      |L2.242|
00018e  e7a5              B        |L2.220|
;;;245    
                          ENDP

                  |L2.400|
                          DCD      GUI_Context

                          AREA ||i._Rect2TextRect||, CODE, READONLY, ALIGN=1

                  _Rect2TextRect PROC
;;;113    */
;;;114    static void _Rect2TextRect(GUI_RECT * pRect) {
000000  b510              PUSH     {r4,lr}
;;;115      int x1, y1;
;;;116      x1 = pRect->x1;
;;;117      y1 = pRect->y1;
000002  88c3              LDRH     r3,[r0,#6]
;;;118      pRect->x1 = pRect->x0 + (y1 - pRect->y0);
000004  8842              LDRH     r2,[r0,#2]
000006  8801              LDRH     r1,[r0,#0]
000008  1a9b              SUBS     r3,r3,r2
00000a  8884              LDRH     r4,[r0,#4]            ;116
00000c  440b              ADD      r3,r3,r1
;;;119      pRect->y1 = pRect->y0 + (x1 - pRect->x0);
00000e  1a61              SUBS     r1,r4,r1
000010  8083              STRH     r3,[r0,#4]            ;118
000012  4411              ADD      r1,r1,r2
000014  80c1              STRH     r1,[r0,#6]
;;;120    }
000016  bd10              POP      {r4,pc}
;;;121    
                          ENDP


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

                  _TransformPointCCW PROC
;;;130    */
;;;131    static void _TransformPointCCW(int * pXPos, int * pYPos) {
000000  b57c              PUSH     {r2-r6,lr}
000002  460d              MOV      r5,r1
000004  4604              MOV      r4,r0
;;;132      GUI_RECT ClientRect = {0};
000006  2100              MOVS     r1,#0
000008  4668              MOV      r0,sp
00000a  460a              MOV      r2,r1
00000c  c006              STM      r0!,{r1,r2}
;;;133      int xPos, yPos, xNumPixel, yNumPixel;
;;;134      /* Get the client rectangle */
;;;135      #if GUI_WINSUPPORT
;;;136        WM_GetWindowRect(&ClientRect);
00000e  4668              MOV      r0,sp
000010  f7fffffe          BL       WM_GetWindowRect
;;;137      #else
;;;138        GUI_GetClientRect(&ClientRect);
;;;139      #endif
;;;140      xNumPixel = LCD_GetXSize() - 1;
000014  f7fffffe          BL       LCD_GetXSize
000018  1e46              SUBS     r6,r0,#1
;;;141      yNumPixel = LCD_GetYSize() - 1;
00001a  f7fffffe          BL       LCD_GetYSize
;;;142      if (ClientRect.x1 > xNumPixel) {
00001e  f9bd1004          LDRSH    r1,[sp,#4]
000022  1e40              SUBS     r0,r0,#1              ;141
000024  42b1              CMP      r1,r6
000026  dd01              BLE      |L4.44|
;;;143        ClientRect.x1 = xNumPixel;
000028  f8ad6004          STRH     r6,[sp,#4]
                  |L4.44|
;;;144      }
;;;145      if (ClientRect.y1 > yNumPixel) {
00002c  f9bd1006          LDRSH    r1,[sp,#6]
000030  4281              CMP      r1,r0
000032  dd01              BLE      |L4.56|
;;;146        ClientRect.y1 = yNumPixel;
000034  f8ad0006          STRH     r0,[sp,#6]
                  |L4.56|
;;;147      }
;;;148      /* Save old positions */
;;;149      xPos = *pXPos;
;;;150      yPos = *pYPos;
;;;151      /* Rotate and add window origin */
;;;152      *pXPos = ClientRect.x0 + yPos;
000038  f9bd2000          LDRSH    r2,[sp,#0]
00003c  6829              LDR      r1,[r5,#0]
00003e  6820              LDR      r0,[r4,#0]            ;150
000040  4411              ADD      r1,r1,r2
;;;153      *pYPos = ClientRect.y1 - xPos;
000042  6021              STR      r1,[r4,#0]
000044  f9bd1006          LDRSH    r1,[sp,#6]
000048  1a08              SUBS     r0,r1,r0
;;;154      /* Handle rotation of text rectangle */
;;;155      *pXPos = *pXPos + GUI_RectDispString.x0 - GUI_RectDispString.y0;
00004a  6028              STR      r0,[r5,#0]
00004c  480b              LDR      r0,|L4.124|
00004e  6821              LDR      r1,[r4,#0]
000050  f9b03000          LDRSH    r3,[r0,#0]  ; GUI_RectDispString
000054  f9b02002          LDRSH    r2,[r0,#2]  ; GUI_RectDispString
000058  4419              ADD      r1,r1,r3
00005a  1a89              SUBS     r1,r1,r2
;;;156      *pYPos = *pYPos + GUI_RectDispString.y1 - (ClientRect.y1 - ClientRect.y0) + GUI_RectDispString.x0;
00005c  6021              STR      r1,[r4,#0]
00005e  f9b02006          LDRSH    r2,[r0,#6]  ; GUI_RectDispString
000062  6829              LDR      r1,[r5,#0]
000064  f9bd3006          LDRSH    r3,[sp,#6]
000068  f9bd4002          LDRSH    r4,[sp,#2]
00006c  4411              ADD      r1,r1,r2
00006e  1b1a              SUBS     r2,r3,r4
000070  f9b00000          LDRSH    r0,[r0,#0]  ; GUI_RectDispString
000074  1a89              SUBS     r1,r1,r2
000076  4408              ADD      r0,r0,r1
;;;157    }
000078  6028              STR      r0,[r5,#0]
00007a  bd7c              POP      {r2-r6,pc}
;;;158    
                          ENDP

                  |L4.124|
                          DCD      GUI_RectDispString

                          AREA ||.data||, DATA, ALIGN=2

                  LCD_APIListCCW
                          DCD      _DrawBitmapCCW
                          DCD      _Rect2TextRect

⌨️ 快捷键说明

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