📄 gui.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 939] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\obj\gui.o --depend=.\obj\gui.d --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips --omf_browse=.\obj\gui.crf gui.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
LCM12864_Delay PROC
;;;1420 //for(i=0; i<100; i++); //正常
;;;1421 for(i=0; i<2; i++); //测试
000000 e3a00000 MOV r0,#0
000004 ea000001 B |L1.16|
|L1.8|
000008 e2801001 ADD r1,r0,#1
00000c e20100ff AND r0,r1,#0xff
|L1.16|
000010 e3500002 CMP r0,#2
000014 bafffffb BLT |L1.8|
;;;1422 //for(i=0; i<15; i++); //测试
;;;1423 }
000018 e12fff1e BX lr
;;;1424
ENDP
OutData PROC
;;;1435
;;;1436 var1=dat;
00001c e1a02000 MOV r2,r0
;;;1437
;;;1438 /*if((dat & 0x01)==1) H_LCM12864_D0(); else L_LCM12864_D0();
;;;1439 if((dat & 0x02)==2) H_LCM12864_D1(); else L_LCM12864_D1();
;;;1440 if((dat & 0x04)==4) H_LCM12864_D2(); else L_LCM12864_D2();
;;;1441 if((dat & 0x08)==8) H_LCM12864_D3(); else L_LCM12864_D3();
;;;1442 if((dat & 0x10)==16) H_LCM12864_D4(); else L_LCM12864_D4();
;;;1443 if((dat & 0x20)==32) H_LCM12864_D5(); else L_LCM12864_D5();
;;;1444 if((dat & 0x40)==64) H_LCM12864_D6(); else L_LCM12864_D6();
;;;1445 if((dat & 0x80)==128) H_LCM12864_D7(); else L_LCM12864_D7();
;;;1446 */
;;;1447
;;;1448 /////////FOR HC595 OUTPUT
;;;1449 L_HC595_STCP();
000020 e3a03602 MOV r3,#0x200000
000024 e59fcfd4 LDR r12,|L1.4096|
000028 e58c301c STR r3,[r12,#0x1c]
;;;1450 for(i=0;i<8;i++)
00002c e3a01000 MOV r1,#0
000030 ea000011 B |L1.124|
|L1.52|
;;;1451 {
;;;1452 if((dat&0x80)==0)
000034 e3100080 TST r0,#0x80
000038 1a000003 BNE |L1.76|
;;;1453 {
;;;1454 L_HC595_DS();
00003c e3a03601 MOV r3,#0x100000
000040 e59fcfb8 LDR r12,|L1.4096|
000044 e58c301c STR r3,[r12,#0x1c]
000048 ea000002 B |L1.88|
|L1.76|
;;;1455 }
;;;1456 else
;;;1457 {
;;;1458 H_HC595_DS();
00004c e3a03601 MOV r3,#0x100000
000050 e59fcfa8 LDR r12,|L1.4096|
000054 e58c3014 STR r3,[r12,#0x14]
|L1.88|
;;;1459 }
;;;1460 H_HC595_SHCP();
000058 e3a03501 MOV r3,#0x400000
00005c e59fcf9c LDR r12,|L1.4096|
000060 e58c3014 STR r3,[r12,#0x14]
;;;1461 dat<<=1;
000064 e1a03c80 LSL r3,r0,#25
000068 e1a00c23 LSR r0,r3,#24
;;;1462 L_HC595_SHCP();
00006c e3a03501 MOV r3,#0x400000
000070 e58c301c STR r3,[r12,#0x1c]
000074 e2813001 ADD r3,r1,#1 ;1450
000078 e20310ff AND r1,r3,#0xff ;1450
|L1.124|
00007c e3510008 CMP r1,#8 ;1450
000080 baffffeb BLT |L1.52|
;;;1463 }
;;;1464 H_HC595_STCP();
000084 e3a03602 MOV r3,#0x200000
000088 e59fcf70 LDR r12,|L1.4096|
00008c e58c3014 STR r3,[r12,#0x14]
;;;1465 //delay(1);
;;;1466 L_HC595_DS();
000090 e3a03601 MOV r3,#0x100000
000094 e58c301c STR r3,[r12,#0x1c]
;;;1467 L_HC595_STCP();
000098 e3a03602 MOV r3,#0x200000
00009c e58c301c STR r3,[r12,#0x1c]
;;;1468
;;;1469 }
0000a0 e12fff1e BX lr
;;;1470
ENDP
LCM12864_WriteCMD PROC
;;;1477 void LCM12864_WriteCMD(uint8 command)
;;;1478 {
0000a4 e92d4010 PUSH {r4,lr}
0000a8 e1a04000 MOV r4,r0
;;;1479
;;;1480 L_LCM12864_E(); // 将E置低
0000ac e3a00c01 MOV r0,#0x100
0000b0 e59f1f4c LDR r1,|L1.4100|
0000b4 e581005c STR r0,[r1,#0x5c]
;;;1481 L_LCM12864_RS(); // RS=0,表示发送命令
0000b8 e3a00402 MOV r0,#0x2000000
0000bc e59f1f3c LDR r1,|L1.4096|
0000c0 e581000c STR r0,[r1,#0xc]
;;;1482 OutData(command);
0000c4 e1a00004 MOV r0,r4
0000c8 ebfffffe BL OutData
;;;1483 LCM12864_Delay();
0000cc ebfffffe BL LCM12864_Delay
;;;1484 H_LCM12864_E();
0000d0 e3a00c01 MOV r0,#0x100
0000d4 e59f1f28 LDR r1,|L1.4100|
0000d8 e5810058 STR r0,[r1,#0x58]
;;;1485 LCM12864_Delay();
0000dc ebfffffe BL LCM12864_Delay
;;;1486 L_LCM12864_E();
0000e0 e3a00c01 MOV r0,#0x100
0000e4 e59f1f18 LDR r1,|L1.4100|
0000e8 e581005c STR r0,[r1,#0x5c]
;;;1487 LCM12864_Delay();
0000ec ebfffffe BL LCM12864_Delay
;;;1488
;;;1489 }
0000f0 e8bd4010 POP {r4,lr}
0000f4 e12fff1e BX lr
;;;1490
ENDP
LCM12864_WritEDAta PROC
;;;1497 void LCM12864_WritEDAta(uint8 data)
;;;1498 {
0000f8 e92d4010 PUSH {r4,lr}
0000fc e1a04000 MOV r4,r0
;;;1499
;;;1500 L_LCM12864_E(); // 将E置低
000100 e3a00c01 MOV r0,#0x100
000104 e59f1ef8 LDR r1,|L1.4100|
000108 e581005c STR r0,[r1,#0x5c]
;;;1501 H_LCM12864_RS(); // RS=1,表示发送数据
00010c e3a00402 MOV r0,#0x2000000
000110 e59f1ee8 LDR r1,|L1.4096|
000114 e5810004 STR r0,[r1,#4]
;;;1502 OutData(data);
000118 e1a00004 MOV r0,r4
00011c ebfffffe BL OutData
;;;1503 LCM12864_Delay();
000120 ebfffffe BL LCM12864_Delay
;;;1504 H_LCM12864_E();
000124 e3a00c01 MOV r0,#0x100
000128 e59f1ed4 LDR r1,|L1.4100|
00012c e5810058 STR r0,[r1,#0x58]
;;;1505 LCM12864_Delay();
000130 ebfffffe BL LCM12864_Delay
;;;1506 L_LCM12864_E();
000134 e3a00c01 MOV r0,#0x100
000138 e59f1ec4 LDR r1,|L1.4100|
00013c e581005c STR r0,[r1,#0x5c]
;;;1507 LCM12864_Delay();
000140 ebfffffe BL LCM12864_Delay
;;;1508
;;;1509 }
000144 e8bd4010 POP {r4,lr}
000148 e12fff1e BX lr
;;;1510
ENDP
LCM12864_WriteByte PROC
;;;1519 void LCM12864_WriteByte(uint8 x, uint8 y, uint8 data)
;;;1520 {
00014c e92d4070 PUSH {r4-r6,lr}
000150 e1a04000 MOV r4,r0
000154 e1a05001 MOV r5,r1
000158 e1a06002 MOV r6,r2
;;;1521 /* 参数过滤 */
;;;1522 x = x&0xff; //7f
00015c e1a00000 MOV r0,r0
;;;1523 y = y&0x3f;
000160 e205503f AND r5,r5,#0x3f
;;;1524
;;;1525 H_LCM12864_CSA();
000164 e3a00301 MOV r0,#0x4000000
000168 e59f1e90 LDR r1,|L1.4096|
00016c e5810004 STR r0,[r1,#4]
;;;1526 H_LCM12864_CSB();
000170 e3a00401 MOV r0,#0x1000000
000174 e5810004 STR r0,[r1,#4]
;;;1527 H_LCM12864_CSC(); // 不选中左半屏及右半屏
000178 e3a00102 MOV r0,#0x80000000
00017c e5810014 STR r0,[r1,#0x14]
;;;1528
;;;1529 y = y>>3; // 更新显示缓冲区
000180 e1a051c5 ASR r5,r5,#3
;;;1530 gui_disp_buf[y][x] = data;
000184 e0850085 ADD r0,r5,r5,LSL #1
000188 e59f1e78 LDR r1,|L1.4104|
00018c e0810300 ADD r0,r1,r0,LSL #6
000190 e7c06004 STRB r6,[r0,r4]
;;;1531
;;;1532 /* 更新LCD12864显示 */
;;;1533 if(x<64) // 判断选择左、右半屏
000194 e3540040 CMP r4,#0x40
000198 aa000003 BGE |L1.428|
;;;1534 {
;;;1535 L_LCM12864_CSA(); // CSA置高,控制前64个点
00019c e3a00301 MOV r0,#0x4000000
0001a0 e59f1e58 LDR r1,|L1.4096|
0001a4 e581000c STR r0,[r1,#0xc]
0001a8 ea00000c B |L1.480|
|L1.428|
;;;1536 }
;;;1537 else if(x<128)
0001ac e3540080 CMP r4,#0x80
0001b0 aa000005 BGE |L1.460|
;;;1538 {
;;;1539 L_LCM12864_CSB(); // CSB置高,控制中64个点
0001b4 e3a00401 MOV r0,#0x1000000
0001b8 e59f1e40 LDR r1,|L1.4096|
0001bc e581000c STR r0,[r1,#0xc]
;;;1540 x = x-64;
0001c0 e2440040 SUB r0,r4,#0x40
0001c4 e20040ff AND r4,r0,#0xff
0001c8 ea000004 B |L1.480|
|L1.460|
;;;1541 }
;;;1542 else
;;;1543 {
;;;1544 L_LCM12864_CSC(); // CSC置高,控制后64个点
0001cc e3a00102 MOV r0,#0x80000000
0001d0 e59f1e28 LDR r1,|L1.4096|
0001d4 e581001c STR r0,[r1,#0x1c]
;;;1545 x = x-128;
0001d8 e2440080 SUB r0,r4,#0x80
0001dc e20040ff AND r4,r0,#0xff
|L1.480|
;;;1546 }
;;;1547
;;;1548 LCM12864_WriteCMD(LCM12864_ADDRSTRY+x); // 设置当前列地址,即x坐标
0001e0 e2841040 ADD r1,r4,#0x40
0001e4 e20100ff AND r0,r1,#0xff
0001e8 ebfffffe BL LCM12864_WriteCMD
;;;1549 LCM12864_WriteCMD(LCM12864_ADDRSTRX+y); // 设置当前页地址,即y坐标
0001ec e28510b8 ADD r1,r5,#0xb8
0001f0 e20100ff AND r0,r1,#0xff
0001f4 ebfffffe BL LCM12864_WriteCMD
;;;1550 LCM12864_WritEDAta(data); // 向LCM12864写数据
0001f8 e1a00006 MOV r0,r6
0001fc ebfffffe BL LCM12864_WritEDAta
;;;1551 }
000200 e8bd4070 POP {r4-r6,lr}
000204 e12fff1e BX lr
;;;1552
ENDP
LCM12864_ReadByte PROC
;;;1560 uint8 LCM12864_ReadByte(uint8 x, uint8 y)
;;;1561 {
000208 e1a02000 MOV r2,r0
;;;1562 /* 参数过滤 */
;;;1563 x = x&0xff; //7f
00020c e1a00000 MOV r0,r0
;;;1564 y = y&0x3f;
000210 e201103f AND r1,r1,#0x3f
;;;1565
;;;1566 y = y>>3;
000214 e1a011c1 ASR r1,r1,#3
;;;1567 return (gui_disp_buf[y][x]); // 返回显示缓冲区指定点上的数据
000218 e0810081 ADD r0,r1,r1,LSL #1
00021c e59f3de4 LDR r3,|L1.4104|
000220 e0830300 ADD r0,r3,r0,LSL #6
000224 e7d00002 LDRB r0,[r0,r2]
;;;1568 }
000228 e12fff1e BX lr
;;;1569
ENDP
LCM12864_DispFill PROC
;;;1577 void LCM12864_DispFill(uint8 filldata)
;;;1578 {
00022c e92d4070 PUSH {r4-r6,lr}
000230 e1a04000 MOV r4,r0
;;;1579 uint8 x,y;
;;;1580
;;;1581 L_LCM12864_CSA(); L_LCM12864_CSB(); L_LCM12864_CSC(); // 选中左半屏及右半屏
000234 e3a00301 MOV r0,#0x4000000
000238 e59f1dc0 LDR r1,|L1.4096|
00023c e581000c STR r0,[r1,#0xc]
000240 e3a00401 MOV r0,#0x1000000
000244 e581000c STR r0,[r1,#0xc]
000248 e3a00102 MOV r0,#0x80000000
00024c e581001c STR r0,[r1,#0x1c]
;;;1582
;;;1583
;;;1584 LCM12864_WriteCMD(LCM12864_STARTROW); // 设置显示起始行为0
000250 e3a000c0 MOV r0,#0xc0
000254 ebfffffe BL LCM12864_WriteCMD
;;;1585
;;;1586 for(x=0; x<8; x++)
000258 e3a05000 MOV r5,#0
00025c ea00000e B |L1.668|
|L1.608|
;;;1587 {
;;;1588 LCM12864_WriteCMD(LCM12864_ADDRSTRX+x); // 设置页地址,即X
000260 e28510b8 ADD r1,r5,#0xb8
000264 e20100ff AND r0,r1,#0xff
000268 ebfffffe BL LCM12864_WriteCMD
;;;1589 LCM12864_WriteCMD(LCM12864_ADDRSTRY); // 设置列地址,即Y
00026c e3a00040 MOV r0,#0x40
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -