; 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)
;
评论0