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

📄 gui.txt

📁 工厂环境污染控制数据采集器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1284|
000504  e3a00001          MOV      r0,#1                 ;1740
000508  e5c70000          STRB     r0,[r7,#0]            ;1740
                  |L1.1292|
00050c  e3a00001          MOV      r0,#1                 ;1742
000510  eaffffe9          B        |L1.1212|
;;;1744   
                          ENDP

                  GUI_HLine PROC
;;;1754   void  GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color) 
;;;1755   {
000514  e92d41f0          PUSH     {r4-r8,lr}
000518  e1a04000          MOV      r4,r0
00051c  e1a05001          MOV      r5,r1
000520  e1a06002          MOV      r6,r2
000524  e1a08003          MOV      r8,r3
;;;1756     uint8  bak;
;;;1757   
;;;1758     /* 对x0、x1大小进行排列,以便画图 */
;;;1759     if(x0>x1)         
000528  e1540006          CMP      r4,r6
00052c  da000002          BLE      |L1.1340|
;;;1760       {  
;;;1761         bak = x1;
000530  e1a07006          MOV      r7,r6
;;;1762         x1 = x0;
000534  e1a06004          MOV      r6,r4
;;;1763         x0 = bak;
000538  e1a04007          MOV      r4,r7
                  |L1.1340|
;;;1764       }
;;;1765      
;;;1766      do
00053c  e1a00000          MOV      r0,r0
                  |L1.1344|
;;;1767       {  
;;;1768         GUI_Point(x0, y0, color);               // 逐点显示,描出垂直线
000540  e1a02008          MOV      r2,r8
000544  e1a01005          MOV      r1,r5
000548  e1a00004          MOV      r0,r4
00054c  ebfffffe          BL       GUI_Point
;;;1769         x0++;
000550  e2840001          ADD      r0,r4,#1
000554  e20040ff          AND      r4,r0,#0xff
;;;1770       }while(x1>=x0);
000558  e1560004          CMP      r6,r4
00055c  aafffff7          BGE      |L1.1344|
;;;1771   }
000560  e8bd41f0          POP      {r4-r8,lr}
000564  e12fff1e          BX       lr
;;;1772   
                          ENDP

                  GUI_RLine PROC
;;;1782   void  GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color) 
;;;1783   {
000568  e92d43f0          PUSH     {r4-r9,lr}
00056c  e1a04000          MOV      r4,r0
000570  e1a05001          MOV      r5,r1
000574  e1a06002          MOV      r6,r2
000578  e1a08003          MOV      r8,r3
;;;1784     uint8  bak;
;;;1785     uint8  data;
;;;1786     
;;;1787     /* 对y0、y1大小进行排列,以便画图 */
;;;1788      if(y0>y1)   
00057c  e1550006          CMP      r5,r6
000580  da000002          BLE      |L1.1424|
;;;1789       {  
;;;1790         bak = y1;
000584  e1a07006          MOV      r7,r6
;;;1791         y1 = y0;
000588  e1a06005          MOV      r6,r5
;;;1792         y0 = bak;
00058c  e1a05007          MOV      r5,r7
                  |L1.1424|
;;;1793       }
;;;1794      
;;;1795      do
000590  e1a00000          MOV      r0,r0
                  |L1.1428|
;;;1796        {  
;;;1797          bak = LCM12864_ReadByte(x0,y0);          // 先读取当前点的字节数据
000594  e1a01005          MOV      r1,r5
000598  e1a00004          MOV      r0,r4
00059c  ebfffffe          BL       LCM12864_ReadByte
0005a0  e1a07000          MOV      r7,r0
;;;1798         
;;;1799          /* 进行'与'/'或'操作后,将正确的数据写回LCM
;;;1800             若y0和y1不是同一字节,则y0--当前字节结束,即(y0+8)&0x38,全写1,或者0。
;;;1801             若y0和y1是同一字节,则y0--y1,要全写1,或者0。
;;;1802             方法:dat=0xff,然后按y0清零dat低位,按y1清零高位。*/
;;;1803   
;;;1804          if((y0>>3) != (y1>>3))               // 竖直线是否跨越两个字节(或以上)
0005a4  e1a001c5          ASR      r0,r5,#3
0005a8  e15001c6          CMP      r0,r6,ASR #3
0005ac  0a000011          BEQ      |L1.1528|
;;;1805           {  
;;;1806             data = 0xFF << (y0&0x07);              // 清0低位
0005b0  e2050007          AND      r0,r5,#7
0005b4  e3a010ff          MOV      r1,#0xff
0005b8  e1a00011          LSL      r0,r1,r0
0005bc  e20090ff          AND      r9,r0,#0xff
;;;1807             if(color)     
0005c0  e3580000          CMP      r8,#0
0005c4  0a000001          BEQ      |L1.1488|
;;;1808              {  
;;;1809                data = bak | data;                  // 若color不为0,则显示
0005c8  e1899007          ORR      r9,r9,r7
0005cc  ea000002          B        |L1.1500|
                  |L1.1488|
;;;1810              }
;;;1811             else
;;;1812              {  
;;;1813                data = ~data;                   // 若color为0,则清除显示
0005d0  e1e00009          MVN      r0,r9
0005d4  e20090ff          AND      r9,r0,#0xff
;;;1814                data = bak & data;
0005d8  e0099007          AND      r9,r9,r7
                  |L1.1500|
;;;1815              }
;;;1816             LCM12864_WriteByte(x0,y0, data);
0005dc  e1a02009          MOV      r2,r9
0005e0  e1a01005          MOV      r1,r5
0005e4  e1a00004          MOV      r0,r4
0005e8  ebfffffe          BL       LCM12864_WriteByte
;;;1817             y0 = (y0+8)&0x38;
0005ec  e2850008          ADD      r0,r5,#8
0005f0  e2005038          AND      r5,r0,#0x38
0005f4  ea000013          B        |L1.1608|
                  |L1.1528|
;;;1818           }
;;;1819          else
;;;1820           {
;;;1821             data = 0xFF << (y0&0x07);
0005f8  e2050007          AND      r0,r5,#7
0005fc  e3a010ff          MOV      r1,#0xff
000600  e1a00011          LSL      r0,r1,r0
000604  e20090ff          AND      r9,r0,#0xff
;;;1822             data = data &  ( 0xFF >> (7-(y1&0x07)) );
000608  e2060007          AND      r0,r6,#7
00060c  e2600007          RSB      r0,r0,#7
000610  e0099051          AND      r9,r9,r1,ASR r0
;;;1823             if(color)     
000614  e3580000          CMP      r8,#0
000618  0a000001          BEQ      |L1.1572|
;;;1824              {  
;;;1825                data = bak | data;                  // 若color不为0,则显示
00061c  e1899007          ORR      r9,r9,r7
000620  ea000002          B        |L1.1584|
                  |L1.1572|
;;;1826              }
;;;1827            else
;;;1828              { 
;;;1829               data = ~data;                   // 若color为0,则清除显示
000624  e1e00009          MVN      r0,r9
000628  e20090ff          AND      r9,r0,#0xff
;;;1830               data = bak & data;
00062c  e0099007          AND      r9,r9,r7
                  |L1.1584|
;;;1831              }
;;;1832            LCM12864_WriteByte(x0,y0, data);
000630  e1a02009          MOV      r2,r9
000634  e1a01005          MOV      r1,r5
000638  e1a00004          MOV      r0,r4
00063c  ebfffffe          BL       LCM12864_WriteByte
                  |L1.1600|
;;;1833            return;
;;;1834           } 
;;;1835        }while(y1>=y0);
;;;1836   }
000640  e8bd43f0          POP      {r4-r9,lr}
000644  e12fff1e          BX       lr
                  |L1.1608|
000648  e1560005          CMP      r6,r5                 ;1835
00064c  aaffffd0          BGE      |L1.1428|
000650  eafffffa          B        |L1.1600|
;;;1837   
                          ENDP

                  display_char812 PROC
