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 + -
显示快捷键?