lcddrive.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 1,540 行 · 第 1/5 页
TXT
1,540 行
00003a 9016 STR r0,[sp,#0x58]
00003c a808 ADD r0,sp,#0x20
00003e f7fffffe BL FSMC_NORSRAMInit
;;;838
;;;839 /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
;;;840 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
000042 2101 MOVS r1,#1
000044 2006 MOVS r0,#6
000046 f7fffffe BL FSMC_NORSRAMCmd
;;;841 }
00004a b017 ADD sp,sp,#0x5c
00004c bd00 POP {pc}
;;;842
ENDP
AREA ||i.LCD_PowerOn||, CODE, READONLY, ALIGN=1
LCD_PowerOn PROC
;;;676 *******************************************************************************/
;;;677 void LCD_PowerOn(void)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;678 {
000004 2019 MOVS r0,#0x19
000006 f04f44d8 MOV r4,#0x6c000000
00000a 8020 STRH r0,[r4,#0]
00000c 2049 MOVS r0,#0x49
00000e 8060 STRH r0,[r4,#2]
000010 2093 MOVS r0,#0x93
000012 8020 STRH r0,[r4,#0]
000014 200a MOVS r0,#0xa
000016 8060 STRH r0,[r4,#2]
;;;679 // Power Supply Setting
;;;680 LCD_WriteReg(0x19,0x49);//********
;;;681 LCD_WriteReg(0x93,0x0a);//*******
;;;682
;;;683 Delay(1);
000018 2001 MOVS r0,#1
00001a f7fffffe BL Delay
00001e 2020 MOVS r0,#0x20
000020 8020 STRH r0,[r4,#0]
000022 2040 MOVS r0,#0x40
000024 8060 STRH r0,[r4,#2]
000026 201d MOVS r0,#0x1d
000028 8020 STRH r0,[r4,#0]
00002a 2007 MOVS r0,#7
00002c 8060 STRH r0,[r4,#2]
00002e 201e MOVS r0,#0x1e
000030 8020 STRH r0,[r4,#0]
000032 2600 MOVS r6,#0
000034 8066 STRH r6,[r4,#2]
000036 201f MOVS r0,#0x1f
000038 8020 STRH r0,[r4,#0]
00003a 2704 MOVS r7,#4
00003c 8067 STRH r7,[r4,#2]
00003e 2044 MOVS r0,#0x44
000040 8020 STRH r0,[r4,#0]
000042 204d MOVS r0,#0x4d
000044 8060 STRH r0,[r4,#2]
000046 2045 MOVS r0,#0x45
000048 8020 STRH r0,[r4,#0]
00004a 2011 MOVS r0,#0x11
00004c 8060 STRH r0,[r4,#2]
;;;684
;;;685 LCD_WriteReg(0x20,0x40);
;;;686 LCD_WriteReg(0x1d,0x07);
;;;687 LCD_WriteReg(0x1e,0x00);
;;;688 LCD_WriteReg(0x1f,0x04);
;;;689
;;;690 // VCOM Setting for CMO 3.2” Panel
;;;691 LCD_WriteReg(0x44,0x4d);//4d***************4f
;;;692 LCD_WriteReg(0x45,0x11);
;;;693 Delay(1);
00004e 2001 MOVS r0,#1
000050 f7fffffe BL Delay
000054 201c MOVS r0,#0x1c
000056 8020 STRH r0,[r4,#0]
000058 8067 STRH r7,[r4,#2]
;;;694 LCD_WriteReg(0x1c,0x04);
;;;695 Delay(2);
00005a 2002 MOVS r0,#2
00005c f7fffffe BL Delay
000060 2043 MOVS r0,#0x43
000062 8020 STRH r0,[r4,#0]
000064 2080 MOVS r0,#0x80
000066 8060 STRH r0,[r4,#2]
;;;696 LCD_WriteReg(0x43,0x80);
;;;697 Delay(5);
000068 2005 MOVS r0,#5
00006a f7fffffe BL Delay
00006e 251b MOVS r5,#0x1b
000070 8025 STRH r5,[r4,#0]
000072 2008 MOVS r0,#8
000074 8060 STRH r0,[r4,#2]
;;;698 LCD_WriteReg(0x1b,0x08);
;;;699 Delay(4);
000076 2004 MOVS r0,#4
000078 f7fffffe BL Delay
00007c 8025 STRH r5,[r4,#0]
00007e 2010 MOVS r0,#0x10
000080 8060 STRH r0,[r4,#2]
;;;700 LCD_WriteReg(0x1b,0x10);
;;;701 Delay(4);
000082 2004 MOVS r0,#4
000084 f7fffffe BL Delay
000088 2090 MOVS r0,#0x90
00008a 8020 STRH r0,[r4,#0]
00008c 207f MOVS r0,#0x7f
00008e 8060 STRH r0,[r4,#2]
000090 2526 MOVS r5,#0x26
000092 8025 STRH r5,[r4,#0]
000094 8067 STRH r7,[r4,#2]
;;;702
;;;703 // Display ON Setting
;;;704 LCD_WriteReg(0x90,0x7f);
;;;705 LCD_WriteReg(0x26,0x04);
;;;706 Delay(4);
000096 2004 MOVS r0,#4
000098 f7fffffe BL Delay
00009c 8025 STRH r5,[r4,#0]
00009e 2024 MOVS r0,#0x24
0000a0 8060 STRH r0,[r4,#2]
0000a2 8025 STRH r5,[r4,#0]
0000a4 202c MOVS r0,#0x2c
0000a6 8060 STRH r0,[r4,#2]
;;;707 LCD_WriteReg(0x26,0x24);
;;;708 LCD_WriteReg(0x26,0x2c);
;;;709 Delay(4);
0000a8 2004 MOVS r0,#4
0000aa f7fffffe BL Delay
0000ae 8025 STRH r5,[r4,#0]
0000b0 203c MOVS r0,#0x3c
0000b2 8060 STRH r0,[r4,#2]
0000b4 2057 MOVS r0,#0x57
0000b6 8020 STRH r0,[r4,#0]
0000b8 2102 MOVS r1,#2
0000ba 8061 STRH r1,[r4,#2]
0000bc 2155 MOVS r1,#0x55
0000be 8021 STRH r1,[r4,#0]
0000c0 8066 STRH r6,[r4,#2]
0000c2 8020 STRH r0,[r4,#0]
0000c4 8066 STRH r6,[r4,#2]
;;;710 LCD_WriteReg(0x26,0x3c);
;;;711
;;;712 // Set internal VDDD voltage
;;;713 LCD_WriteReg(0x57,0x02);
;;;714 LCD_WriteReg(0x55,0x00);
;;;715 LCD_WriteReg(0x57,0x00);
;;;716 }
0000c6 e8bd81f0 POP {r4-r8,pc}
;;;717
ENDP
AREA ||i.LCD_ReadRAM||, CODE, READONLY, ALIGN=1
LCD_ReadRAM PROC
;;;661 *******************************************************************************/
;;;662 u16 LCD_ReadRAM(void)
000000 2122 MOVS r1,#0x22
;;;663 {
;;;664 /* Write 16-bit Index (then Read Reg) */
;;;665 LCD->LCD_REG = R34; /* Select GRAM Reg */
000002 f04f40d8 MOV r0,#0x6c000000
000006 8001 STRH r1,[r0,#0]
;;;666 /* Read 16-bit Reg */
;;;667 return LCD->LCD_RAM;
000008 8840 LDRH r0,[r0,#2]
;;;668 }
00000a 4770 BX lr
;;;669
ENDP
AREA ||i.LCD_ReadReg||, CODE, READONLY, ALIGN=1
LCD_ReadReg PROC
;;;621 *******************************************************************************/
;;;622 u16 LCD_ReadReg(u8 LCD_Reg)
000000 f04f41d8 MOV r1,#0x6c000000
;;;623 {
;;;624 /* Write 16-bit Index (then Read Reg) */
;;;625 LCD->LCD_REG = LCD_Reg;
000004 8008 STRH r0,[r1,#0]
;;;626 /* Read 16-bit Reg */
;;;627 return (LCD->LCD_RAM);
000006 8848 LDRH r0,[r1,#2]
;;;628 }
000008 4770 BX lr
;;;629
ENDP
AREA ||i.LCD_SetBackColor||, CODE, READONLY, ALIGN=2
LCD_SetBackColor PROC
;;;170 *******************************************************************************/
;;;171 void LCD_SetBackColor(vu16 Color)
000000 4901 LDR r1,|L18.8|
;;;172 {
;;;173 BackColor = Color;
000002 8048 STRH r0,[r1,#2]
;;;174 }
000004 4770 BX lr
;;;175
ENDP
000006 0000 DCW 0x0000
|L18.8|
DCD ||.data||
AREA ||i.LCD_SetCursor||, CODE, READONLY, ALIGN=1
LCD_SetCursor PROC
;;;232
;;;233 void LCD_SetCursor(u16 Xpos, u16 Ypos)
000000 b510 PUSH {r4,lr}
;;;234 {
;;;235 //Xpos=239-Xpos;
;;;236 LCD_WriteReg(0x06,(Ypos&0xff00)>>8);
000002 0a0b LSRS r3,r1,#8
000004 2406 MOVS r4,#6
000006 f04f42d8 MOV r2,#0x6c000000
00000a 8014 STRH r4,[r2,#0]
00000c 8053 STRH r3,[r2,#2]
00000e 2307 MOVS r3,#7
;;;237 LCD_WriteReg(0x07,Ypos&0x00ff);
000010 b2c9 UXTB r1,r1
000012 8013 STRH r3,[r2,#0]
000014 8051 STRH r1,[r2,#2]
;;;238
;;;239 LCD_WriteReg(0x02,(Xpos&0xff00)>>8);
000016 0a01 LSRS r1,r0,#8
000018 2302 MOVS r3,#2
00001a 8013 STRH r3,[r2,#0]
00001c 8051 STRH r1,[r2,#2]
00001e 2103 MOVS r1,#3
;;;240 LCD_WriteReg(0x03,(Xpos)&0x00ff);
000020 b2c0 UXTB r0,r0
000022 8011 STRH r1,[r2,#0]
000024 8050 STRH r0,[r2,#2]
;;;241 /* LCD_WriteReg(R32, Xpos);
;;;242 LCD_WriteReg(R33, Ypos); */
;;;243 }
000026 bd10 POP {r4,pc}
;;;244
ENDP
AREA ||i.LCD_SetDisplayWindow||, CODE, READONLY, ALIGN=1
LCD_SetDisplayWindow PROC
;;;340 *******************************************************************************/
;;;341 void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;342 {
;;;343 /* Horizontal GRAM Start Address */
;;;344 u16 Yaddress=0,Xaddress=0;
;;;345 Xaddress=239-Xpos;
000004 f1c000ef RSB r0,r0,#0xef
;;;346 Yaddress=319-Ypos;
000008 f2a1113f SUB r1,r1,#0x13f
00000c b280 UXTH r0,r0 ;345
00000e 4249 RSBS r1,r1,#0
000010 4698 MOV r8,r3 ;342
;;;347
;;;348 if(Xaddress + Height < 240)
000012 1884 ADDS r4,r0,r2
000014 2506 MOVS r5,#6
000016 2607 MOVS r6,#7
000018 2708 MOVS r7,#8
00001a b289 UXTH r1,r1 ;346
00001c f04f0c09 MOV r12,#9 ;346
000020 f04f0e00 MOV lr,#0 ;344
000024 f04f43d8 MOV r3,#0x6c000000 ;344
000028 2cf0 CMP r4,#0xf0
00002a d20f BCS |L20.76|
;;;349 {
;;;350 LCD_WriteReg(0x06,((Xaddress)&0xff00)>>8);
00002c 0a02 LSRS r2,r0,#8
00002e 801d STRH r5,[r3,#0]
000030 805a STRH r2,[r3,#2]
;;;351 LCD_WriteReg(0x07,(Xaddress)&0x00ff);
000032 b2c0 UXTB r0,r0
000034 801e STRH r6,[r3,#0]
000036 8058 STRH r0,[r3,#2]
;;;352 LCD_WriteReg(0x08,((Xaddress+Height-1)&0xff00)>>8);
000038 1e64 SUBS r4,r4,#1
00003a f3c42007 UBFX r0,r4,#8,#8
00003e 801f STRH r7,[r3,#0]
000040 8058 STRH r0,[r3,#2]
;;;353 LCD_WriteReg(0x09,(Xaddress+Height-1)&0x00ff);
000042 b2e0 UXTB r0,r4
000044 f8a3c000 STRH r12,[r3,#0]
000048 8058 STRH r0,[r3,#2]
00004a e00b B |L20.100|
|L20.76|
00004c 801d STRH r5,[r3,#0]
00004e f8a3e002 STRH lr,[r3,#2]
000052 801e STRH r6,[r3,#0]
000054 f8a3e002 STRH lr,[r3,#2]
000058 801f STRH r7,[r3,#0]
00005a f8a3e002 STRH lr,[r3,#2]
00005e f8a3c000 STRH r12,[r3,#0]
000062 805a STRH r2,[r3,#2]
|L20.100|
;;;354 }
;;;355 else
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?