📄 lcd.txt
字号:
000016 2300 MOVS r3,#0
000018 4632 MOV r2,r6
00001a 4639 MOV r1,r7
00001c f7fffffe BL LCD_DrawLine
;;;403
;;;404 LCD_DrawLine(Xpos, Ypos, Height, Vertical);
000020 2301 MOVS r3,#1
000022 462a MOV r2,r5
000024 4639 MOV r1,r7
000026 4620 MOV r0,r4
000028 f7fffffe BL LCD_DrawLine
;;;405 LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);
00002c 1bb8 SUBS r0,r7,r6
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
;;;406 }
;;;407
ENDP
AREA ||i.LCD_DrawCircle||, CODE, READONLY, ALIGN=2
LCD_DrawCircle PROC
;;;418 void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)
;;;419 {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 4682 MOV r10,r0
;;;420 s32 D;/* Decision Variable */
;;;421 u32 CurX;/* Current X Value */
;;;422 u32 CurY;/* Current Y Value */
;;;423
;;;424 D = 3 - (Radius << 1);
000006 2003 MOVS r0,#3
000008 b088 SUB sp,sp,#0x20 ;419
00000a 468b MOV r11,r1 ;419
00000c eba00742 SUB r7,r0,r2,LSL #1
;;;425 CurX = 0;
000010 2400 MOVS r4,#0
;;;426 CurY = Radius;
000012 4615 MOV r5,r2
;;;427
;;;428 while (CurX <= CurY)
000014 e07a B |L19.268|
;;;429 {
;;;430 LCD_SetCursor(Xpos + CurX, Ypos + CurY);
000016 bf00 NOP
|L19.24|
000018 eb0b0005 ADD r0,r11,r5
00001c b281 UXTH r1,r0
00001e 9007 STR r0,[sp,#0x1c]
000020 eb0a0004 ADD r0,r10,r4
000024 9006 STR r0,[sp,#0x18]
000026 b2c0 UXTB r0,r0
000028 f7fffffe BL LCD_SetCursor
00002c f04f0822 MOV r8,#0x22
000030 f04f46d8 MOV r6,#0x6c000000
000034 f8a68000 STRH r8,[r6,#0]
;;;431 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;432 LCD_WriteRAM(TextColor);
000038 f8df90dc LDR r9,|L19.280|
00003c f8b90000 LDRH r0,[r9,#0] ; TextColor
000040 8070 STRH r0,[r6,#2]
;;;433
;;;434 LCD_SetCursor(Xpos + CurX, Ypos - CurY);
000042 ebab0005 SUB r0,r11,r5
000046 b281 UXTH r1,r0
000048 9005 STR r0,[sp,#0x14]
00004a 9806 LDR r0,[sp,#0x18]
00004c b2c0 UXTB r0,r0
00004e f7fffffe BL LCD_SetCursor
000052 f8a68000 STRH r8,[r6,#0]
;;;435 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;436 LCD_WriteRAM(TextColor);
000056 f8b90000 LDRH r0,[r9,#0] ; TextColor
00005a 8070 STRH r0,[r6,#2]
;;;437
;;;438 LCD_SetCursor(Xpos - CurX, Ypos + CurY);
00005c 9807 LDR r0,[sp,#0x1c]
00005e b281 UXTH r1,r0
000060 ebaa0004 SUB r0,r10,r4
000064 9004 STR r0,[sp,#0x10]
000066 b2c0 UXTB r0,r0
000068 f7fffffe BL LCD_SetCursor
00006c f8a68000 STRH r8,[r6,#0]
;;;439 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;440 LCD_WriteRAM(TextColor);
000070 f8b90000 LDRH r0,[r9,#0] ; TextColor
000074 8070 STRH r0,[r6,#2]
;;;441
;;;442 LCD_SetCursor(Xpos - CurX, Ypos - CurY);
000076 9805 LDR r0,[sp,#0x14]
000078 b281 UXTH r1,r0
00007a 9804 LDR r0,[sp,#0x10]
00007c b2c0 UXTB r0,r0
00007e f7fffffe BL LCD_SetCursor
000082 f8a68000 STRH r8,[r6,#0]
;;;443 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;444 LCD_WriteRAM(TextColor);
000086 f8b90000 LDRH r0,[r9,#0] ; TextColor
00008a 8070 STRH r0,[r6,#2]
;;;445
;;;446 LCD_SetCursor(Xpos + CurY, Ypos + CurX);
00008c eb0b0004 ADD r0,r11,r4
000090 b281 UXTH r1,r0
000092 9003 STR r0,[sp,#0xc]
000094 eb0a0005 ADD r0,r10,r5
000098 9002 STR r0,[sp,#8]
00009a b2c0 UXTB r0,r0
00009c f7fffffe BL LCD_SetCursor
0000a0 f8a68000 STRH r8,[r6,#0]
;;;447 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;448 LCD_WriteRAM(TextColor);
0000a4 f8b90000 LDRH r0,[r9,#0] ; TextColor
0000a8 8070 STRH r0,[r6,#2]
;;;449
;;;450 LCD_SetCursor(Xpos + CurY, Ypos - CurX);
0000aa ebab0004 SUB r0,r11,r4
0000ae b281 UXTH r1,r0
0000b0 9001 STR r0,[sp,#4]
0000b2 9802 LDR r0,[sp,#8]
0000b4 b2c0 UXTB r0,r0
0000b6 f7fffffe BL LCD_SetCursor
0000ba f8a68000 STRH r8,[r6,#0]
;;;451 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;452 LCD_WriteRAM(TextColor);
0000be f8b90000 LDRH r0,[r9,#0] ; TextColor
0000c2 8070 STRH r0,[r6,#2]
;;;453
;;;454 LCD_SetCursor(Xpos - CurY, Ypos + CurX);
0000c4 9803 LDR r0,[sp,#0xc]
0000c6 b281 UXTH r1,r0
0000c8 ebaa0005 SUB r0,r10,r5
0000cc 9000 STR r0,[sp,#0]
0000ce b2c0 UXTB r0,r0
0000d0 f7fffffe BL LCD_SetCursor
0000d4 f8a68000 STRH r8,[r6,#0]
;;;455 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;456 LCD_WriteRAM(TextColor);
0000d8 f8b90000 LDRH r0,[r9,#0] ; TextColor
0000dc 8070 STRH r0,[r6,#2]
;;;457
;;;458 LCD_SetCursor(Xpos - CurY, Ypos - CurX);
0000de 9801 LDR r0,[sp,#4]
0000e0 b281 UXTH r1,r0
0000e2 9800 LDR r0,[sp,#0]
0000e4 b2c0 UXTB r0,r0
0000e6 f7fffffe BL LCD_SetCursor
0000ea f8a68000 STRH r8,[r6,#0]
;;;459 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;460 LCD_WriteRAM(TextColor);
0000ee f8b90000 LDRH r0,[r9,#0] ; TextColor
0000f2 8070 STRH r0,[r6,#2]
;;;461
;;;462 if (D < 0)
0000f4 2f00 CMP r7,#0
0000f6 da03 BGE |L19.256|
;;;463 {
;;;464 D += (CurX << 2) + 6;
0000f8 eb070784 ADD r7,r7,r4,LSL #2
0000fc 1dbf ADDS r7,r7,#6
0000fe e004 B |L19.266|
|L19.256|
;;;465 }
;;;466 else
;;;467 {
;;;468 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
;;;469 CurY--;
000108 1e6d SUBS r5,r5,#1
|L19.266|
;;;470 }
;;;471 CurX++;
00010a 1c64 ADDS r4,r4,#1
|L19.268|
00010c 42ac CMP r4,r5 ;428
00010e d983 BLS |L19.24|
;;;472 }
;;;473 }
000110 b008 ADD sp,sp,#0x20
000112 e8bd8ff0 POP {r4-r11,pc}
;;;474
ENDP
000116 0000 DCW 0x0000
|L19.280|
000118 00000000 DCD ||.data||
AREA ||i.LCD_DrawMonoPict||, CODE, READONLY, ALIGN=2
LCD_DrawMonoPict PROC
;;;482 void LCD_DrawMonoPict(uc32 *Pict)
;;;483 {
000000 b5f0 PUSH {r4-r7,lr}
000002 4605 MOV r5,r0
;;;484 u32 index = 0, i = 0;
000004 2400 MOVS r4,#0
;;;485
;;;486 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]
000018 4b0b LDR r3,|L20.72|
00001a 2601 MOVS r6,#1
00001c f44f6716 MOV r7,#0x960
|L20.32|
;;;487
;;;488 LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
;;;489 for(index = 0; index < 2400; index++)
;;;490 {
;;;491 for(i = 0; i < 32; i++)
000020 f05f0000 MOVS.W r0,#0
|L20.36|
;;;492 {
;;;493 if((Pict[index] & (1 << i)) == 0x00)
000024 f855c024 LDR r12,[r5,r4,LSL #2]
000028 fa06f100 LSL r1,r6,r0
00002c ea1c0f01 TST r12,r1
000030 d101 BNE |L20.54|
;;;494 {
;;;495 LCD_WriteRAM(BackColor);
000032 8859 LDRH r1,[r3,#2] ; BackColor
000034 e000 B |L20.56|
|L20.54|
;;;496 }
;;;497 else
;;;498 {
;;;499 LCD_WriteRAM(TextColor);
000036 8819 LDRH r1,[r3,#0] ; TextColor
|L20.56|
000038 8051 STRH r1,[r2,#2]
00003a 1c40 ADDS r0,r0,#1 ;491
00003c 2820 CMP r0,#0x20 ;491
00003e d3f1 BCC |L20.36|
000040 1c64 ADDS r4,r4,#1 ;489
000042 42bc CMP r4,r7 ;489
000044 d3ec BCC |L20.32|
;;;500 }
;;;501 }
;;;502 }
;;;503 }
000046 bdf0 POP {r4-r7,pc}
;;;504
ENDP
|L20.72|
000048 00000000 DCD ||.data||
AREA ||i.LCD_WriteBMP||, CODE, READONLY, ALIGN=2
LCD_WriteBMP PROC
;;;512 void LCD_WriteBMP(u32 BmpAddress)
;;;513 {
000000 b530 PUSH {r4,r5,lr}
;;;514 u32 index = 0, size = 0;
;;;515
;;;516 /* Read bitmap size */
;;;517 size = *(vu16 *) (BmpAddress + 2);
000002 8842 LDRH r2,[r0,#2]
;;;518 size |= (*(vu16 *) (BmpAddress + 4)) << 16;
000004 8884 LDRH r4,[r0,#4]
;;;519
;;;520 /* Get bitmap data address offset */
;;;521 index = *(vu16 *) (BmpAddress + 10);
000006 8941 LDRH r1,[r0,#0xa]
;;;522 index |= (*(vu16 *) (BmpAddress + 12)) << 16;
000008 8983 LDRH r3,[r0,#0xc]
00000a ea424204 ORR r2,r2,r4,LSL #16 ;518
00000e ea414103 ORR r1,r1,r3,LSL #16
;;;523
;;;524 size = (size - index)/2;
000012 1a52 SUBS r2,r2,r1
000014 0854 LSRS r4,r2,#1
000016 2503 MOVS r5,#3
000018 f04f43d8 MOV r3,#0x6c000000
;;;525
;;;526 BmpAddress += index;
00001c 4408 ADD r0,r0,r1
00001e 801d STRH r5,[r3,#0]
000020 f2410108 MOV r1,#0x1008
000024 8059 STRH r1,[r3,#2]
000026 2122 MOVS r1,#0x22
000028 8019 STRH r1,[r3,#0]
;;;527
;;;528 /* Set GRAM write direction and BGR = 1 */
;;;529 /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
;;;530 /* AM=1 (address is updated in vertical writing direction) */
;;;531 LCD_WriteReg(R3, 0x1008);
;;;532
;;;533 LCD_WriteRAM_Prepare();
;;;534
;;;535 for(index = 0; index < size; index++)
00002a 2100 MOVS r1,#0
00002c e004 B |L21.56|
;;;536 {
;;;537 LCD_WriteRAM(*(vu16 *)BmpAddress);
00002e bf00 NOP
|L21.48|
000030 f8302b02 LDRH r2,[r0],#2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -