📄 lcd.txt
字号:
0005b0 f240193f MOV r9,#0x13f
;;;381 index = 0;
0005b4 2700 MOVS r7,#0
|L1.1462|
;;;382 }
;;;383 /* Display one character on LCD */
;;;384 LCD_DisplayChar(Line, refcolumn, *ptr);
0005b6 7822 LDRB r2,[r4,#0]
0005b8 4649 MOV r1,r9
0005ba 4650 MOV r0,r10
0005bc f7fffffe BL LCD_DisplayChar
;;;385
;;;386 /* Increment character number in one line */
;;;387 index++;
0005c0 1c7f ADDS r7,r7,#1
;;;388
;;;389 /* Decrement the column position by 16 */
;;;390 refcolumn -= 16;
0005c2 f1a90010 SUB r0,r9,#0x10
0005c6 fa1ff980 UXTH r9,r0
;;;391 /* Point on the next character */
;;;392 ptr++;
;;;393 /* Increment the number of character after the last space */
;;;394 spaceindex++;
0005ca 1c6d ADDS r5,r5,#1
;;;395 if(*ptr == 0x20)
0005cc f8140f01 LDRB r0,[r4,#1]!
0005d0 2820 CMP r0,#0x20
0005d2 d102 BNE |L1.1498|
;;;396 {
;;;397 spaceindex = 0;
0005d4 2500 MOVS r5,#0
;;;398 column = refcolumn - 16;
0005d6 f1a90610 SUB r6,r9,#0x10
|L1.1498|
0005da f1b80801 SUBS r8,r8,#1 ;359
0005de d2ca BCS |L1.1398|
|L1.1504|
;;;399 }
;;;400 }
;;;401 }
;;;402 }
0005e0 e8bd87f0 POP {r4-r10,pc}
;;;403
ENDP
LCD_ScrollText PROC
;;;411 void LCD_ScrollText(u8 Line, u8 *ptr)
;;;412 {
0005e4 e92d47f0 PUSH {r4-r10,lr}
0005e8 4682 MOV r10,r0
0005ea 460c MOV r4,r1
;;;413 u32 i = 0, length = 0, x = 0;
0005ec 2500 MOVS r5,#0
0005ee 2700 MOVS r7,#0
;;;414 u16 refcolumn = 319;
0005f0 f240163f MOV r6,#0x13f
;;;415
;;;416 /* Get the string length */
;;;417 length = StrLength(ptr);
0005f4 4620 MOV r0,r4
0005f6 f7fffffe BL StrLength
0005fa 4680 MOV r8,r0
;;;418
;;;419 while(1)
0005fc f240193f MOV r9,#0x13f
|L1.1536|
;;;420 {
;;;421 /* Send the string character by character on lCD */
;;;422 while ((*ptr != 0) & (i < 20))
000600 7820 LDRB r0,[r4,#0]
000602 b100 CBZ r0,|L1.1542|
000604 2001 MOVS r0,#1
|L1.1542|
000606 2d14 CMP r5,#0x14
000608 d201 BCS |L1.1550|
00060a 2101 MOVS r1,#1
00060c e000 B |L1.1552|
|L1.1550|
00060e 2100 MOVS r1,#0
|L1.1552|
000610 4208 TST r0,r1
000612 d015 BEQ |L1.1600|
|L1.1556|
;;;423 {
;;;424 /* Display one character on LCD */
;;;425 LCD_DisplayChar(Line, refcolumn, *ptr);
000614 7822 LDRB r2,[r4,#0]
000616 4631 MOV r1,r6
000618 4650 MOV r0,r10
00061a f7fffffe BL LCD_DisplayChar
;;;426 /* Decrement the column position by 16 */
;;;427 refcolumn -= 16;
00061e f1a60010 SUB r0,r6,#0x10
000622 b286 UXTH r6,r0
;;;428 /* Point on the next character */
;;;429 ptr++;
;;;430 /* Increment the character counter */
;;;431 i++;
000624 1c6d ADDS r5,r5,#1
000626 f8140f01 LDRB r0,[r4,#1]! ;422
00062a b108 CBZ r0,|L1.1584|
00062c 2101 MOVS r1,#1 ;422
00062e e000 B |L1.1586|
|L1.1584|
000630 2100 MOVS r1,#0 ;422
|L1.1586|
000632 2d14 CMP r5,#0x14 ;422
000634 d201 BCS |L1.1594|
000636 2001 MOVS r0,#1 ;422
000638 e000 B |L1.1596|
|L1.1594|
00063a 2000 MOVS r0,#0 ;422
|L1.1596|
00063c 4201 TST r1,r0 ;422
00063e d1e9 BNE |L1.1556|
|L1.1600|
;;;432 }
;;;433
;;;434 Delay(10);
000640 200a MOVS r0,#0xa
000642 f7fffffe BL Delay
;;;435
;;;436 i = 0;
000646 2500 MOVS r5,#0
;;;437 ptr -= length;
000648 eba40408 SUB r4,r4,r8
;;;438 x++;
00064c 1c7f ADDS r7,r7,#1
;;;439 if(refcolumn < 16)
00064e 2e10 CMP r6,#0x10
000650 d200 BCS |L1.1620|
;;;440 {
;;;441 x = 0;
000652 2700 MOVS r7,#0
|L1.1620|
;;;442 }
;;;443
;;;444 refcolumn = 319 - (x * 16);
000654 4278 RSBS r0,r7,#0
000656 eb091000 ADD r0,r9,r0,LSL #4
00065a b286 UXTH r6,r0
00065c e7d0 B |L1.1536|
;;;445 }
;;;446 }
;;;447
ENDP
LCD_SetDisplayWindow PROC
;;;458 void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;459 {
00065e e92d41f0 PUSH {r4-r8,lr}
000662 4606 MOV r6,r0
000664 460c MOV r4,r1
000666 4617 MOV r7,r2
000668 461d MOV r5,r3
;;;460 LCD_WriteReg(R1, 0xD0);
00066a 21d0 MOVS r1,#0xd0
00066c 2001 MOVS r0,#1
00066e f7fffffe BL LCD_WriteReg
;;;461 LCD_WriteReg(R5, 0x14);
000672 2114 MOVS r1,#0x14
000674 2005 MOVS r0,#5
000676 f7fffffe BL LCD_WriteReg
;;;462
;;;463 LCD_WriteReg(R69, (Xpos - Height + 1));
00067a 1bf0 SUBS r0,r6,r7
00067c 1c40 ADDS r0,r0,#1
00067e b2c1 UXTB r1,r0
000680 2045 MOVS r0,#0x45
000682 f7fffffe BL LCD_WriteReg
;;;464 LCD_WriteReg(R70, Xpos);
000686 4631 MOV r1,r6
000688 2046 MOVS r0,#0x46
00068a f7fffffe BL LCD_WriteReg
;;;465
;;;466 LCD_WriteReg(R71, (((Ypos - Width + 1) & 0x100)>> 8));
00068e 1b60 SUBS r0,r4,r5
000690 1c45 ADDS r5,r0,#1
000692 f3c52100 UBFX r1,r5,#8,#1
000696 2047 MOVS r0,#0x47
000698 f7fffffe BL LCD_WriteReg
;;;467 LCD_WriteReg(R72, ((Ypos - Width + 1) & 0xFF));
00069c b2e9 UXTB r1,r5
00069e 2048 MOVS r0,#0x48
0006a0 f7fffffe BL LCD_WriteReg
;;;468
;;;469 LCD_WriteReg(R73, ((Ypos & 0x100)>> 8));
0006a4 f3c42100 UBFX r1,r4,#8,#1
0006a8 2049 MOVS r0,#0x49
0006aa f7fffffe BL LCD_WriteReg
;;;470 LCD_WriteReg(R74, (Ypos & 0xFF));
0006ae b2e1 UXTB r1,r4
0006b0 204a MOVS r0,#0x4a
0006b2 f7fffffe BL LCD_WriteReg
;;;471
;;;472 LCD_SetCursor(Xpos, Ypos);
0006b6 4621 MOV r1,r4
0006b8 4630 MOV r0,r6
0006ba e8bd41f0 POP {r4-r8,lr}
0006be e7fe B LCD_SetCursor
;;;473 }
;;;474
ENDP
LCD_DrawLine PROC
;;;487 void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
;;;488 {
0006c0 e92d47f0 PUSH {r4-r10,lr}
0006c4 4606 MOV r6,r0
0006c6 4688 MOV r8,r1
0006c8 4615 MOV r5,r2
0006ca 4699 MOV r9,r3
;;;489 u32 i = 0;
0006cc 2400 MOVS r4,#0
;;;490
;;;491 LCD_SetCursor(Xpos, Ypos);
0006ce 4641 MOV r1,r8
0006d0 4630 MOV r0,r6
0006d2 f7fffffe BL LCD_SetCursor
;;;492
;;;493 if(Direction == Horizontal)
0006d6 4f4f LDR r7,|L1.2068|
0006d8 f1b90f00 CMP r9,#0
0006dc d109 BNE |L1.1778|
;;;494 {
;;;495 for(i = 0; i < Length; i++)
0006de 2d00 CMP r5,#0
0006e0 d905 BLS |L1.1774|
|L1.1762|
;;;496 {
;;;497 LCD_WriteRAM(TextColor);
0006e2 8838 LDRH r0,[r7,#0] ; TextColor
0006e4 f7fffffe BL LCD_WriteRAM
0006e8 1c64 ADDS r4,r4,#1 ;495
0006ea 42ac CMP r4,r5 ;495
0006ec d3f9 BCC |L1.1762|
|L1.1774|
;;;498 }
;;;499 }
;;;500 else
;;;501 {
;;;502 for(i = 0; i < Length; i++)
;;;503 {
;;;504
;;;505 LCD_WriteRAM(TextColor);
;;;506 Xpos++;
;;;507 LCD_SetCursor(Xpos, Ypos);
;;;508 }
;;;509 }
;;;510 }
0006ee e8bd87f0 POP {r4-r10,pc}
|L1.1778|
0006f2 2d00 CMP r5,#0 ;502
0006f4 d9fb BLS |L1.1774|
|L1.1782|
0006f6 8838 LDRH r0,[r7,#0] ;505 ; TextColor
0006f8 f7fffffe BL LCD_WriteRAM
0006fc 1c70 ADDS r0,r6,#1 ;506
0006fe b2c6 UXTB r6,r0 ;506
000700 4641 MOV r1,r8 ;507
000702 4630 MOV r0,r6 ;507
000704 f7fffffe BL LCD_SetCursor
000708 1c64 ADDS r4,r4,#1 ;502
00070a 42ac CMP r4,r5 ;502
00070c d3f3 BCC |L1.1782|
00070e e8bd87f0 POP {r4-r10,pc}
;;;511
ENDP
LCD_DrawRect PROC
;;;522 void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;523 {
000712 e92d41f0 PUSH {r4-r8,lr}
000716 4604 MOV r4,r0
000718 460e MOV r6,r1
00071a 4615 MOV r5,r2
00071c 461f MOV r7,r3
;;;524 LCD_DrawLine(Xpos, Ypos, Width, Horizontal);
00071e 2300 MOVS r3,#0
000720 463a MOV r2,r7
000722 4631 MOV r1,r6
000724 4620 MOV r0,r4
000726 f7fffffe BL LCD_DrawLine
;;;525 LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);
00072a 1960 ADDS r0,r4,r5
00072c b2c0 UXTB r0,r0
00072e 2300 MOVS r3,#0
000730 463a MOV r2,r7
000732 4631 MOV r1,r6
000734 f7fffffe BL LCD_DrawLine
;;;526
;;;527 LCD_DrawLine(Xpos, Ypos, Height, Vertical);
000738 2301 MOVS r3,#1
00073a 462a MOV r2,r5
00073c 4631 MOV r1,r6
00073e 4620 MOV r0,r4
000740 f7fffffe BL LCD_DrawLine
;;;528 LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);
000744 1bf0 SUBS r0,r6,r7
000746 1c40 ADDS r0,r0,#1
000748 b281 UXTH r1,r0
00074a 462a MOV r2,r5
00074c 4620 MOV r0,r4
00074e e8bd41f0 POP {r4-r8,lr}
000752 2301 MOVS r3,#1
000754 e7fe B LCD_DrawLine
;;;529 }
;;;530
ENDP
LCD_DrawCircle PROC
;;;541 void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)
;;;542 {
000756 e92d4ff0 PUSH {r4-r11,lr}
00075a b083 SUB sp,sp,#0xc
00075c 4607 MOV r7,r0
00075e 4688 MOV r8,r1
;;;543 s32 D;/* Decision Variable */
;;;544 u32 CurX;/* Current X Value */
;;;545 u32 CurY;/* Current Y Value */
;;;546
;;;547 D = 3 - (Radius << 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -