📄 lcd.txt
字号:
AREA ||i.LCD_DisplayChar||, CODE, READONLY, ALIGN=2
LCD_DisplayChar PROC
000000 3a20 SUBS r2,r2,#0x20
000002 b2d2 UXTB r2,r2
000004 4b03 LDR r3,|L11.20|
000006 eb020242 ADD r2,r2,r2,LSL #1
00000a eb031202 ADD r2,r3,r2,LSL #4
00000e f7ffbffe B.W LCD_DrawChar
ENDP
000012 0000 DCW 0x0000
|L11.20|
000014 00000000 DCD ||.constdata||
AREA ||i.LCD_DisplayStringLine||, CODE, READONLY, ALIGN=1
LCD_DisplayStringLine PROC
;;;282 void LCD_DisplayStringLine(u8 Line, u8 *ptr)
;;;283 {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;284 u32 i = 0;
000004 2400 MOVS r4,#0
000006 4680 MOV r8,r0 ;283
000008 460d MOV r5,r1 ;283
;;;285 u16 refcolumn = 319;
00000a f240163f MOV r6,#0x13f
00000e 2701 MOVS r7,#1
000010 e007 B |L12.34|
|L12.18|
;;;286
;;;287 /* Send the string character by character on lCD */
;;;288 while ((*ptr != 0) & (i < 20))
;;;289 {
;;;290 /* Display one character on LCD */
;;;291 LCD_DisplayChar(Line, refcolumn, *ptr);
000012 4631 MOV r1,r6
000014 4640 MOV r0,r8
000016 f7fffffe BL LCD_DisplayChar
;;;292 /* Decrement the column position by 16 */
;;;293 refcolumn -= 16;
00001a 3e10 SUBS r6,r6,#0x10
;;;294 /* Point on the next character */
;;;295 ptr++;
00001c 1c6d ADDS r5,r5,#1
00001e b2b6 UXTH r6,r6 ;293
;;;296 /* Increment the character counter */
;;;297 i++;
000020 1c64 ADDS r4,r4,#1
|L12.34|
000022 782a LDRB r2,[r5,#0] ;288
000024 b10a CBZ r2,|L12.42|
000026 2001 MOVS r0,#1 ;288
000028 e000 B |L12.44|
|L12.42|
00002a 2000 MOVS r0,#0 ;288
|L12.44|
00002c 4639 MOV r1,r7 ;288
00002e 2c14 CMP r4,#0x14 ;288
000030 d300 BCC |L12.52|
000032 2100 MOVS r1,#0 ;288
|L12.52|
000034 4208 TST r0,r1 ;288
000036 d1ec BNE |L12.18|
;;;298 }
;;;299 }
000038 e8bd81f0 POP {r4-r8,pc}
;;;300
ENDP
AREA ||i.LCD_ClearLine||, CODE, READONLY, ALIGN=2
LCD_ClearLine PROC
;;;177 {
;;;178 LCD_DisplayStringLine(Line, " ");
000000 a101 ADR r1,|L13.8|
000002 f7ffbffe B.W LCD_DisplayStringLine
;;;179 }
;;;180
ENDP
000006 0000 DCW 0x0000
|L13.8|
000008 202020202020202020202020202020202020202000 DCB " ",0
00001d 00 DCB 0
00001e 00 DCB 0
00001f 00 DCB 0
AREA ||i.LCD_Clear||, CODE, READONLY, ALIGN=1
LCD_Clear PROC
;;;188 void LCD_Clear(u16 Color)
;;;189 {
000000 b530 PUSH {r4,r5,lr}
000002 4605 MOV r5,r0
;;;190 u32 index = 0;
000004 2400 MOVS r4,#0
;;;191
;;;192 LCD_SetCursor(0x00, 0x013F);
000006 f240113f MOV r1,#0x13f
00000a 4620 MOV r0,r4
00000c f7fffffe BL LCD_SetCursor
000010 2122 MOVS r1,#0x22
000012 f04f40d8 MOV r0,#0x6c000000
000016 8001 STRH r1,[r0,#0]
000018 f44f3196 MOV r1,#0x12c00
|L14.28|
;;;193
;;;194 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;195
;;;196 for(index = 0; index < 76800; index++)
;;;197 {
;;;198 LCD->LCD_RAM = Color;
00001c 8045 STRH r5,[r0,#2]
00001e 1c64 ADDS r4,r4,#1 ;196
000020 428c CMP r4,r1 ;196
000022 d3fb BCC |L14.28|
;;;199 }
;;;200 }
000024 bd30 POP {r4,r5,pc}
;;;201
ENDP
AREA ||i.LCD_SetDisplayWindow||, CODE, READONLY, ALIGN=1
LCD_SetDisplayWindow PROC
;;;311 void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;312 {
000000 b470 PUSH {r4-r6}
000002 2650 MOVS r6,#0x50
000004 2500 MOVS r5,#0
000006 f04f44d8 MOV r4,#0x6c000000
;;;313 /* Horizontal GRAM Start Address */
;;;314 if(Xpos >= Height)
00000a 4290 CMP r0,r2
00000c d304 BCC |L15.24|
;;;315 {
;;;316 LCD_WriteReg(R80, (Xpos - Height + 1));
00000e 1a82 SUBS r2,r0,r2
000010 1c52 ADDS r2,r2,#1
000012 8026 STRH r6,[r4,#0]
000014 8062 STRH r2,[r4,#2]
000016 e001 B |L15.28|
|L15.24|
000018 8026 STRH r6,[r4,#0]
00001a 8065 STRH r5,[r4,#2]
|L15.28|
00001c 2251 MOVS r2,#0x51
00001e 8022 STRH r2,[r4,#0]
000020 8060 STRH r0,[r4,#2]
000022 2652 MOVS r6,#0x52
;;;317 }
;;;318 else
;;;319 {
;;;320 LCD_WriteReg(R80, 0);
;;;321 }
;;;322 /* Horizontal GRAM End Address */
;;;323 LCD_WriteReg(R81, Xpos);
;;;324 /* Vertical GRAM Start Address */
;;;325 if(Ypos >= Width)
000024 4299 CMP r1,r3
000026 d304 BCC |L15.50|
;;;326 {
;;;327 LCD_WriteReg(R82, (Ypos - Width + 1));
000028 1aca SUBS r2,r1,r3
00002a 1c52 ADDS r2,r2,#1
00002c 8026 STRH r6,[r4,#0]
00002e 8062 STRH r2,[r4,#2]
000030 e001 B |L15.54|
|L15.50|
000032 8026 STRH r6,[r4,#0]
000034 8065 STRH r5,[r4,#2]
|L15.54|
000036 2253 MOVS r2,#0x53
000038 8022 STRH r2,[r4,#0]
00003a 8061 STRH r1,[r4,#2]
;;;328 }
;;;329 else
;;;330 {
;;;331 LCD_WriteReg(R82, 0);
;;;332 }
;;;333 /* Vertical GRAM End Address */
;;;334 LCD_WriteReg(R83, Ypos);
;;;335
;;;336 LCD_SetCursor(Xpos, Ypos);
00003c bc70 POP {r4-r6}
00003e f7ffbffe B.W LCD_SetCursor
;;;337 }
;;;338
ENDP
AREA ||i.LCD_WindowModeDisable||, CODE, READONLY, ALIGN=1
LCD_WindowModeDisable PROC
;;;346 void LCD_WindowModeDisable(void)
;;;347 {
000000 b500 PUSH {lr}
;;;348 LCD_SetDisplayWindow(239, 0x13F, 240, 320);
000002 f44f73a0 MOV r3,#0x140
000006 22f0 MOVS r2,#0xf0
000008 1e59 SUBS r1,r3,#1
00000a 20ef MOVS r0,#0xef
00000c f7fffffe BL LCD_SetDisplayWindow
000010 2103 MOVS r1,#3
000012 f04f40d8 MOV r0,#0x6c000000
000016 8001 STRH r1,[r0,#0]
000018 f2410118 MOV r1,#0x1018
00001c 8041 STRH r1,[r0,#2]
;;;349 LCD_WriteReg(R3, 0x1018);
;;;350 }
00001e bd00 POP {pc}
;;;351 /*******************************************************************************
ENDP
AREA ||i.LCD_DrawLine||, CODE, READONLY, ALIGN=2
LCD_DrawLine PROC
;;;363 void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
;;;364 {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 4605 MOV r5,r0
000006 468a MOV r10,r1
000008 4616 MOV r6,r2
00000a 469b MOV r11,r3
;;;365 u32 i = 0;
00000c 2400 MOVS r4,#0
;;;366
;;;367 LCD_SetCursor(Xpos, Ypos);
00000e f7fffffe BL LCD_SetCursor
000012 f8df8048 LDR r8,|L17.92|
000016 f04f0922 MOV r9,#0x22
00001a f04f47d8 MOV r7,#0x6c000000
;;;368
;;;369 if(Direction == Horizontal)
00001e f1bb0f00 CMP r11,#0
000022 d117 BNE |L17.84|
000024 f8a79000 STRH r9,[r7,#0]
;;;370 {
;;;371 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;372 for(i = 0; i < Length; i++)
000028 e004 B |L17.52|
;;;373 {
;;;374 LCD_WriteRAM(TextColor);
00002a bf00 NOP
|L17.44|
00002c f8b80000 LDRH r0,[r8,#0] ; TextColor
000030 8078 STRH r0,[r7,#2]
000032 1c64 ADDS r4,r4,#1 ;372
|L17.52|
000034 42b4 CMP r4,r6 ;372
000036 d3f9 BCC |L17.44|
|L17.56|
;;;375 }
;;;376 }
;;;377 else
;;;378 {
;;;379 for(i = 0; i < Length; i++)
;;;380 {
;;;381 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;382 LCD_WriteRAM(TextColor);
;;;383 Xpos++;
;;;384 LCD_SetCursor(Xpos, Ypos);
;;;385 }
;;;386 }
;;;387 }
000038 e8bd8ff0 POP {r4-r11,pc}
|L17.60|
00003c f8a79000 STRH r9,[r7,#0]
000040 f8b80000 LDRH r0,[r8,#0] ;382 ; TextColor
000044 8078 STRH r0,[r7,#2] ;382
000046 1c6d ADDS r5,r5,#1 ;383
000048 b2ed UXTB r5,r5 ;383
00004a 4651 MOV r1,r10 ;384
00004c 4628 MOV r0,r5 ;384
00004e f7fffffe BL LCD_SetCursor
000052 1c64 ADDS r4,r4,#1 ;379
|L17.84|
000054 42b4 CMP r4,r6 ;379
000056 d3f1 BCC |L17.60|
000058 e7ee B |L17.56|
;;;388
ENDP
00005a 0000 DCW 0x0000
|L17.92|
00005c 00000000 DCD ||.data||
AREA ||i.LCD_DrawRect||, CODE, READONLY, ALIGN=1
LCD_DrawRect PROC
;;;399 void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;400 {
000000 b5f0 PUSH {r4-r7,lr}
000002 461e MOV r6,r3
000004 4615 MOV r5,r2
000006 4604 MOV r4,r0
000008 460f MOV r7,r1
;;;401 LCD_DrawLine(Xpos, Ypos, Width, Horizontal);
00000a 2300 MOVS r3,#0
00000c 4632 MOV r2,r6
00000e f7fffffe BL LCD_DrawLine
;;;402 LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);
000012 1960 ADDS r0,r4,r5
000014 b2c0 UXTB r0,r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -