lcddrive.txt

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

TXT
1,540
字号
;;;509    
;;;510        LCD_SetCursor(Xpos - CurY, Ypos - CurX);
0000de  9801              LDR      r0,[sp,#4]
0000e0  b281              UXTH     r1,r0
0000e2  9800              LDR      r0,[sp,#0]
0000e4  b280              UXTH     r0,r0
0000e6  f7fffffe          BL       LCD_SetCursor
0000ea  f8a68000          STRH     r8,[r6,#0]
;;;511        LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;512        LCD_WriteRAM(TextColor);
0000ee  f8b90000          LDRH     r0,[r9,#0]  ; TextColor
0000f2  8070              STRH     r0,[r6,#2]
;;;513    
;;;514        if (D < 0)
0000f4  2f00              CMP      r7,#0
0000f6  da03              BGE      |L10.256|
;;;515        { 
;;;516          D += (CurX << 2) + 6;
0000f8  eb070784          ADD      r7,r7,r4,LSL #2
0000fc  1dbf              ADDS     r7,r7,#6
0000fe  e004              B        |L10.266|
                  |L10.256|
;;;517        }
;;;518        else
;;;519        {
;;;520          D += ((CurX - CurY) << 2) + 10;
000100  1b60              SUBS     r0,r4,r5
000102  eb070780          ADD      r7,r7,r0,LSL #2
000106  370a              ADDS     r7,r7,#0xa
;;;521          CurY--;
000108  1e6d              SUBS     r5,r5,#1
                  |L10.266|
;;;522        }
;;;523        CurX++;
00010a  1c64              ADDS     r4,r4,#1
                  |L10.268|
00010c  42ac              CMP      r4,r5                 ;480
00010e  d983              BLS      |L10.24|
;;;524      }
;;;525    }
000110  b008              ADD      sp,sp,#0x20
000112  e8bd8ff0          POP      {r4-r11,pc}
;;;526    
                          ENDP

000116  0000              DCW      0x0000
                  |L10.280|
                          DCD      ||.data||

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

                  LCD_DrawLine PROC
;;;414    *******************************************************************************/
;;;415    void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;416    {
000004  4606              MOV      r6,r0
;;;417      u32 i = 0;
;;;418      
;;;419      LCD_SetCursor(Xpos,319 - Ypos);
000006  f2a1113f          SUB      r1,r1,#0x13f
00000a  4248              RSBS     r0,r1,#0
00000c  b281              UXTH     r1,r0
00000e  4615              MOV      r5,r2                 ;416
000010  4698              MOV      r8,r3                 ;416
000012  2400              MOVS     r4,#0                 ;417
000014  460f              MOV      r7,r1
000016  4630              MOV      r0,r6
000018  f7fffffe          BL       LCD_SetCursor
00001c  2322              MOVS     r3,#0x22
;;;420    
;;;421      if(Direction == Horizontal)
;;;422      {
;;;423        LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;424        for(i = 0; i < Length; i++)
;;;425        {
;;;426          LCD_WriteRAM(TextColor);
00001e  4a11              LDR      r2,|L11.100|
000020  f04f41d8          MOV      r1,#0x6c000000
000024  f1b80f00          CMP      r8,#0                 ;421
000028  d108              BNE      |L11.60|
00002a  800b              STRH     r3,[r1,#0]            ;421
00002c  e002              B        |L11.52|
                  |L11.46|
00002e  8810              LDRH     r0,[r2,#0]  ; TextColor
000030  8048              STRH     r0,[r1,#2]
000032  1c64              ADDS     r4,r4,#1              ;424
                  |L11.52|
000034  42ac              CMP      r4,r5                 ;424
000036  d3fa              BCC      |L11.46|
                  |L11.56|
;;;427        }
;;;428      }
;;;429      else
;;;430      {
;;;431        for(i = 0; i < Length; i++)
;;;432        {
;;;433          LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;434          LCD_WriteRAM(TextColor);
;;;435          Xpos++;
;;;436          LCD_SetCursor(Xpos, 319 - Ypos);
;;;437        }
;;;438      }
;;;439    }
000038  e8bd87f0          POP      {r4-r10,pc}
                  |L11.60|
00003c  469a              MOV      r10,r3
00003e  4688              MOV      r8,r1
000040  4691              MOV      r9,r2                 ;426
000042  e00c              B        |L11.94|
                  |L11.68|
000044  f8a8a000          STRH     r10,[r8,#0]           ;431
000048  f8b90000          LDRH     r0,[r9,#0]            ;434  ; TextColor
00004c  f8a80002          STRH     r0,[r8,#2]            ;434
000050  1c76              ADDS     r6,r6,#1              ;435
000052  b2f6              UXTB     r6,r6                 ;435
000054  4639              MOV      r1,r7                 ;435
000056  4630              MOV      r0,r6                 ;436
000058  f7fffffe          BL       LCD_SetCursor
00005c  1c64              ADDS     r4,r4,#1              ;431
                  |L11.94|
00005e  42ac              CMP      r4,r5                 ;431
000060  d3f0              BCC      |L11.68|
000062  e7e9              B        |L11.56|
;;;440    
                          ENDP

                  |L11.100|
                          DCD      ||.data||

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

                  LCD_DrawMonoPict PROC
;;;533    *******************************************************************************/
;;;534    void LCD_DrawMonoPict(uc32 *Pict)
000000  b5f0              PUSH     {r4-r7,lr}
;;;535    {
000002  4605              MOV      r5,r0
;;;536      u32 index = 0, i = 0;
000004  2400              MOVS     r4,#0
;;;537    
;;;538      LCD_SetCursor(0, 319); 
000006  f240113f          MOV      r1,#0x13f
00000a  4620              MOV      r0,r4
00000c  f7fffffe          BL       LCD_SetCursor
000010  2022              MOVS     r0,#0x22
000012  f04f42d8          MOV      r2,#0x6c000000
000016  8010              STRH     r0,[r2,#0]
;;;539    
;;;540      LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;541      for(index = 0; index < 2400; index++)
;;;542      {
;;;543        for(i = 0; i < 32; i++)
;;;544        {
;;;545          if((Pict[index] & (1 << i)) == 0x00)
;;;546          {
;;;547            LCD_WriteRAM(BackColor);
000018  4b0b              LDR      r3,|L12.72|
00001a  2601              MOVS     r6,#1                 ;545
00001c  f44f6c16          MOV      r12,#0x960            ;541
                  |L12.32|
000020  f05f0000          MOVS.W   r0,#0                 ;543
                  |L12.36|
000024  f8551024          LDR      r1,[r5,r4,LSL #2]     ;545
000028  fa06f700          LSL      r7,r6,r0              ;545
00002c  4239              TST      r1,r7                 ;545
00002e  d101              BNE      |L12.52|
000030  8859              LDRH     r1,[r3,#2]  ; BackColor
000032  e000              B        |L12.54|
                  |L12.52|
;;;548          }
;;;549          else
;;;550          {
;;;551            LCD_WriteRAM(TextColor);
000034  8819              LDRH     r1,[r3,#0]  ; TextColor
                  |L12.54|
000036  8051              STRH     r1,[r2,#2]
000038  1c40              ADDS     r0,r0,#1              ;543
00003a  2820              CMP      r0,#0x20              ;543
00003c  d3f2              BCC      |L12.36|
00003e  1c64              ADDS     r4,r4,#1              ;541
000040  4564              CMP      r4,r12                ;541
000042  d3ed              BCC      |L12.32|
;;;552          }
;;;553        }
;;;554      }
;;;555    }
000044  bdf0              POP      {r4-r7,pc}
;;;556    
                          ENDP

000046  0000              DCW      0x0000
                  |L12.72|
                          DCD      ||.data||

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

                  LCD_DrawRect PROC
;;;450    *******************************************************************************/
;;;451    void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
000000  b5f0              PUSH     {r4-r7,lr}
;;;452    {
000002  461f              MOV      r7,r3
000004  4615              MOV      r5,r2
000006  4604              MOV      r4,r0
000008  460e              MOV      r6,r1
;;;453      LCD_DrawLine(Xpos, Ypos, Width, Horizontal);
00000a  2300              MOVS     r3,#0
00000c  463a              MOV      r2,r7
00000e  f7fffffe          BL       LCD_DrawLine
;;;454      LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);
000012  1960              ADDS     r0,r4,r5
000014  b2c0              UXTB     r0,r0
000016  2300              MOVS     r3,#0
000018  463a              MOV      r2,r7
00001a  4631              MOV      r1,r6
00001c  f7fffffe          BL       LCD_DrawLine
;;;455      
;;;456      LCD_DrawLine(Xpos, Ypos, Height, Vertical);
000020  2301              MOVS     r3,#1
000022  462a              MOV      r2,r5
000024  4631              MOV      r1,r6
000026  4620              MOV      r0,r4
000028  f7fffffe          BL       LCD_DrawLine
;;;457      LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);
00002c  1bf0              SUBS     r0,r6,r7
00002e  1c40              ADDS     r0,r0,#1
000030  b281              UXTH     r1,r0
000032  462a              MOV      r2,r5
000034  4620              MOV      r0,r4
000036  e8bd40f0          POP      {r4-r7,lr}
00003a  2301              MOVS     r3,#1
00003c  f7ffbffe          B.W      LCD_DrawLine
;;;458    }
;;;459    
                          ENDP


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

                  LCD_FSMCConfig PROC
;;;796    *******************************************************************************/
;;;797    void LCD_FSMCConfig(void)
000000  b500              PUSH     {lr}
;;;798    {
000002  b097              SUB      sp,sp,#0x5c
;;;799      FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
;;;800      FSMC_NORSRAMTimingInitTypeDef  p;
;;;801    
;;;802    /*-- FSMC Configuration ------------------------------------------------------*/
;;;803    /*----------------------- SRAM Bank 4 ----------------------------------------*/
;;;804      /* FSMC_Bank1_NORSRAM4 configuration */
;;;805      p.FSMC_AddressSetupTime = 0;
000004  2000              MOVS     r0,#0
;;;806      p.FSMC_AddressHoldTime = 0;
;;;807      p.FSMC_DataSetupTime = 2;
000006  2102              MOVS     r1,#2
000008  9001              STR      r0,[sp,#4]            ;806
;;;808      p.FSMC_BusTurnAroundDuration = 0;
00000a  e9cd0102          STRD     r0,r1,[sp,#8]
;;;809      p.FSMC_CLKDivision = 0;
00000e  9004              STR      r0,[sp,#0x10]
;;;810      p.FSMC_DataLatency = 0;
000010  9005              STR      r0,[sp,#0x14]
;;;811      p.FSMC_AccessMode = FSMC_AccessMode_A;
000012  9006              STR      r0,[sp,#0x18]
;;;812    
;;;813      /* Color LCD configuration ------------------------------------
;;;814         LCD configured as follow:
;;;815            - Data/Address MUX = Disable
;;;816            - Memory Type = SRAM
;;;817            - Data Width = 16bit
;;;818            - Write Operation = Enable
;;;819            - Extended Mode = Enable
;;;820            - Asynchronous Wait = Disable */
;;;821      FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
000014  2106              MOVS     r1,#6
;;;822      FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
000016  e9cd0107          STRD     r0,r1,[sp,#0x1c]
;;;823      FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
;;;824      FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
00001a  2110              MOVS     r1,#0x10
00001c  9009              STR      r0,[sp,#0x24]         ;823
;;;825      FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
00001e  e9cd010a          STRD     r0,r1,[sp,#0x28]
;;;826      FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
000022  900c              STR      r0,[sp,#0x30]
;;;827      FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
000024  900d              STR      r0,[sp,#0x34]
;;;828      FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
000026  900e              STR      r0,[sp,#0x38]
;;;829      FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
000028  0209              LSLS     r1,r1,#8
;;;830      FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
00002a  e9cd010f          STRD     r0,r1,[sp,#0x3c]
;;;831      FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
00002e  9011              STR      r0,[sp,#0x44]
;;;832      FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
000030  9012              STR      r0,[sp,#0x48]
;;;833      FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
000032  9013              STR      r0,[sp,#0x4c]
;;;834      FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
000034  9014              STR      r0,[sp,#0x50]
000036  a801              ADD      r0,sp,#4
;;;835      FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
000038  9015              STR      r0,[sp,#0x54]
;;;836    
;;;837      FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

⌨️ 快捷键说明

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