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

📄 guidev_16.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000034  42b4              CMP      r4,r6
000036  dd00              BLE      |L2.58|
;;;212          PixelCnt = xsize;
000038  b2f4              UXTB     r4,r6
                  |L2.58|
;;;213        }
;;;214        xsize -= PixelCnt;
00003a  1b36              SUBS     r6,r6,r4
                  |L2.60|
;;;215        do {
;;;216          *pDest++ = *(pTrans + (pixels >> 6));
00003c  09a8              LSRS     r0,r5,#6
00003e  f83a0010          LDRH     r0,[r10,r0,LSL #1]
000042  f8270b02          STRH     r0,[r7],#2
000046  06a8              LSLS     r0,r5,#26
;;;217          pixels <<= 2;
000048  0e05              LSRS     r5,r0,#24
;;;218        } while (--PixelCnt);
00004a  1e64              SUBS     r4,r4,#1
00004c  f01404ff          ANDS     r4,r4,#0xff
000050  d1f4              BNE      |L2.60|
;;;219        if (xsize) {
000052  2e00              CMP      r6,#0
000054  d043              BEQ      |L2.222|
;;;220          PixelCnt = 4;
;;;221          pixels = *(++p);
000056  f1080001          ADD      r0,r8,#1
00005a  2404              MOVS     r4,#4                 ;220
00005c  4680              MOV      r8,r0
00005e  7805              LDRB     r5,[r0,#0]
;;;222          goto PixelLoopWrite;
000060  e7e8              B        |L2.52|
                  |L2.98|
;;;223        }
;;;224        break;
;;;225      case LCD_DRAWMODE_TRANS:
;;;226      PixelLoopTrans:
;;;227        if (PixelCnt > xsize)
000062  42b4              CMP      r4,r6
000064  dd00              BLE      |L2.104|
;;;228          PixelCnt = xsize;
000066  b2f4              UXTB     r4,r6
                  |L2.104|
;;;229        xsize -= PixelCnt;
000068  1b36              SUBS     r6,r6,r4
                  |L2.106|
;;;230        do {
;;;231          if (pixels & 0xc0) {
00006a  09a8              LSRS     r0,r5,#6
00006c  d00d              BEQ      |L2.138|
;;;232            *pDest = *(pTrans + (pixels >> 6));
00006e  09a8              LSRS     r0,r5,#6
000070  f83a0010          LDRH     r0,[r10,r0,LSL #1]
000074  8038              STRH     r0,[r7,#0]
;;;233            if (pUsage) {
000076  f1bb0f00          CMP      r11,#0
00007a  d006              BEQ      |L2.138|
;;;234              GUI_USAGE_AddPixel(pUsage, x, y);
00007c  f8db0008          LDR      r0,[r11,#8]
000080  4649              MOV      r1,r9
000082  6803              LDR      r3,[r0,#0]
000084  4658              MOV      r0,r11
000086  9a02              LDR      r2,[sp,#8]
000088  4798              BLX      r3
                  |L2.138|
;;;235            }
;;;236          }
;;;237          pDest++;
;;;238          x++;
00008a  06a8              LSLS     r0,r5,#26
00008c  1cbf              ADDS     r7,r7,#2              ;237
;;;239          pixels <<= 2;
00008e  0e05              LSRS     r5,r0,#24
;;;240        } while (--PixelCnt);
000090  1e64              SUBS     r4,r4,#1
000092  f1090901          ADD      r9,r9,#1              ;238
000096  f01404ff          ANDS     r4,r4,#0xff
00009a  d1e6              BNE      |L2.106|
;;;241        if (xsize) {
00009c  2e00              CMP      r6,#0
00009e  d01e              BEQ      |L2.222|
;;;242          PixelCnt = 4;
;;;243          pixels = *(++p);
0000a0  f1080001          ADD      r0,r8,#1
0000a4  2404              MOVS     r4,#4                 ;242
0000a6  4680              MOV      r8,r0
0000a8  7805              LDRB     r5,[r0,#0]
;;;244          goto PixelLoopTrans;
0000aa  e7da              B        |L2.98|
                  |L2.172|
;;;245        }
;;;246        break;
;;;247      case LCD_DRAWMODE_XOR:;
;;;248      PixelLoopXor:
;;;249        if (PixelCnt > xsize)
0000ac  42b4              CMP      r4,r6
0000ae  dd00              BLE      |L2.178|
;;;250          PixelCnt = xsize;
0000b0  b2f4              UXTB     r4,r6
                  |L2.178|
;;;251        xsize -= PixelCnt;
0000b2  1b36              SUBS     r6,r6,r4
                  |L2.180|
;;;252        do {
;;;253          if ((pixels & 0xc0))
0000b4  09a8              LSRS     r0,r5,#6
0000b6  d003              BEQ      |L2.192|
;;;254            *pDest ^= 255;
0000b8  8838              LDRH     r0,[r7,#0]
0000ba  f08000ff          EOR      r0,r0,#0xff
0000be  8038              STRH     r0,[r7,#0]
                  |L2.192|
;;;255          pDest++;
0000c0  06a8              LSLS     r0,r5,#26
0000c2  1cbf              ADDS     r7,r7,#2
;;;256          pixels <<= 2;
0000c4  0e05              LSRS     r5,r0,#24
;;;257        } while (--PixelCnt);
0000c6  1e64              SUBS     r4,r4,#1
0000c8  f01404ff          ANDS     r4,r4,#0xff
0000cc  d1f2              BNE      |L2.180|
;;;258        if (xsize) {
0000ce  2e00              CMP      r6,#0
0000d0  d005              BEQ      |L2.222|
;;;259          PixelCnt = 4;
;;;260          pixels = *(++p);
0000d2  f1080001          ADD      r0,r8,#1
0000d6  2404              MOVS     r4,#4                 ;259
0000d8  4680              MOV      r8,r0
0000da  7805              LDRB     r5,[r0,#0]
;;;261          goto PixelLoopXor;
0000dc  e7e6              B        |L2.172|
                  |L2.222|
;;;262        }
;;;263        break;
;;;264      }
;;;265    }
0000de  e8bd9fff          POP      {r0-r12,pc}
;;;266    
                          ENDP

0000e2  0000              DCW      0x0000
                  |L2.228|
                          DCD      GUI_Context

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

                  _DrawBitLine4BPP PROC
;;;270    */
;;;271    static void _DrawBitLine4BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, int xsize,
000000  e92d5ff0          PUSH     {r4-r12,lr}
;;;272                                 const LCD_PIXELINDEX* pTrans, PIXELINDEX* pDest)
;;;273    {
000004  468a              MOV      r10,r1
;;;274      U8 pixels;
;;;275      U8 PixelCnt;
;;;276      PixelCnt = 2 - Diff;
000006  e9dd160a          LDRD     r1,r6,[sp,#0x28]
00000a  4693              MOV      r11,r2                ;273
00000c  461f              MOV      r7,r3                 ;273
;;;277      pixels = (*p) << (Diff << 2);
00000e  781b              LDRB     r3,[r3,#0]
;;;278      switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
000010  4a50              LDR      r2,|L3.340|
000012  008d              LSLS     r5,r1,#2              ;277
000014  4681              MOV      r9,r0                 ;273
000016  40ab              LSLS     r3,r3,r5              ;277
000018  7b12              LDRB     r2,[r2,#0xc]  ; GUI_Context
00001a  e9dd840c          LDRD     r8,r4,[sp,#0x30]
00001e  f1c10002          RSB      r0,r1,#2              ;276
000022  b2c0              UXTB     r0,r0                 ;276
000024  b2dd              UXTB     r5,r3                 ;277
000026  f0120203          ANDS     r2,r2,#3
00002a  d01a              BEQ      |L3.98|
00002c  2a01              CMP      r2,#1
00002e  d079              BEQ      |L3.292|
000030  2a02              CMP      r2,#2
000032  d138              BNE      |L3.166|
;;;279    /*
;;;280              * Write mode *
;;;281    */
;;;282      case 0:
;;;283        /* Draw incomplete bytes to the left of center area */
;;;284        if (Diff) {
;;;285          *pDest = *(pTrans + (pixels >> 4));
;;;286          pDest++;
;;;287          xsize--;
;;;288          pixels = *++p;
;;;289        }
;;;290        /* Draw center area (2 pixels in one byte) */
;;;291        if (xsize >= 2) {
;;;292          int i = xsize >> 1;
;;;293          xsize &= 1;
;;;294          do {
;;;295            *pDest     = *(pTrans + (pixels >> 4));   /* Draw 1. (left) pixel */
;;;296            *(pDest+1) = *(pTrans + (pixels & 15));   /* Draw 2. (right) pixel */
;;;297            pDest += 2;
;;;298            pixels = *++p;
;;;299          } while (--i);
;;;300        }
;;;301        /* Draw incomplete bytes to the right of center area */
;;;302        if (xsize) {
;;;303          *pDest = * (pTrans + (pixels >> 4));
;;;304        }
;;;305        break;
;;;306    /*
;;;307              * Transparent draw mode *
;;;308    */
;;;309      case LCD_DRAWMODE_TRANS:
;;;310        /* Draw incomplete bytes to the left of center area */
;;;311        if (Diff) {
000034  2900              CMP      r1,#0
000036  d05f              BEQ      |L3.248|
;;;312          if (pixels & 0xF0) {
000038  0928              LSRS     r0,r5,#4
00003a  d00d              BEQ      |L3.88|
;;;313            *pDest = *(pTrans + (pixels >> 4));
00003c  0929              LSRS     r1,r5,#4
00003e  f8380011          LDRH     r0,[r8,r1,LSL #1]
000042  8020              STRH     r0,[r4,#0]
;;;314            if (pUsage) {
000044  f1b90f00          CMP      r9,#0
000048  d006              BEQ      |L3.88|
;;;315              GUI_USAGE_AddPixel(pUsage, x, y);
00004a  f8d90008          LDR      r0,[r9,#8]
00004e  465a              MOV      r2,r11
000050  6803              LDR      r3,[r0,#0]
000052  4651              MOV      r1,r10
000054  4648              MOV      r0,r9
000056  4798              BLX      r3
                  |L3.88|
;;;316            }
;;;317          }
;;;318          pDest++;
000058  1ca4              ADDS     r4,r4,#2
;;;319          x++;
00005a  f10a0a01          ADD      r10,r10,#1
;;;320          xsize--;
00005e  1e76              SUBS     r6,r6,#1
;;;321          pixels = *++p;
000060  e048              B        |L3.244|
                  |L3.98|
000062  b139              CBZ      r1,|L3.116|
000064  0929              LSRS     r1,r5,#4              ;285
000066  f8380011          LDRH     r0,[r8,r1,LSL #1]     ;285
00006a  f8240b02          STRH     r0,[r4],#2            ;285
00006e  f8175f01          LDRB     r5,[r7,#1]!           ;288
000072  1e76              SUBS     r6,r6,#1              ;287
                  |L3.116|
000074  2e02              CMP      r6,#2                 ;291
000076  db10              BLT      |L3.154|
000078  1070              ASRS     r0,r6,#1              ;292
00007a  f0060601          AND      r6,r6,#1              ;293
                  |L3.126|
00007e  0929              LSRS     r1,r5,#4              ;295
000080  f8381011          LDRH     r1,[r8,r1,LSL #1]     ;295
000084  8021              STRH     r1,[r4,#0]            ;295
000086  f005010f          AND      r1,r5,#0xf            ;296
00008a  f8381011          LDRH     r1,[r8,r1,LSL #1]     ;296
00008e  8061              STRH     r1,[r4,#2]            ;296
000090  1d24              ADDS     r4,r4,#4              ;297
000092  f8175f01          LDRB     r5,[r7,#1]!           ;298
000096  1e40              SUBS     r0,r0,#1              ;299
000098  d1f1              BNE      |L3.126|
                  |L3.154|
00009a  2e00              CMP      r6,#0                 ;302
00009c  d003              BEQ      |L3.166|
00009e  0929              LSRS     r1,r5,#4              ;303
0000a0  f8380011          LDRH     r0,[r8,r1,LSL #1]     ;303
0000a4  8020              STRH     r0,[r4,#0]            ;303
                  |L3.166|
;;;322        }
;;;323        /* Draw center area (2 pixels in one byte) */
;;;324        while (xsize >= 2) {
;;;325          /* Draw 1. (left) pixel */
;;;326          if (pixels & 0xF0) {
;;;327            *pDest = *(pTrans + (pixels >> 4));
;;;328            if (pUsage) {
;;;329              GUI_USAGE_AddPixel(pUsage, x, y);
;;;330            }
;;;331          }
;;;332          /* Draw 2. (right) pixel */
;;;333          if (pixels &= 15) {
;;;334            *(pDest + 1) = *(pTrans + pixels);
;;;335            if (pUsage) {
;;;336              GUI_USAGE_AddPixel(pUsage, x + 1, y);
;;;337            }
;;;338          }
;;;339          pDest += 2;
;;;340          x += 2;
;;;341          xsize -= 2;

⌨️ 快捷键说明

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