📄 main.txt
字号:
; generated by ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 442] for uVision
; commandline ArmCC [--thumb --debug -c --asm --interleave -o.\Obj\main.o --device=DARMP -O0 --apcs=interwork -ID:\Keil\ARM\INC\Philips main.cpp]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
_Z12_delay_loop_j PROC ; _delay_loop_(unsigned)
;;;21 void _delay_loop_(unsigned int val)
;;;22 {
000000 2100 MOVS r1,#0
;;;23 unsigned int i;
;;;24 for(i = 0; i < (val * 60); i ++);
000002 e000 B |L1.6|
|L1.4|
000004 1c49 ADDS r1,r1,#1
|L1.6|
000006 223c MOVS r2,#0x3c
000008 4342 MULS r2,r0,r2
00000a 428a CMP r2,r1
00000c d8fa BHI |L1.4|
;;;25 }
00000e 4770 BX lr
ENDP
_ZN6LcdObj7LcdSendEc PROC ; LcdObj::LcdSend(char)
;;;446 void LcdObj::LcdSend(char cData)
;;;447 {
000010 b570 PUSH {r4-r6,lr}
000012 0006 MOVS r6,r0
000014 000c MOVS r4,r1
;;;448 unsigned char i;
;;;449 _delay_loop_(1);
000016 2001 MOVS r0,#1
000018 f7ff fffe BL _Z12_delay_loop_j
;;;450 for (i = 0; i < 8; i ++) {
00001c 2500 MOVS r5,#0
00001e e016 B |L1.78|
;;;451 // _delay_loop_(1);
;;;452 IOCLR1 = (1 << LCDSCK);
|L1.32|
000020 2001 MOVS r0,#1
000022 0480 LSLS r0,r0,#18
000024 49e9 LDR r1,|L1.972|
000026 61c8 STR r0,[r1,#0x1c]
;;;453 // _delay_loop_(1);
;;;454 if (cData & 0x80) {//MSB最高位为1时
000028 2080 MOVS r0,#0x80
00002a 4204 TST r4,r0
00002c d002 BEQ |L1.52|
;;;455 IOSET1 = (1 << LCDSID);
00002e 0300 LSLS r0,r0,#12
000030 6148 STR r0,[r1,#0x14]
000032 e003 B |L1.60|
;;;456 }
;;;457 else {
;;;458 IOCLR1 = (1 << LCDSID);
|L1.52|
000034 2001 MOVS r0,#1
000036 04c0 LSLS r0,r0,#19
000038 49e4 LDR r1,|L1.972|
00003a 61c8 STR r0,[r1,#0x1c]
;;;459 }
;;;460 // _delay_loop_(1);
;;;461 cData <<= 1;
|L1.60|
00003c 0660 LSLS r0,r4,#25
00003e 0e04 LSRS r4,r0,#24
;;;462 IOSET1 = (1 << LCDSCK);
000040 2001 MOVS r0,#1
000042 0480 LSLS r0,r0,#18
000044 49e1 LDR r1,|L1.972|
000046 6148 STR r0,[r1,#0x14]
000048 1c68 ADDS r0,r5,#1 ;450
00004a 0605 LSLS r5,r0,#24 ;450
00004c 0e2d LSRS r5,r5,#24 ;450
|L1.78|
00004e 2d08 CMP r5,#8 ;450
000050 dbe6 BLT |L1.32| ;450
;;;463 // _delay_loop_(1);
;;;464 }
;;;465 }
000052 bc70 POP {r4-r6}
000054 bc08 POP {r3}
000056 4718 BX r3
ENDP
_ZN6LcdObj11LcdSendDataEc PROC ; LcdObj::LcdSendData(char)
;;;501 void LcdObj::LcdSendData(char cData)
;;;502 {
000058 b530 PUSH {r4,r5,lr}
00005a 0005 MOVS r5,r0
00005c 000c MOVS r4,r1
;;;503 /*--------------------------------------------------------
;;;504 发送同步脉冲11111 WR(0) RS(0) 0发送顺序从左至右)
;;;505 --------------------------------------------------------*/
;;;506 IOSET1 = (1 << LCDCS);//SS=1,启动SPI
00005e 2001 MOVS r0,#1
000060 0440 LSLS r0,r0,#17
000062 49da LDR r1,|L1.972|
000064 6148 STR r0,[r1,#0x14]
;;;507 LcdSend(0xfa);//发送LCD显示数据
000066 21fa MOVS r1,#0xfa
000068 0028 MOVS r0,r5
00006a f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;508 LcdSend(cData & 0xf0);//发送高4位LCD显示数据
00006e 20f0 MOVS r0,#0xf0
000070 0021 MOVS r1,r4
000072 4001 ANDS r1,r1,r0
000074 0028 MOVS r0,r5
000076 f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;509 LcdSend(cData << 4);//发送低4位LCD显示数据
00007a 0720 LSLS r0,r4,#28
00007c 0e01 LSRS r1,r0,#24
00007e 0028 MOVS r0,r5
000080 f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;510 IOCLR1 = (1 << LCDCS);//SS=0,关闭SPI
000084 2001 MOVS r0,#1
000086 0440 LSLS r0,r0,#17
000088 49d0 LDR r1,|L1.972|
00008a 61c8 STR r0,[r1,#0x1c]
;;;511 _delay_loop_(72);//st7920要求等待延时72uS
00008c 2048 MOVS r0,#0x48
00008e f7ff fffe BL _Z12_delay_loop_j
;;;512 }
000092 bc30 POP {r4,r5}
000094 bc08 POP {r3}
000096 4718 BX r3
ENDP
_ZN6LcdObj14LcdSendCommandEc PROC ; LcdObj::LcdSendCommand(char)
;;;483 void LcdObj::LcdSendCommand(char cCommand)
;;;484 {
000098 b530 PUSH {r4,r5,lr}
00009a 0005 MOVS r5,r0
00009c 000c MOVS r4,r1
;;;485 /*--------------------------------------------------------
;;;486 发送同步脉冲11111 WR(0) RS(0) 0发送顺序从左至右)
;;;487 --------------------------------------------------------*/
;;;488 IOSET1 = (1 << LCDCS);//SS=1,启动SPI
00009e 2001 MOVS r0,#1
0000a0 0440 LSLS r0,r0,#17
0000a2 49ca LDR r1,|L1.972|
0000a4 6148 STR r0,[r1,#0x14]
;;;489 LcdSend(0xf8);//发送LCD控制命令
0000a6 21f8 MOVS r1,#0xf8
0000a8 0028 MOVS r0,r5
0000aa f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;490 LcdSend(cCommand & 0xf0);//发送高4位LCD控制命令
0000ae 20f0 MOVS r0,#0xf0
0000b0 0021 MOVS r1,r4
0000b2 4001 ANDS r1,r1,r0
0000b4 0028 MOVS r0,r5
0000b6 f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;491 LcdSend(cCommand << 4);//发送低4位LCD控制命令
0000ba 0720 LSLS r0,r4,#28
0000bc 0e01 LSRS r1,r0,#24
0000be 0028 MOVS r0,r5
0000c0 f7ff fffe BL _ZN6LcdObj7LcdSendEc
;;;492 IOCLR1 = (1 << LCDCS);//SS=0,关闭SPI
0000c4 2001 MOVS r0,#1
0000c6 0440 LSLS r0,r0,#17
0000c8 49c0 LDR r1,|L1.972|
0000ca 61c8 STR r0,[r1,#0x1c]
;;;493 if (cCommand == 0x01) _delay_loop_(1600);//1.6mS
0000cc 2c01 CMP r4,#1
0000ce d104 BNE |L1.218|
0000d0 2019 MOVS r0,#0x19
0000d2 0180 LSLS r0,r0,#6
0000d4 f7ff fffe BL _Z12_delay_loop_j
0000d8 e002 B |L1.224|
;;;494 else _delay_loop_(72);//st7920要求等待72uS
|L1.218|
0000da 2048 MOVS r0,#0x48
0000dc f7ff fffe BL _Z12_delay_loop_j
;;;495 }
|L1.224|
0000e0 bc30 POP {r4,r5}
0000e2 bc08 POP {r3}
0000e4 4718 BX r3
ENDP
_ZN6LcdObj16LcdDisplayBufferEv PROC ; LcdObj::LcdDisplayBuffer()
;;;539 void LcdObj::LcdDisplayBuffer(void)
;;;540 {
0000e6 b570 PUSH {r4-r6,lr}
0000e8 0004 MOVS r4,r0
;;;541 unsigned char i, j;
;;;542 for (i = 0; i < 4; i ++) {//4行汉字
0000ea 2500 MOVS r5,#0
0000ec e022 B |L1.308|
;;;543 if (LcdRowWriteEnable[i]) {//允许此行刷新汉字显示
|L1.238|
0000ee 1ce0 ADDS r0,r4,#3
0000f0 5d40 LDRB r0,[r0,r5]
0000f2 2800 CMP r0,#0
0000f4 d01b BEQ |L1.302|
;;;544 LcdSendCommand(0x80 + (i & 1) * 16 + (i >> 1) * 8);//移动光标
0000f6 07e8 LSLS r0,r5,#31
0000f8 0ec0 LSRS r0,r0,#27
0000fa 3080 ADDS r0,r0,#0x80
0000fc 106a ASRS r2,r5,#1
0000fe 00d2 LSLS r2,r2,#3
000100 1880 ADDS r0,r0,r2
000102 0601 LSLS r1,r0,#24
000104 0e09 LSRS r1,r1,#24
000106 0020 MOVS r0,r4
000108 f7ff fffe BL _ZN6LcdObj14LcdSendCommandEc
;;;545 for (j = 0; j < 16; j ++) {//每行8个汉字16个字符
00010c 2600 MOVS r6,#0
00010e e009 B |L1.292|
;;;546 LcdSendData(LcdBuffer[i][j]);//刷新显示字符
|L1.272|
000110 012a LSLS r2,r5,#4
000112 1de0 ADDS r0,r4,#7
000114 1810 ADDS r0,r2,r0
000116 5d81 LDRB r1,[r0,r6]
000118 0020 MOVS r0,r4
00011a f7ff fffe BL _ZN6LcdObj11LcdSendDataEc
00011e 1c70 ADDS r0,r6,#1 ;545
000120 0606 LSLS r6,r0,#24 ;545
000122 0e36 LSRS r6,r6,#24 ;545
|L1.292|
000124 2e10 CMP r6,#0x10 ;545
000126 dbf3 BLT |L1.272| ;545
;;;547 }
;;;548 LcdRowWriteEnable[i] = 0;//过后不允许此行刷新汉字显示
000128 2100 MOVS r1,#0
00012a 1ce0 ADDS r0,r4,#3
00012c 5541 STRB r1,[r0,r5]
|L1.302|
00012e 1c68 ADDS r0,r5,#1 ;542
000130 0605 LSLS r5,r0,#24 ;542
000132 0e2d LSRS r5,r5,#24 ;542
|L1.308|
000134 2d04 CMP r5,#4 ;542
000136 dbda BLT |L1.238| ;542
;;;549 }
;;;550 }
;;;551 }
000138 bc70 POP {r4-r6}
00013a bc08 POP {r3}
00013c 4718 BX r3
ENDP
_ZN6LcdObj10LcdDisplayEPKc PROC ; LcdObj::LcdDisplay(const char*)
;;;554 void LcdObj::LcdDisplay(const char * string)
;;;555 {
00013e b430 PUSH {r4,r5}
;;;556 while(*string) {
000140 e009 B |L1.342|
;;;557 LcdBuffer[LcdRow][LcdCol ++] = *string ++;
|L1.322|
000142 780b LDRB r3,[r1,#0]
000144 7844 LDRB r4,[r0,#1]
000146 1c62 ADDS r2,r4,#1
000148 7042 STRB r2,[r0,#1]
00014a 7802 LDRB r2,[r0,#0]
00014c 0115 LSLS r5,r2,#4
00014e 1dc2 ADDS r2,r0,#7
000150 18aa ADDS r2,r5,r2
000152 5513 STRB r3,[r2,r4]
000154 1c49 ADDS r1,r1,#1
|L1.342|
000156 780a LDRB r2,[r1,#0]
000158 2a00 CMP r2,#0
00015a d1f2 BNE |L1.322|
;;;558 }
;;;559 }
00015c bc30 POP {r4,r5}
00015e 4770 BX lr
ENDP
_ZN6LcdObj16SetLcdDisplayPosEhh PROC ; LcdObj::SetLcdDisplayPos(unsigned char, unsigned char)
;;;515 void LcdObj::SetLcdDisplayPos(unsigned char row, unsigned char col)
;;;516 {
000160 b410 PUSH {r4}
;;;517 row &= 0x03;//4行汉字
000162 0789 LSLS r1,r1,#30
000164 0f89 LSRS r1,r1,#30
;;;518 col &= 0x0f;//每行8个汉字16个字符
000166 0712 LSLS r2,r2,#28
000168 0f12 LSRS r2,r2,#28
;;;519 LcdRow = row;
00016a 7001 STRB r1,[r0,#0]
;;;520 LcdCol = col;
00016c 7042 STRB r2,[r0,#1]
;;;521 LcdRowWriteEnable[row] = 1;//允许此行刷新汉字显示
00016e 2401 MOVS r4,#1
000170 1cc3 ADDS r3,r0,#3
000172 545c STRB r4,[r3,r1]
;;;522 }
000174 bc10 POP {r4}
000176 4770 BX lr
ENDP
_Z8BeepTaskv PROC ; BeepTask()
;;;643
;;;644 void BeepTask (void) __task {
000178 b570 PUSH {r4-r6,lr}
;;;645 OS_RESULT result;
;;;646 unsigned int i;
;;;647 for (;;) {
00017a 46c0 MOV r8,r8
;;;648 result = os_evt_wait_or(0xffff, 0xffff);//等待BeepTask任务事件发生
|L1.380|
00017c 2200 MOVS r2,#0
00017e 4994 LDR r1,|L1.976|
000180 0008 MOVS r0,r1
000182 f7ff fffe BL os_evt_wait
000186 0004 MOVS r4,r0
;;;649 if(result == OS_R_EVT) {
000188 2c02 CMP r4,#2
00018a d1f7 BNE |L1.380|
;;;650 i = os_evt_get();
00018c f7ff fffe BL os_evt_get
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -