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

📄 lcd.txt

📁 针对STM32F103的UCOS移植
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;652      SPI_SendData(SPI2, RGB_Code);
000428  4cf9              LDR      r4,|L1.2064|
00042a  4631              MOV      r1,r6
00042c  4620              MOV      r0,r4
00042e  f7fffffe          BL       SPI_SendData
                  |L1.1074|
;;;653      while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET)
000432  2102              MOVS     r1,#2
000434  4620              MOV      r0,r4
000436  f7fffffe          BL       SPI_GetFlagStatus
00043a  2800              CMP      r0,#0
00043c  d0f9              BEQ      |L1.1074|
;;;654      {
;;;655      }
;;;656    
;;;657      LCD_CtrlLinesWrite(GPIOB, CtrlPin_NCS, Bit_SET);
00043e  4628              MOV      r0,r5
000440  e8bd4070          POP      {r4-r6,lr}
000444  2201              MOVS     r2,#1
000446  2104              MOVS     r1,#4
000448  e7fe              B        LCD_CtrlLinesWrite
;;;658    }
;;;659    
                          ENDP

                  LCD_DrawChar PROC
;;;253    void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c)
;;;254    {
00044a  e92d47f0          PUSH     {r4-r10,lr}
00044e  468a              MOV      r10,r1
000450  4617              MOV      r7,r2
;;;255      u32 index = 0, i = 0;
000452  2500              MOVS     r5,#0
;;;256      u8 Xaddress = 0;
;;;257    
;;;258      Xaddress = Xpos;
000454  4606              MOV      r6,r0
;;;259    
;;;260      LCD_SetCursor(Xaddress, Ypos);
000456  4651              MOV      r1,r10
000458  4630              MOV      r0,r6
00045a  f7fffffe          BL       LCD_SetCursor
;;;261    
;;;262      for(index = 0; index < 24; index++)
00045e  f8df83b4          LDR      r8,|L1.2068|
000462  f04f0901          MOV      r9,#1
                  |L1.1126|
;;;263      {
;;;264        for(i = 0; i < 16; i++)
000466  2400              MOVS     r4,#0
                  |L1.1128|
;;;265        {
;;;266          if((c[index] & (1 << i)) == 0x00)
000468  f8370015          LDRH     r0,[r7,r5,LSL #1]
00046c  fa09f104          LSL      r1,r9,r4
000470  4208              TST      r0,r1
000472  d104              BNE      |L1.1150|
;;;267          {
;;;268            LCD_WriteRAM(BackColor);
000474  f8b80002          LDRH     r0,[r8,#2]  ; BackColor
000478  f7fffffe          BL       LCD_WriteRAM
00047c  e003              B        |L1.1158|
                  |L1.1150|
;;;269          }
;;;270          else
;;;271          {
;;;272            LCD_WriteRAM(TextColor);
00047e  f8b80000          LDRH     r0,[r8,#0]  ; TextColor
000482  f7fffffe          BL       LCD_WriteRAM
                  |L1.1158|
000486  1c64              ADDS     r4,r4,#1              ;264
000488  2c10              CMP      r4,#0x10              ;264
00048a  d3ed              BCC      |L1.1128|
;;;273          }
;;;274        }
;;;275        Xaddress++;
00048c  1c70              ADDS     r0,r6,#1
00048e  b2c6              UXTB     r6,r0
;;;276        LCD_SetCursor(Xaddress, Ypos);
000490  4651              MOV      r1,r10
000492  4630              MOV      r0,r6
000494  f7fffffe          BL       LCD_SetCursor
000498  1c6d              ADDS     r5,r5,#1              ;262
00049a  2d18              CMP      r5,#0x18              ;262
00049c  d3e3              BCC      |L1.1126|
;;;277      }
;;;278    }
00049e  e8bd87f0          POP      {r4-r10,pc}
;;;279    
                          ENDP

                  LCD_DisplayChar PROC
;;;292    {
;;;293      Ascii -= 32;
0004a2  3a20              SUBS     r2,r2,#0x20
0004a4  b2d2              UXTB     r2,r2
;;;294      LCD_DrawChar(Line, Column, &ASCII_Table[Ascii * 24]);
0004a6  4bdc              LDR      r3,|L1.2072|
0004a8  eb020242          ADD      r2,r2,r2,LSL #1
0004ac  eb031202          ADD      r2,r3,r2,LSL #4
0004b0  e7fe              B        LCD_DrawChar
;;;295    }
;;;296    
                          ENDP

                  LCD_DisplayStringLine PROC
;;;307    void LCD_DisplayStringLine(u8 Line, u8 *ptr)
;;;308    {
0004b2  e92d41f0          PUSH     {r4-r8,lr}
0004b6  4607              MOV      r7,r0
0004b8  460c              MOV      r4,r1
;;;309      u32 i = 0;
0004ba  2500              MOVS     r5,#0
;;;310      u16 refcolumn = 319;
0004bc  f240163f          MOV      r6,#0x13f
;;;311    
;;;312      /* Send the string character by character on lCD */
;;;313      while ((*ptr != 0) & (i < 20))
0004c0  7820              LDRB     r0,[r4,#0]
0004c2  b100              CBZ      r0,|L1.1222|
0004c4  2001              MOVS     r0,#1
                  |L1.1222|
0004c6  f0100f01          TST      r0,#1
0004ca  d013              BEQ      |L1.1268|
                  |L1.1228|
;;;314      {
;;;315        /* Display one character on LCD */
;;;316        LCD_DisplayChar(Line, refcolumn, *ptr);
0004cc  7822              LDRB     r2,[r4,#0]
0004ce  4631              MOV      r1,r6
0004d0  4638              MOV      r0,r7
0004d2  f7fffffe          BL       LCD_DisplayChar
;;;317        /* Decrement the column position by 16 */
;;;318        refcolumn -= 16;
0004d6  f1a60010          SUB      r0,r6,#0x10
0004da  b286              UXTH     r6,r0
;;;319        /* Point on the next character */
;;;320        ptr++;
;;;321        /* Increment the character counter */
;;;322        i++;
0004dc  1c6d              ADDS     r5,r5,#1
0004de  f8140f01          LDRB     r0,[r4,#1]!           ;313
0004e2  b100              CBZ      r0,|L1.1254|
0004e4  2001              MOVS     r0,#1                 ;313
                  |L1.1254|
0004e6  2d14              CMP      r5,#0x14              ;313
0004e8  d201              BCS      |L1.1262|
0004ea  2101              MOVS     r1,#1                 ;313
0004ec  e000              B        |L1.1264|
                  |L1.1262|
0004ee  2100              MOVS     r1,#0                 ;313
                  |L1.1264|
0004f0  4208              TST      r0,r1                 ;313
0004f2  d1eb              BNE      |L1.1228|
                  |L1.1268|
;;;323      }
;;;324    }
0004f4  e8bd81f0          POP      {r4-r8,pc}
;;;325    
                          ENDP

                  LCD_ClearLine PROC
;;;204    {
;;;205      LCD_DisplayStringLine(Line, "                    ");
0004f8  a1c8              ADR      r1,|L1.2076|
0004fa  e7fe              B        LCD_DisplayStringLine
;;;206    }
;;;207    
                          ENDP

                  LCD_Clear PROC
;;;215    void LCD_Clear(void)
;;;216    {
0004fc  b510              PUSH     {r4,lr}
;;;217      u32 index = 0;
0004fe  2400              MOVS     r4,#0
;;;218    
;;;219      LCD_SetCursor(0x00, 0x013F);
000500  f240113f          MOV      r1,#0x13f
000504  2000              MOVS     r0,#0
000506  f7fffffe          BL       LCD_SetCursor
                  |L1.1290|
;;;220    
;;;221      for(index = 0; index < 76800; index++)
;;;222      {
;;;223        LCD_WriteRAM(White);
00050a  f64f70ff          MOV      r0,#0xffff
00050e  f7fffffe          BL       LCD_WriteRAM
000512  1c64              ADDS     r4,r4,#1              ;221
000514  f5b43f96          CMP      r4,#0x12c00           ;221
000518  d3f7              BCC      |L1.1290|
;;;224      }
;;;225    }
00051a  bd10              POP      {r4,pc}
;;;226    
                          ENDP

                  StrLength PROC
;;;812    {
;;;813      u32 Index = 0;
00051c  2100              MOVS     r1,#0
                  |L1.1310|
;;;814    
;;;815      /* Increment the Index unless the end of string */
;;;816      for(Index = 0; *Str != '\0'; Str++, Index++)
00051e  7802              LDRB     r2,[r0,#0]
000520  b112              CBZ      r2,|L1.1320|
000522  1c40              ADDS     r0,r0,#1
000524  1c49              ADDS     r1,r1,#1
000526  e7fa              B        |L1.1310|
                  |L1.1320|
;;;817      {
;;;818      }
;;;819    
;;;820      return Index;
000528  4608              MOV      r0,r1
;;;821    }
00052a  4770              BX       lr
;;;822    
                          ENDP

                  LCD_DisplayString PROC
;;;336    void LCD_DisplayString(u8 Line, u8 *ptr)
;;;337    {
00052c  e92d47f0          PUSH     {r4-r10,lr}
000530  4682              MOV      r10,r0
000532  460c              MOV      r4,r1
;;;338      u32 i = 0, column = 0, index = 0, spaceindex = 0;
000534  2600              MOVS     r6,#0
000536  2700              MOVS     r7,#0
000538  2500              MOVS     r5,#0
;;;339      u16 refcolumn = 319;
00053a  f240193f          MOV      r9,#0x13f
;;;340      u32 length = 0;
;;;341    
;;;342      /* Get the string length */
;;;343      length = StrLength(ptr);
00053e  4620              MOV      r0,r4
000540  f7fffffe          BL       StrLength
000544  4680              MOV      r8,r0
;;;344      if(length > 200)
000546  f1b80fc8          CMP      r8,#0xc8
00054a  d90c              BLS      |L1.1382|
;;;345      {
;;;346        /* Set the Cursor position */
;;;347        LCD_SetCursor(Line, 0x013F);
00054c  f240113f          MOV      r1,#0x13f
000550  4650              MOV      r0,r10
000552  f7fffffe          BL       LCD_SetCursor
;;;348        /* Clear the Selected Line */
;;;349        LCD_ClearLine(Line);
000556  4650              MOV      r0,r10
000558  f7fffffe          BL       LCD_ClearLine
;;;350        LCD_DisplayStringLine(Line, "   String too long  ");
00055c  4650              MOV      r0,r10
00055e  e8bd47f0          POP      {r4-r10,lr}
000562  a1b4              ADR      r1,|L1.2100|
000564  e7fe              B        LCD_DisplayStringLine
                  |L1.1382|
;;;351      }
;;;352      else
;;;353      {
;;;354        /* Set the Cursor position */
;;;355        LCD_SetCursor(Line, 0x013F);
000566  f240113f          MOV      r1,#0x13f
00056a  4650              MOV      r0,r10
00056c  f7fffffe          BL       LCD_SetCursor
;;;356        /* Clear the Selected Line */
;;;357    //    LCD_ClearLine(Line);
;;;358    
;;;359        while(length--)
000570  f1b80801          SUBS     r8,r8,#1
000574  d334              BCC      |L1.1504|
                  |L1.1398|
;;;360        {
;;;361          if(index == 20)
000576  2f14              CMP      r7,#0x14
000578  d11d              BNE      |L1.1462|
;;;362          {
;;;363            if(*ptr == 0x20)
00057a  7820              LDRB     r0,[r4,#0]
00057c  2820              CMP      r0,#0x20
00057e  d101              BNE      |L1.1412|
;;;364            {
;;;365              ptr++;
000580  1c64              ADDS     r4,r4,#1
000582  e011              B        |L1.1448|
                  |L1.1412|
;;;366            }
;;;367            else
;;;368            {
;;;369              for(i = 0; i < spaceindex; i++)
000584  2700              MOVS     r7,#0
000586  2d00              CMP      r5,#0
000588  d908              BLS      |L1.1436|
                  |L1.1418|
;;;370              {
;;;371                LCD_DisplayChar(Line, column, ' ');
00058a  2220              MOVS     r2,#0x20
00058c  b2b1              UXTH     r1,r6
00058e  4650              MOV      r0,r10
000590  f7fffffe          BL       LCD_DisplayChar
;;;372                column -= 16;
000594  3e10              SUBS     r6,r6,#0x10
000596  1c7f              ADDS     r7,r7,#1              ;369
000598  42af              CMP      r7,r5                 ;369
00059a  d3f6              BCC      |L1.1418|
                  |L1.1436|
;;;373              }
;;;374              ptr -= (spaceindex - 1);
00059c  1b60              SUBS     r0,r4,r5
00059e  1c44              ADDS     r4,r0,#1
;;;375              length += (spaceindex - 1);
0005a0  eb080005          ADD      r0,r8,r5
0005a4  f1a00801          SUB      r8,r0,#1
                  |L1.1448|
;;;376            }
;;;377            Line += 24;
0005a8  f10a0018          ADD      r0,r10,#0x18
0005ac  f0000aff          AND      r10,r0,#0xff
;;;378            /* Clear the Selected Line */
;;;379    //        LCD_ClearLine(Line);
;;;380            refcolumn = 319;

⌨️ 快捷键说明

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