⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.txt

📁 工厂环境污染控制数据采集器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -