📄 gui.txt
字号:
|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 + -