;;;1859   void display_char812(unsigned char x,unsigned char y,const unsigned char buf[])
;;;1860   {
000654  e92d4ff0          PUSH     {r4-r11,lr}
000658  e1a04000          MOV      r4,r0
00065c  e1a05001          MOV      r5,r1
000660  e1a06002          MOV      r6,r2
;;;1861     unsigned char i,j,var1;
;;;1862     unsigned char tmp_x,tmp_y;
;;;1863     
;;;1864     tmp_x=0;
000664  e3a0a000          MOV      r10,#0
;;;1865     tmp_y=0;
000668  e3a0b000          MOV      r11,#0
;;;1866     
;;;1867     for(i=0;i<12;)
00066c  e3a07000          MOV      r7,#0
000670  ea000020          B        |L1.1784|
                  |L1.1652|
;;;1868     {
;;;1869       var1=buf[i];
000674  e7d69007          LDRB     r9,[r6,r7]
;;;1870       for(j=0;j<8;j++)
000678  e3a08000          MOV      r8,#0
00067c  ea000016          B        |L1.1756|
                  |L1.1664|
;;;1871       {
;;;1872         if((var1&0x80)!=0)
000680  e3190080          TST      r9,#0x80
000684  0a000008          BEQ      |L1.1708|
;;;1873         {
;;;1874           GUI_Point(tmp_x+x,tmp_y+y,1);
000688  e08b2005          ADD      r2,r11,r5
00068c  e20210ff          AND      r1,r2,#0xff
000690  e08a2004          ADD      r2,r10,r4
000694  e20200ff          AND      r0,r2,#0xff
000698  e3a02001          MOV      r2,#1
00069c  ebfffffe          BL       GUI_Point
;;;1875           tmp_x++;
0006a0  e28a0001          ADD      r0,r10,#1
0006a4  e200a0ff          AND      r10,r0,#0xff
0006a8  ea000007          B        |L1.1740|
                  |L1.1708|
;;;1876         }
;;;1877         else
;;;1878         {
;;;1879   	  	GUI_Point(tmp_x+x,tmp_y+y,0);
0006ac  e08b2005          ADD      r2,r11,r5
0006b0  e20210ff          AND      r1,r2,#0xff
0006b4  e08a2004          ADD      r2,r10,r4
0006b8  e20200ff          AND      r0,r2,#0xff
0006bc  e3a02000          MOV      r2,#0
0006c0  ebfffffe          BL       GUI_Point
;;;1880           tmp_x++;
0006c4  e28a0001          ADD      r0,r10,#1
0006c8  e200a0ff          AND      r10,r0,#0xff
                  |L1.1740|
;;;1881         }
;;;1882         var1<<=1;
0006cc  e1a00c89          LSL      r0,r9,#25
0006d0  e1a09c20          LSR      r9,r0,#24
0006d4  e2880001          ADD      r0,r8,#1              ;1870
0006d8  e20080ff          AND      r8,r0,#0xff           ;1870
                  |L1.1756|
0006dc  e3580008          CMP      r8,#8                 ;1870
0006e0  baffffe6          BLT      |L1.1664|
;;;1883       }
;;;1884       
;;;1885       //////    
;;;1886       i++;
0006e4  e2870001          ADD      r0,r7,#1
0006e8  e20070ff          AND      r7,r0,#0xff
;;;1887       
;;;1888       tmp_y++;
0006ec  e28b0001          ADD      r0,r11,#1
0006f0  e200b0ff          AND      r11,r0,#0xff
;;;1889       tmp_x=0;
0006f4  e3a0a000          MOV      r10,#0
                  |L1.1784|
0006f8  e357000c          CMP      r7,#0xc               ;1867
0006fc  baffffdc          BLT      |L1.1652|
;;;1890       
;;;1891     }
;;;1892   
;;;1893   }
000700  e8bd4ff0          POP      {r4-r11,lr}
000704  e12fff1e          BX       lr
;;;1894   
                          ENDP

                  show_drawbox PROC
;;;1841   void show_drawbox(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
;;;1842   {
000708  e92d41f0          PUSH     {r4-r8,lr}
00070c  e1a04000          MOV      r4,r0
000710  e1a05001          MOV      r5,r1
000714  e1a06002          MOV      r6,r2
000718  e1a07003          MOV      r7,r3
;;;1843   	unsigned int i;
;;;1844   
;;;1845   	for (i = 0; i <= (x2 - x1) / 8; i++)
00071c  e3a08000          MOV      r8,#0
000720  ea00000b          B        |L1.1876|
                  |L1.1828|
;;;1846   	{
;;;1847   		display_char812(i * 8, y1, fuhao_812_xing);
000724  e20510ff          AND      r1,r5,#0xff
000728  e1a02d88          LSL      r2,r8,#27
00072c  e1a00c22          LSR      r0,r2,#24
000730  e59f28dc          LDR      r2,|L1.4116|
000734  ebfffffe          BL       display_char812
;;;1848   		display_char812(i * 8, y2 - 4, fuhao_812_xing);
000738  e2472004          SUB      r2,r7,#4
00073c  e20210ff          AND      r1,r2,#0xff
000740  e1a02d88          LSL      r2,r8,#27
000744  e1a00c22          LSR      r0,r2,#24
000748  e59f28c4          LDR      r2,|L1.4116|
00074c  ebfffffe          BL       display_char812
000750  e2888001          ADD      r8,r8,#1              ;1845
                  |L1.1876|
000754  e0460004          SUB      r0,r6,r4              ;1845
000758  e15801a0          CMP      r8,r0,LSR #3          ;1845
00075c  9afffff0          BLS      |L1.1828|
;;;1849   	}
;;;1850   
;;;1851   	for (i = 0; i < (y2 - y1) / 12 ; i++)
000760  e3a08000          MOV      r8,#0
000764  ea00000c          B        |L1.1948|
                  |L1.1896|
;;;1852   	{
;;;1853   		display_char812(x1, 12 * i, fuhao_812_xing);
000768  e3a0200c          MOV      r2,#0xc
00076c  e0020298          MUL      r2,r8,r2
000770  e20210ff          AND      r1,r2,#0xff
000774  e20400ff          AND      r0,r4,#0xff
000778  e59f2894          LDR      r2,|L1.4116|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -