?? lcd.txt
字號:
0005c2 4650 MOV r0,r10
0005c4 f7fff7ff BL LCD_DisplayChar
;;;385
;;;386 /* Increment character number in one line */
;;;387 index++;
0005c8 1c7f ADDS r7,r7,#1
;;;388
;;;389 /* Decrement the column position by 16 */
;;;390 refcolumn -= 16;
0005ca f1a9f1a9 SUB r0,r9,#0x10
0005ce fa1ffa1f UXTH r9,r0
;;;391 /* Point on the next character */
;;;392 ptr++;
;;;393 /* Increment the number of character after the last space */
;;;394 spaceindex++;
0005d2 1c6d ADDS r5,r5,#1
;;;395 if(*ptr == 0x20)
0005d4 f814f814 LDRB r0,[r4,#1]!
0005d8 2820 CMP r0,#0x20
0005da d102 BNE |L1.1506|
;;;396 {
;;;397 spaceindex = 0;
0005dc 2500 MOVS r5,#0
0005de f1a9f1a9 SUB r6,r9,#0x10
|L1.1506|
0005e2 f1b8f1b8 SUBS r8,r8,#1
0005e6 d2ca BCS |L1.1406|
|L1.1512|
;;;398 column = refcolumn - 16;
;;;399 }
;;;400 }
;;;401 }
;;;402 }
0005e8 e8bde8bd POP {r4-r10,pc}
;;;403
ENDP
LCD_ScrollText PROC
;;;411 void LCD_ScrollText(u8 Line, u8 *ptr)
;;;412 {
0005ec e92de92d PUSH {r4-r10,lr}
0005f0 4682 MOV r10,r0
0005f2 460c MOV r4,r1
;;;413 u32 i = 0, length = 0, x = 0;
0005f4 2500 MOVS r5,#0
0005f6 2700 MOVS r7,#0
;;;414 u16 refcolumn = 319;
0005f8 f240f240 MOV r6,#0x13f
;;;415
;;;416 /* Get the string length */
;;;417 length = StrLength(ptr);
0005fc 4620 MOV r0,r4
0005fe f7fff7ff BL StrLength
000602 4680 MOV r8,r0
;;;418
;;;419 while(1)
000604 f240f240 MOV r9,#0x13f
|L1.1544|
;;;420 {
;;;421 /* Send the string character by character on lCD */
;;;422 while ((*ptr != 0) & (i < 20))
000608 7820 LDRB r0,[r4,#0]
00060a b100 CBZ r0,|L1.1550|
00060c 2001 MOVS r0,#1
|L1.1550|
00060e 2d14 CMP r5,#0x14
000610 d201 BCS |L1.1558|
000612 2101 MOVS r1,#1
000614 e000 B |L1.1560|
|L1.1558|
000616 2100 MOVS r1,#0
|L1.1560|
000618 4208 TST r0,r1
00061a d015 BEQ |L1.1608|
|L1.1564|
;;;423 {
;;;424 /* Display one character on LCD */
;;;425 LCD_DisplayChar(Line, refcolumn, *ptr);
00061c 7822 LDRB r2,[r4,#0]
00061e 4631 MOV r1,r6
000620 4650 MOV r0,r10
000622 f7fff7ff BL LCD_DisplayChar
;;;426 /* Decrement the column position by 16 */
;;;427 refcolumn -= 16;
000626 f1a6f1a6 SUB r0,r6,#0x10
00062a b286 UXTH r6,r0
;;;428 /* Point on the next character */
;;;429 ptr++;
;;;430 /* Increment the character counter */
;;;431 i++;
00062c 1c6d ADDS r5,r5,#1
00062e f814f814 LDRB r0,[r4,#1]!
000632 b108 CBZ r0,|L1.1592|
000634 2101 MOVS r1,#1
000636 e000 B |L1.1594|
|L1.1592|
000638 2100 MOVS r1,#0
|L1.1594|
00063a 2d14 CMP r5,#0x14
00063c d201 BCS |L1.1602|
00063e 2001 MOVS r0,#1
000640 e000 B |L1.1604|
|L1.1602|
000642 2000 MOVS r0,#0
|L1.1604|
000644 4201 TST r1,r0
000646 d1e9 BNE |L1.1564|
|L1.1608|
;;;432 }
;;;433
;;;434 Delay(10);
000648 200a MOVS r0,#0xa
00064a f7fff7ff BL Delay
;;;435
;;;436 i = 0;
00064e 2500 MOVS r5,#0
;;;437 ptr -= length;
000650 eba4eba4 SUB r4,r4,r8
;;;438 x++;
000654 1c7f ADDS r7,r7,#1
;;;439 if(refcolumn < 16)
000656 2e10 CMP r6,#0x10
000658 d200 BCS |L1.1628|
;;;440 {
;;;441 x = 0;
00065a 2700 MOVS r7,#0
|L1.1628|
00065c 4278 RSBS r0,r7,#0
00065e eb09eb09 ADD r0,r9,r0,LSL #4
;;;442 }
;;;443
;;;444 refcolumn = 319 - (x * 16);
000662 b286 UXTH r6,r0
000664 e7d0 B |L1.1544|
;;;445 }
;;;446 }
;;;447
ENDP
LCD_SetDisplayWindow PROC
;;;458 void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;459 {
000666 e92de92d PUSH {r4-r8,lr}
00066a 4606 MOV r6,r0
00066c 460c MOV r4,r1
00066e 4617 MOV r7,r2
000670 461d MOV r5,r3
;;;460 LCD_WriteReg(R1, 0xD0);
000672 21d0 MOVS r1,#0xd0
000674 2001 MOVS r0,#1
000676 f7fff7ff BL LCD_WriteReg
;;;461 LCD_WriteReg(R5, 0x14);
00067a 2114 MOVS r1,#0x14
00067c 2005 MOVS r0,#5
00067e f7fff7ff BL LCD_WriteReg
;;;462
;;;463 LCD_WriteReg(R69, (Xpos - Height + 1));
000682 1bf0 SUBS r0,r6,r7
000684 1c40 ADDS r0,r0,#1
000686 b2c1 UXTB r1,r0
000688 2045 MOVS r0,#0x45
00068a f7fff7ff BL LCD_WriteReg
;;;464 LCD_WriteReg(R70, Xpos);
00068e 4631 MOV r1,r6
000690 2046 MOVS r0,#0x46
000692 f7fff7ff BL LCD_WriteReg
;;;465
;;;466 LCD_WriteReg(R71, (((Ypos - Width + 1) & 0x100)>> 8));
000696 1b60 SUBS r0,r4,r5
000698 1c45 ADDS r5,r0,#1
00069a f3c5f3c5 UBFX r1,r5,#8,#1
00069e 2047 MOVS r0,#0x47
0006a0 f7fff7ff BL LCD_WriteReg
;;;467 LCD_WriteReg(R72, ((Ypos - Width + 1) & 0xFF));
0006a4 b2e9 UXTB r1,r5
0006a6 2048 MOVS r0,#0x48
0006a8 f7fff7ff BL LCD_WriteReg
;;;468
;;;469 LCD_WriteReg(R73, ((Ypos & 0x100)>> 8));
0006ac f3c4f3c4 UBFX r1,r4,#8,#1
0006b0 2049 MOVS r0,#0x49
0006b2 f7fff7ff BL LCD_WriteReg
;;;470 LCD_WriteReg(R74, (Ypos & 0xFF));
0006b6 b2e1 UXTB r1,r4
0006b8 204a MOVS r0,#0x4a
0006ba f7fff7ff BL LCD_WriteReg
;;;471
;;;472 LCD_SetCursor(Xpos, Ypos);
0006be 4621 MOV r1,r4
0006c0 4630 MOV r0,r6
0006c2 e8bde8bd POP {r4-r8,lr}
0006c6 e7fe B LCD_SetCursor
;;;473 }
;;;474
ENDP
LCD_DrawLine PROC
;;;487 void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction)
;;;488 {
0006c8 e92de92d PUSH {r4-r10,lr}
0006cc 4606 MOV r6,r0
0006ce 4688 MOV r8,r1
0006d0 4615 MOV r5,r2
0006d2 4699 MOV r9,r3
;;;489 u32 i = 0;
0006d4 2400 MOVS r4,#0
;;;490
;;;491 LCD_SetCursor(Xpos, Ypos);
0006d6 4641 MOV r1,r8
0006d8 4630 MOV r0,r6
0006da f7fff7ff BL LCD_SetCursor
;;;492
;;;493 if(Direction == Horizontal)
0006de 4f4f LDR r7,|L1.2076|
0006e0 f1b9f1b9 CMP r9,#0
0006e4 d109 BNE |L1.1786|
;;;494 {
;;;495 for(i = 0; i < Length; i++)
0006e6 2d00 CMP r5,#0
0006e8 d905 BLS |L1.1782|
|L1.1770|
0006ea 8838 LDRH r0,[r7,#0] ; TextColor
0006ec f7fff7ff BL LCD_WriteRAM
0006f0 1c64 ADDS r4,r4,#1
0006f2 42ac CMP r4,r5
0006f4 d3f9 BCC |L1.1770|
|L1.1782|
0006f6 e8bde8bd POP {r4-r10,pc}
|L1.1786|
;;;496 {
;;;497 LCD_WriteRAM(TextColor);
;;;498 }
;;;499 }
;;;500 else
;;;501 {
;;;502 for(i = 0; i < Length; i++)
0006fa 2d00 CMP r5,#0
0006fc d9fb BLS |L1.1782|
|L1.1790|
0006fe 8838 LDRH r0,[r7,#0] ; TextColor
000700 f7fff7ff BL LCD_WriteRAM
000704 1c70 ADDS r0,r6,#1
;;;503 {
;;;504
;;;505 LCD_WriteRAM(TextColor);
;;;506 Xpos++;
000706 b2c6 UXTB r6,r0
000708 4641 MOV r1,r8
00070a 4630 MOV r0,r6
00070c f7fff7ff BL LCD_SetCursor
000710 1c64 ADDS r4,r4,#1
000712 42ac CMP r4,r5
000714 d3f3 BCC |L1.1790|
;;;507 LCD_SetCursor(Xpos, Ypos);
;;;508 }
;;;509 }
;;;510 }
000716 e8bde8bd POP {r4-r10,pc}
;;;511
ENDP
LCD_DrawRect PROC
;;;522 void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width)
;;;523 {
00071a e92de92d PUSH {r4-r8,lr}
00071e 4604 MOV r4,r0
000720 460e MOV r6,r1
000722 4615 MOV r5,r2
000724 461f MOV r7,r3
;;;524 LCD_DrawLine(Xpos, Ypos, Width, Horizontal);
000726 2300 MOVS r3,#0
000728 463a MOV r2,r7
00072a 4631 MOV r1,r6
00072c 4620 MOV r0,r4
00072e f7fff7ff BL LCD_DrawLine
;;;525 LCD_DrawLine((Xpos + Height), Ypos, Width, Horizontal);
000732 1960 ADDS r0,r4,r5
000734 b2c0 UXTB r0,r0
000736 2300 MOVS r3,#0
000738 463a MOV r2,r7
00073a 4631 MOV r1,r6
00073c f7fff7ff BL LCD_DrawLine
;;;526
;;;527 LCD_DrawLine(Xpos, Ypos, Height, Vertical);
000740 2301 MOVS r3,#1
000742 462a MOV r2,r5
000744 4631 MOV r1,r6
000746 4620 MOV r0,r4
000748 f7fff7ff BL LCD_DrawLine
;;;528 LCD_DrawLine(Xpos, (Ypos - Width + 1), Height, Vertical);
00074c 1bf0 SUBS r0,r6,r7
00074e 1c40 ADDS r0,r0,#1
000750 b281 UXTH r1,r0
000752 462a MOV r2,r5
000754 4620 MOV r0,r4
000756 e8bde8bd POP {r4-r8,lr}
00075a 2301 MOVS r3,#1
00075c e7fe B LCD_DrawLine
;;;529 }
;;;530
ENDP
LCD_DrawCircle PROC
;;;541 void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius)
;;;542 {
00075e e92de92d PUSH {r4-r11,lr}
000762 b083 SUB sp,sp,#0xc
000764 4607 MOV r7,r0
000766 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);
000768 2003 MOVS r0,#3
00076a eba0eba0 SUB r6,r0,r2,LSL #1
;;;548 CurX = 0;
00076e 2400 MOVS r4,#0
;;;549 CurY = Radius;
000770 4615 MOV r5,r2
;;;550
;;;551 while (CurX <= CurY)
000772 f8dff8df LDR r9,|L1.2076|
|L1.1910|
;;;552 {
;;;553 LCD_SetCursor(Xpos + CurX, Ypos + CurY);
000776 eb08eb08 ADD r10,r8,r5
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -