📄 calendar.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Int_Flash\calendar.o --depend=.\Int_Flash\calendar.d --device=DARMSTM --apcs=interwork -O3 -I..\include -I..\..\..\..\..\INC\ST\STM32F10x\USB -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB --omf_browse=.\Int_Flash\calendar.crf ..\source\calendar.c]
THUMB
AREA ||i.ReadDigit||, CODE, READONLY, ALIGN=2
ReadDigit PROC
;;;86 u8 ReadDigit(u8 ColBegin, u8 CountBegin, u8 ValueMax, u8 ValueMin)
;;;87 {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 4681 MOV r9,r0
;;;88 u32 MyKey = 0, tmpValue = 0;
;;;89
;;;90 /* Set the Back Color */
;;;91 LCD_SetBackColor(Red);
000006 f44f4778 MOV r7,#0xf800
00000a 460c MOV r4,r1 ;87
00000c 4615 MOV r5,r2 ;87
00000e 461e MOV r6,r3 ;87
000010 4638 MOV r0,r7
000012 f7fffffe BL LCD_SetBackColor
;;;92 /* Set the Text Color */
;;;93 LCD_SetTextColor(White);
000016 f64f78ff MOV r8,#0xffff
00001a 4640 MOV r0,r8
00001c f7fffffe BL LCD_SetTextColor
;;;94
;;;95 /* Initialize tmpValue */
;;;96 tmpValue = CountBegin;
;;;97 /* Display */
;;;98 LCD_DisplayChar(Line8, ColBegin, (tmpValue + 0x30));
;;;99
;;;100 /* Endless loop */
;;;101 while(1)
000020 e008 B |L1.52|
;;;102 {
;;;103 /* Check which key is pressed */
;;;104 MyKey = ReadKey();
000022 bf00 NOP
|L1.36|
000024 f7fffffe BL ReadKey
;;;105
;;;106 /* If "UP" pushbutton is pressed */
;;;107 if(MyKey == UP)
000028 2804 CMP r0,#4
00002a d10b BNE |L1.68|
;;;108 {
;;;109 /* Increase the value of the digit */
;;;110 if(tmpValue == ValueMax)
00002c 42ac CMP r4,r5
00002e d100 BNE |L1.50|
;;;111 {
;;;112 tmpValue = (ValueMin - 1);
000030 1e74 SUBS r4,r6,#1
|L1.50|
;;;113 }
;;;114 /* Display new value */
;;;115 LCD_DisplayChar(Line8, ColBegin,((++tmpValue) + 0x30));
000032 1c64 ADDS r4,r4,#1
|L1.52|
000034 f1040030 ADD r0,r4,#0x30 ;98
000038 b2c2 UXTB r2,r0 ;98
00003a 4649 MOV r1,r9 ;98
00003c 20c0 MOVS r0,#0xc0 ;98
00003e f7fffffe BL LCD_DisplayChar
000042 e7ef B |L1.36|
|L1.68|
;;;116 }
;;;117 /* If "DOWN" pushbutton is pressed */
;;;118 if(MyKey == DOWN)
000044 2805 CMP r0,#5
000046 d104 BNE |L1.82|
;;;119 {
;;;120 /* Decrease the value of the digit */
;;;121 if(tmpValue == ValueMin)
000048 42b4 CMP r4,r6
00004a d100 BNE |L1.78|
;;;122 {
;;;123 tmpValue = (ValueMax + 1);
00004c 1c6c ADDS r4,r5,#1
|L1.78|
;;;124 }
;;;125 /* Display new value */
;;;126 LCD_DisplayChar(Line8, ColBegin,((--tmpValue) + 0x30));
00004e 1e64 SUBS r4,r4,#1
000050 e7f0 B |L1.52|
|L1.82|
;;;127 }
;;;128 /* If "SEL" pushbutton is pressed */
;;;129 if(MyKey == SEL)
000052 2801 CMP r0,#1
000054 d1e6 BNE |L1.36|
;;;130 {
;;;131 /* Set the Back Color */
;;;132 LCD_SetBackColor(White);
000056 4640 MOV r0,r8
000058 f7fffffe BL LCD_SetBackColor
;;;133 /* Set the Text Color */
;;;134 LCD_SetTextColor(Red);
00005c 4638 MOV r0,r7
00005e f7fffffe BL LCD_SetTextColor
;;;135 /* Display new value */
;;;136 LCD_DisplayChar(Line8, ColBegin, (tmpValue + 0x30));
000062 f1040030 ADD r0,r4,#0x30
000066 b2c2 UXTB r2,r0
000068 4649 MOV r1,r9
00006a 20c0 MOVS r0,#0xc0
00006c f7fffffe BL LCD_DisplayChar
;;;137 /* Return the digit value and exit */
;;;138 return tmpValue;
000070 b2e0 UXTB r0,r4
;;;139 }
;;;140 }
;;;141 }
000072 e8bd87f0 POP {r4-r10,pc}
;;;142
ENDP
AREA ||i.WeekDayNum||, CODE, READONLY, ALIGN=2
WeekDayNum PROC
;;;1444 static void WeekDayNum(u32 nyear, u8 nmonth, u8 nday)
;;;1445 {
000000 b5f0 PUSH {r4-r7,lr}
;;;1446 u32 a = 0, b = 0, c = 0, s = 0, e = 0, f = 0, g = 0, d = 0;
000002 2400 MOVS r4,#0
000004 2605 MOVS r6,#5
;;;1447 s32 n = 0;
;;;1448
;;;1449 if(nmonth < 3)
000006 2903 CMP r1,#3
000008 d202 BCS |L2.16|
;;;1450 {
;;;1451 a = nyear - 1;
00000a bf00 NOP
00000c f1a00001 SUB r0,r0,#1
|L2.16|
;;;1452 }
;;;1453 else
;;;1454 {
;;;1455 a = nyear;
;;;1456 }
;;;1457
;;;1458 b = (a/4) - (a/100) + (a/400);
000010 f04f0c64 MOV r12,#0x64
000014 fbb0f3fc UDIV r3,r0,r12
000018 f44f77c8 MOV r7,#0x190
00001c fbb0f5f7 UDIV r5,r0,r7
000020 ebc30390 RSB r3,r3,r0,LSR #2
000024 441d ADD r5,r5,r3
;;;1459 c = ((a - 1)/4) - ((a - 1)/100) + ((a - 1)/400);
000026 f1a00301 SUB r3,r0,#1
00002a fbb3fcfc UDIV r12,r3,r12
00002e ebcc0c93 RSB r12,r12,r3,LSR #2
000032 fbb3f3f7 UDIV r3,r3,r7
000036 4463 ADD r3,r3,r12
;;;1460 s = b - c;
000038 eba50303 SUB r3,r5,r3
;;;1461
;;;1462 if(nmonth < 3)
00003c d205 BCS |L2.74|
;;;1463 {
;;;1464 e = 0;
;;;1465 f = nday - 1 + 31 * (nmonth - 1);
00003e ebc11141 RSB r1,r1,r1,LSL #5
000042 4411 ADD r1,r1,r2
000044 f1a10120 SUB r1,r1,#0x20
000048 e009 B |L2.94|
|L2.74|
;;;1466 }
;;;1467 else
;;;1468 {
;;;1469 e = s + 1;
;;;1470 f = nday + (153*(nmonth - 3) + 2)/5 + 58 + s;
00004a 2799 MOVS r7,#0x99
00004c 4379 MULS r1,r7,r1
00004e f2a111c9 SUB r1,r1,#0x1c9
000052 fb91f1f6 SDIV r1,r1,r6
000056 4411 ADD r1,r1,r2
000058 1c5c ADDS r4,r3,#1 ;1469
00005a 4419 ADD r1,r1,r3
00005c 313a ADDS r1,r1,#0x3a
|L2.94|
;;;1471 }
;;;1472
;;;1473 g = (a + b) % 7;
00005e 4428 ADD r0,r0,r5
000060 2507 MOVS r5,#7
000062 fbb0f2f5 UDIV r2,r0,r5
000066 fb050212 MLS r2,r5,r2,r0
;;;1474 d = (f + g - e) % 7;
00006a 1888 ADDS r0,r1,r2
00006c 1b00 SUBS r0,r0,r4
00006e fbb0f4f5 UDIV r4,r0,r5
000072 fb050414 MLS r4,r5,r4,r0
;;;1475 n = f + 3 - d;
000076 1b08 SUBS r0,r1,r4
000078 4f0b LDR r7,|L2.168|
00007a 1cc0 ADDS r0,r0,#3
;;;1476
;;;1477 if (n < 0)
00007c d505 BPL |L2.138|
;;;1478 {
;;;1479 wn = 53 - ((g - s)/5);
00007e 1ad0 SUBS r0,r2,r3
000080 fbb0f0f6 UDIV r0,r0,r6
000084 f1c00035 RSB r0,r0,#0x35
000088 e008 B |L2.156|
|L2.138|
;;;1480 }
;;;1481 else if (n > (364 + s))
00008a f50373b6 ADD r3,r3,#0x16c
00008e 4298 CMP r0,r3
000090 d901 BLS |L2.150|
;;;1482 {
;;;1483 wn = 1;
000092 2001 MOVS r0,#1
000094 e002 B |L2.156|
|L2.150|
;;;1484 }
;;;1485 else
;;;1486 {
;;;1487 wn = (n/7) + 1;
000096 fb90f0f5 SDIV r0,r0,r5
00009a 1c40 ADDS r0,r0,#1
|L2.156|
;;;1488 }
;;;1489
;;;1490 dn = d;
;;;1491 dc = f + 1;
00009c 1c49 ADDS r1,r1,#1
;;;1492 }
00009e e9c74102 STRD r4,r1,[r7,#8]
0000a2 6078 STR r0,[r7,#4] ; wn
0000a4 bdf0 POP {r4-r7,pc}
;;;1493
ENDP
0000a6 0000 DCW 0x0000
|L2.168|
0000a8 00000000 DCD ||.data||
AREA ||i.IsLeapYear||, CODE, READONLY, ALIGN=1
IsLeapYear PROC
;;;1503 {
;;;1504 if(nYear % 4 != 0) return 0;
000000 0781 LSLS r1,r0,#30
000002 d10e BNE |L3.34|
;;;1505 if(nYear % 100 != 0) return 1;
000004 2164 MOVS r1,#0x64
000006 fbb0f2f1 UDIV r2,r0,r1
00000a fb010112 MLS r1,r1,r2,r0
00000e b931 CBNZ r1,|L3.30|
;;;1506 return (u8)(nYear % 400 == 0);
000010 f44f71c8 MOV r1,#0x190
000014 fbb0f2f1 UDIV r2,r0,r1
000018 fb010012 MLS r0,r1,r2,r0
00001c b908 CBNZ r0,|L3.34|
|L3.30|
00001e 2001 MOVS r0,#1
;;;1507 }
000020 4770 BX lr
|L3.34|
000022 2000 MOVS r0,#0 ;1506
000024 4770 BX lr
;;;1508
ENDP
AREA ||i.Date_Display||, CODE, READONLY, ALIGN=2
Date_Display PROC
;;;617 void Date_Display(u16 nYear, u8 nMonth, u8 nDay)
;;;618 {
000000 e92d4ff7 PUSH {r0-r2,r4-r11,lr}
000004 4681 MOV r9,r0
000006 460e MOV r6,r1
;;;619 u32 mline = 0, mcolumn = 319, month = 0;
000008 f2401b3f MOV r11,#0x13f
;;;620 u32 monthlength = 0;
;;;621
;;;622 if(nMonth == 2)
00000c 2902 CMP r1,#2
00000e d108 BNE |L4.34|
;;;623 {
;;;624 if(IsLeapYear(nYear))
000010 4648 MOV r0,r9
000012 f7fffffe BL IsLeapYear
000016 b108 CBZ r0,|L4.28|
;;;625 {
;;;626 monthlength = 30;
000018 251e MOVS r5,#0x1e
00001a e006 B |L4.42|
|L4.28|
;;;627 }
;;;628 else
;;;629 {
;;;630 monthlength = MonLen[nMonth - 1];
00001c 4888 LDR r0,|L4.576|
00001e 7845 LDRB r5,[r0,#1]
000020 e003 B |L4.42|
|L4.34|
;;;631 }
;;;632 }
;;;633 else
;;;634 {
;;;635 monthlength = MonLen[nMonth - 1];
000022 4887 LDR r0,|L4.576|
000024 4430 ADD r0,r0,r6
000026 f8105c01 LDRB r5,[r0,#-1]
|L4.42|
;;;636 }
;;;637
;;;638 /* Set the Back Color */
;;;639 LCD_SetBackColor(Blue2);
00002a f240501f MOV r0,#0x51f
00002e f7fffffe BL LCD_SetBackColor
;;;640 /* Set the Text Color */
;;;641 LCD_SetTextColor(Yellow);
000032 f64f70e0 MOV r0,#0xffe0
000036 f7fffffe BL LCD_SetTextColor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -