lcd.txt

来自「ucos2.86版本结合STM板极支持包」· 文本 代码 · 共 1,632 行 · 第 1/5 页

TXT
1,632
字号
0005c2  4650              MOV      r0,r10
0005c4  f7fff7ff          BL       LCD_DisplayChar
;;;385    
;;;386          /* Increment character number in one line */
;;;387          index++;
0005c8  1c7f              ADDS     r7,r7,#1
;;;388    
;;;389          /* Decrement the column position by 16 */
;;;390          refcolumn -= 16;
0005ca  f1a9f1a9          SUB      r0,r9,#0x10
0005ce  fa1ffa1f          UXTH     r9,r0
;;;391          /* Point on the next character */
;;;392          ptr++;
;;;393          /* Increment the number of character after the last space */
;;;394          spaceindex++;
0005d2  1c6d              ADDS     r5,r5,#1
;;;395          if(*ptr == 0x20)
0005d4  f814f814          LDRB     r0,[r4,#1]!
0005d8  2820              CMP      r0,#0x20
0005da  d102              BNE      |L1.1506|
;;;396          {
;;;397            spaceindex = 0;
0005dc  2500              MOVS     r5,#0
0005de  f1a9f1a9          SUB      r6,r9,#0x10
                  |L1.1506|
0005e2  f1b8f1b8          SUBS     r8,r8,#1
0005e6  d2ca              BCS      |L1.1406|
                  |L1.1512|
;;;398            column = refcolumn - 16;
;;;399          }
;;;400        }
;;;401      }
;;;402    }
0005e8  e8bde8bd          POP      {r4-r10,pc}
;;;403    
                          ENDP

                  LCD_ScrollText PROC
;;;411    void LCD_ScrollText(u8 Line, u8 *ptr)
;;;412    {
0005ec  e92de92d          PUSH     {r4-r10,lr}
0005f0  4682              MOV      r10,r0
0005f2  460c              MOV      r4,r1
;;;413      u32 i = 0, length = 0, x = 0;
0005f4  2500              MOVS     r5,#0
0005f6  2700              MOVS     r7,#0
;;;414      u16 refcolumn = 319;
0005f8  f240f240          MOV      r6,#0x13f
;;;415    
;;;416      /* Get the string length */
;;;417      length = StrLength(ptr);
0005fc  4620              MOV      r0,r4
0005fe  f7fff7ff          BL       StrLength
000602  4680              MOV      r8,r0
;;;418    
;;;419      while(1)
000604  f240f240          MOV      r9,#0x13f
                  |L1.1544|
;;;420      {
;;;421        /* Send the string character by character on lCD */
;;;422        while ((*ptr != 0) & (i < 20))
000608  7820              LDRB     r0,[r4,#0]
00060a  b100              CBZ      r0,|L1.1550|
00060c  2001              MOVS     r0,#1
                  |L1.1550|
00060e  2d14              CMP      r5,#0x14
000610  d201              BCS      |L1.1558|
000612  2101              MOVS     r1,#1
000614  e000              B        |L1.1560|
                  |L1.1558|
000616  2100              MOVS     r1,#0
                  |L1.1560|
000618  4208              TST      r0,r1
00061a  d015              BEQ      |L1.1608|
                  |L1.1564|
;;;423        {
;;;424          /* Display one character on LCD */
;;;425          LCD_DisplayChar(Line, refcolumn, *ptr);
00061c  7822              LDRB     r2,[r4,#0]
00061e  4631              MOV      r1,r6
000620  4650              MOV      r0,r10
000622  f7fff7ff          BL       LCD_DisplayChar
;;;426          /* Decrement the column position by 16 */
;;;427          refcolumn -= 16;
000626  f1a6f1a6          SUB      r0,r6,#0x10
00062a  b286              UXTH     r6,r0
;;;428          /* Point on the next character */
;;;429          ptr++;
;;;430          /* Increment the character counter */
;;;431          i++;
00062c  1c6d              ADDS     r5,r5,#1
00062e  f814f814          LDRB     r0,[r4,#1]!
000632  b108              CBZ      r0,|L1.1592|
000634  2101              MOVS     r1,#1
000636  e000              B        |L1.1594|
                  |L1.1592|
000638  2100              MOVS     r1,#0
                  |L1.1594|
00063a  2d14              CMP      r5,#0x14
00063c  d201              BCS      |L1.1602|
00063e  2001              MOVS     r0,#1
000640  e000              B        |L1.1604|
                  |L1.1602|
000642  2000              MOVS     r0,#0
                  |L1.1604|
000644  4201              TST      r1,r0
000646  d1e9              BNE      |L1.1564|
                  |L1.1608|
;;;432        }
;;;433    
;;;434        Delay(10);
000648  200a              MOVS     r0,#0xa
00064a  f7fff7ff          BL       Delay
;;;435    
;;;436        i = 0;
00064e  2500              MOVS     r5,#0
;;;437        ptr -= length;
000650  eba4eba4          SUB      r4,r4,r8
;;;438        x++;
000654  1c7f              ADDS     r7,r7,#1
;;;439        if(refcolumn < 16)
000656  2e10              CMP      r6,#0x10
000658  d200              BCS      |L1.1628|
;;;440        {
;;;441          x = 0;
00065a  2700              MOVS     r7,#0
                  |L1.1628|
00065c  4278              RSBS     r0,r7,#0
00065e  eb09eb09          ADD      r0,r9,r0,LSL #4
;;;442        }
;;;443    
;;;444        refcolumn = 319 - (x * 16);
000662  b286              UXTH     r6,r0
000664  e7d0              B        |L1.1544|
;;;445      }
;;;446    }
;;;447    
                          ENDP

                  LCD_SetDisplayWindow PROC
;;;458    void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;459    {
000666  e92de92d          PUSH     {r4-r8,lr}
00066a  4606              MOV      r6,r0
00066c  460c              MOV      r4,r1
00066e  4617              MOV      r7,r2
000670  461d              MOV      r5,r3
;;;460      LCD_WriteReg(R1, 0xD0);
000672  21d0              MOVS     r1,#0xd0
000674  2001              MOVS     r0,#1
000676  f7fff7ff          BL       LCD_WriteReg
;;;461      LCD_WriteReg(R5, 0x14);
00067a  2114              MOVS     r1,#0x14
00067c  2005              MOVS     r0,#5
00067e  f7fff7ff          BL       LCD_WriteReg
;;;462    
;;;463      LCD_WriteReg(R69, (Xpos - Height + 1));
000682  1bf0              SUBS     r0,r6,r7
000684  1c40              ADDS     r0,r0,#1
000686  b2c1              UXTB     r1,r0
000688  2045              MOVS     r0,#0x45
00068a  f7fff7ff          BL       LCD_WriteReg
;;;464      LCD_WriteReg(R70, Xpos);
00068e  4631              MOV      r1,r6
000690  2046              MOVS     r0,#0x46
000692  f7fff7ff          BL       LCD_WriteReg
;;;465    
;;;466      LCD_WriteReg(R71, (((Ypos - Width + 1) & 0x100)>> 8));
000696  1b60              SUBS     r0,r4,r5
000698  1c45              ADDS     r5,r0,#1
00069a  f3c5f3c5          UBFX     r1,r5,#8,#1
00069e  2047              MOVS     r0,#0x47
0006a0  f7fff7ff          BL       LCD_WriteReg
;;;467      LCD_WriteReg(R72, ((Ypos - Width + 1) & 0xFF));
0006a4  b2e9              UXTB     r1,r5
0006a6  2048              MOVS     r0,#0x48
0006a8  f7fff7ff          BL       LCD_WriteReg
;;;468    
;;;469      LCD_WriteReg(R73, ((Ypos & 0x100)>> 8));
0006ac  f3c4f3c4          UBFX     r1,r4,#8,#1
0006b0  2049              MOVS     r0,#0x49
0006b2  f7fff7ff          BL       LCD_WriteReg
;;;470      LCD_WriteReg(R74, (Ypos & 0xFF));
0006b6  b2e1              UXTB     r1,r4
0006b8  204a              MOVS     r0,#0x4a
0006ba  f7fff7ff          BL       LCD_WriteReg
;;;471    
;;;472      LCD_SetCursor(Xpos, Ypos);
0006be  4621              MOV      r1,r4
0006c0  4630              MOV      r0,r6
0006c2  e8bde8bd          POP      {r4-r8,lr}
0006c6  e7fe              B        LCD_SetCursor
;;;473    }
;;;474    
                          ENDP

                  LCD_DrawLine PROC
;;;487    void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
;;;488    {
0006c8  e92de92d          PUSH     {r4-r10,lr}
0006cc  4606              MOV      r6,r0
0006ce  4688              MOV      r8,r1
0006d0  4615              MOV      r5,r2
0006d2  4699              MOV      r9,r3
;;;489      u32 i = 0;
0006d4  2400              MOVS     r4,#0
;;;490    
;;;491      LCD_SetCursor(Xpos, Ypos);
0006d6  4641              MOV      r1,r8
0006d8  4630              MOV      r0,r6
0006da  f7fff7ff          BL       LCD_SetCursor
;;;492    
;;;493      if(Direction == Horizontal)
0006de  4f4f              LDR      r7,|L1.2076|
0006e0  f1b9f1b9          CMP      r9,#0
0006e4  d109              BNE      |L1.1786|
;;;494      {
;;;495        for(i = 0; i < Length; i++)
0006e6  2d00              CMP      r5,#0
0006e8  d905              BLS      |L1.1782|
                  |L1.1770|
0006ea  8838              LDRH     r0,[r7,#0]  ; TextColor
0006ec  f7fff7ff          BL       LCD_WriteRAM
0006f0  1c64              ADDS     r4,r4,#1
0006f2  42ac              CMP      r4,r5
0006f4  d3f9              BCC      |L1.1770|
                  |L1.1782|
0006f6  e8bde8bd          POP      {r4-r10,pc}
                  |L1.1786|
;;;496        {
;;;497          LCD_WriteRAM(TextColor);
;;;498        }
;;;499      }
;;;500      else
;;;501      {
;;;502       for(i = 0; i < Length; i++)
0006fa  2d00              CMP      r5,#0
0006fc  d9fb              BLS      |L1.1782|
                  |L1.1790|
0006fe  8838              LDRH     r0,[r7,#0]  ; TextColor
000700  f7fff7ff          BL       LCD_WriteRAM
000704  1c70              ADDS     r0,r6,#1
;;;503        {
;;;504    
;;;505          LCD_WriteRAM(TextColor);
;;;506          Xpos++;
000706  b2c6              UXTB     r6,r0
000708  4641              MOV      r1,r8
00070a  4630              MOV      r0,r6
00070c  f7fff7ff          BL       LCD_SetCursor
000710  1c64              ADDS     r4,r4,#1
000712  42ac              CMP      r4,r5
000714  d3f3              BCC      |L1.1790|
;;;507          LCD_SetCursor(Xpos, Ypos);
;;;508        }
;;;509      }
;;;510    }
000716  e8bde8bd          POP      {r4-r10,pc}
;;;511    
                          ENDP

                  LCD_DrawRect PROC
;;;522    void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;523    {
00071a  e92de92d          PUSH     {r4-r8,lr}
00071e  4604              MOV      r4,r0
000720  460e              MOV      r6,r1
000722  4615              MOV      r5,r2
000724  461f              MOV      r7,r3
;;;524      LCD_DrawLine(Xpos, Ypos, Width, Horizontal);
000726  2300              MOVS     r3,#0
000728  463a              MOV      r2,r7
00072a  4631              MOV      r1,r6
00072c  4620              MOV      r0,r4
00072e  f7fff7ff          BL       LCD_DrawLine
;;;525      LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);
000732  1960              ADDS     r0,r4,r5
000734  b2c0              UXTB     r0,r0
000736  2300              MOVS     r3,#0
000738  463a              MOV      r2,r7
00073a  4631              MOV      r1,r6
00073c  f7fff7ff          BL       LCD_DrawLine
;;;526    
;;;527      LCD_DrawLine(Xpos, Ypos, Height, Vertical);
000740  2301              MOVS     r3,#1
000742  462a              MOV      r2,r5
000744  4631              MOV      r1,r6
000746  4620              MOV      r0,r4
000748  f7fff7ff          BL       LCD_DrawLine
;;;528      LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);
00074c  1bf0              SUBS     r0,r6,r7
00074e  1c40              ADDS     r0,r0,#1
000750  b281              UXTH     r1,r0
000752  462a              MOV      r2,r5
000754  4620              MOV      r0,r4
000756  e8bde8bd          POP      {r4-r8,lr}
00075a  2301              MOVS     r3,#1
00075c  e7fe              B        LCD_DrawLine
;;;529    }
;;;530    
                          ENDP

                  LCD_DrawCircle PROC
;;;541    void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)
;;;542    {
00075e  e92de92d          PUSH     {r4-r11,lr}
000762  b083              SUB      sp,sp,#0xc
000764  4607              MOV      r7,r0
000766  4688              MOV      r8,r1
;;;543      s32  D;/* Decision Variable */
;;;544      u32  CurX;/* Current X Value */
;;;545      u32  CurY;/* Current Y Value */
;;;546    
;;;547      D = 3 - (Radius << 1);
000768  2003              MOVS     r0,#3
00076a  eba0eba0          SUB      r6,r0,r2,LSL #1
;;;548      CurX = 0;
00076e  2400              MOVS     r4,#0
;;;549      CurY = Radius;
000770  4615              MOV      r5,r2
;;;550    
;;;551      while (CurX <= CurY)
000772  f8dff8df          LDR      r9,|L1.2076|
                  |L1.1910|
;;;552      {
;;;553        LCD_SetCursor(Xpos + CurX, Ypos + CurY);
000776  eb08eb08          ADD      r10,r8,r5

⌨️ 快捷键说明

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