📄 lcdsd1335.lst
字号:
17C8 855C LDD R21,Y+12
17C9 C006 RJMP 0x17D0
17CA 82A8 STD Y+0,R10
17CB 019A MOVW R18,R20
17CC 0187 MOVW R16,R14
17CD DF6B RCALL _lcd_pixel
17CE 5F4F SUBI R20,0xFF
17CF 4F5F SBCI R21,0xFF
17D0 16C4 CP R12,R20
17D1 06D5 CPC R13,R21
17D2 F7BC BGE 0x17CA
17D3 9621 ADIW R28,1
17D4 940E 1ACE CALL pop_xgsetF0FC
17D6 9622 ADIW R28,2
17D7 9508 RET
_lcd_degree_line:
ty --> R20
tx --> R14
fy --> R12
fx --> R10
show --> Y,+23
outer_radius --> R22
inner_radius --> R12
degree --> R20
y --> Y,+15
x --> R14
17D8 933A ST R19,-Y
17D9 932A ST R18,-Y
17DA 940E 1AD9 CALL push_xgsetF0FC
17DC 0178 MOVW R14,R16
17DD 9725 SBIW R28,5
17DE 8949 LDD R20,Y+17
17DF 895A LDD R21,Y+18
17E0 88CB LDD R12,Y+19
17E1 88DC LDD R13,Y+20
17E2 896D LDD R22,Y+21
17E3 897E LDD R23,Y+22
(0298) }
(0299)
(0300)
(0301) /***********************************************************************
(0302) Draws a line from x,y at given degree from inner_radius to outer_radius.
(0303) Set show to 1 to draw pixel, set to 0 to hide pixel.
(0304) ***********************************************************************/
(0305) void lcd_degree_line(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
(0306) {
(0307) int fx,fy,tx,ty;
(0308) fx = x + fround(inner_radius * sin(degree * 3.14 / 180));
17E4 E900 LDI R16,0x90
17E5 E010 LDI R17,0
17E6 940E 1AAA CALL elpm32
17E8 0118 MOVW R2,R16
17E9 0129 MOVW R4,R18
17EA 018A MOVW R16,R20
17EB 940E 1BF9 CALL int2fp
17ED 933A ST R19,-Y
17EE 932A ST R18,-Y
17EF 931A ST R17,-Y
17F0 930A ST R16,-Y
17F1 0181 MOVW R16,R2
17F2 0192 MOVW R18,R4
17F3 940E 1DFB CALL fpmule2
17F5 0118 MOVW R2,R16
17F6 0129 MOVW R4,R18
17F7 E80C LDI R16,0x8C
17F8 E010 LDI R17,0
17F9 940E 1AAA CALL elpm32
17FB 933A ST R19,-Y
17FC 932A ST R18,-Y
17FD 931A ST R17,-Y
17FE 930A ST R16,-Y
17FF 0181 MOVW R16,R2
1800 0192 MOVW R18,R4
1801 940E 1C20 CALL fpdiv2
1803 940E 1FF2 CALL _sinf
1805 0118 MOVW R2,R16
1806 0129 MOVW R4,R18
1807 0186 MOVW R16,R12
1808 940E 1BF9 CALL int2fp
180A 925A ST R5,-Y
180B 924A ST R4,-Y
180C 923A ST R3,-Y
180D 922A ST R2,-Y
180E 940E 1DFB CALL fpmule2
1810 940E 201D CALL _froundf
1812 0118 MOVW R2,R16
1813 0129 MOVW R4,R18
1814 0187 MOVW R16,R14
1815 940E 1BF9 CALL int2fp
1817 925A ST R5,-Y
1818 924A ST R4,-Y
1819 923A ST R3,-Y
181A 922A ST R2,-Y
181B 940E 1B8F CALL fpadd2
181D 940E 1BCB CALL fpint
181F 0158 MOVW R10,R16
(0309) fy = y - fround(inner_radius * cos(degree * 3.14 / 180));
1820 E900 LDI R16,0x90
1821 E010 LDI R17,0
1822 940E 1AAA CALL elpm32
1824 0118 MOVW R2,R16
1825 0129 MOVW R4,R18
1826 018A MOVW R16,R20
1827 940E 1BF9 CALL int2fp
1829 933A ST R19,-Y
182A 932A ST R18,-Y
182B 931A ST R17,-Y
182C 930A ST R16,-Y
182D 0181 MOVW R16,R2
182E 0192 MOVW R18,R4
182F 940E 1DFB CALL fpmule2
1831 0118 MOVW R2,R16
1832 0129 MOVW R4,R18
1833 E80C LDI R16,0x8C
1834 E010 LDI R17,0
1835 940E 1AAA CALL elpm32
1837 933A ST R19,-Y
1838 932A ST R18,-Y
1839 931A ST R17,-Y
183A 930A ST R16,-Y
183B 0181 MOVW R16,R2
183C 0192 MOVW R18,R4
183D 940E 1C20 CALL fpdiv2
183F 940E 1E2A CALL _cosf
1841 0118 MOVW R2,R16
1842 0129 MOVW R4,R18
1843 0186 MOVW R16,R12
1844 940E 1BF9 CALL int2fp
1846 925A ST R5,-Y
1847 924A ST R4,-Y
1848 923A ST R3,-Y
1849 922A ST R2,-Y
184A 940E 1DFB CALL fpmule2
184C 940E 201D CALL _froundf
184E 0118 MOVW R2,R16
184F 0129 MOVW R4,R18
1850 850F LDD R16,Y+15
1851 8918 LDD R17,Y+16
1852 940E 1BF9 CALL int2fp
1854 925A ST R5,-Y
1855 924A ST R4,-Y
1856 923A ST R3,-Y
1857 922A ST R2,-Y
1858 940E 1BB2 CALL fpsub2
185A 940E 1BCB CALL fpint
185C 0168 MOVW R12,R16
(0310) tx = x + fround(outer_radius * sin(degree * 3.14 / 180));
185D E900 LDI R16,0x90
185E E010 LDI R17,0
185F 940E 1AAA CALL elpm32
1861 0118 MOVW R2,R16
1862 0129 MOVW R4,R18
1863 018A MOVW R16,R20
1864 940E 1BF9 CALL int2fp
1866 933A ST R19,-Y
1867 932A ST R18,-Y
1868 931A ST R17,-Y
1869 930A ST R16,-Y
186A 0181 MOVW R16,R2
186B 0192 MOVW R18,R4
186C 940E 1DFB CALL fpmule2
186E 0118 MOVW R2,R16
186F 0129 MOVW R4,R18
1870 E80C LDI R16,0x8C
1871 E010 LDI R17,0
1872 940E 1AAA CALL elpm32
1874 933A ST R19,-Y
1875 932A ST R18,-Y
1876 931A ST R17,-Y
1877 930A ST R16,-Y
1878 0181 MOVW R16,R2
1879 0192 MOVW R18,R4
187A 940E 1C20 CALL fpdiv2
187C 940E 1FF2 CALL _sinf
187E 0118 MOVW R2,R16
187F 0129 MOVW R4,R18
1880 018B MOVW R16,R22
1881 940E 1BF9 CALL int2fp
1883 925A ST R5,-Y
1884 924A ST R4,-Y
1885 923A ST R3,-Y
1886 922A ST R2,-Y
1887 940E 1DFB CALL fpmule2
1889 940E 201D CALL _froundf
188B 0118 MOVW R2,R16
188C 0129 MOVW R4,R18
188D 0187 MOVW R16,R14
188E 940E 1BF9 CALL int2fp
1890 925A ST R5,-Y
1891 924A ST R4,-Y
1892 923A ST R3,-Y
1893 922A ST R2,-Y
1894 940E 1B8F CALL fpadd2
1896 940E 1BCB CALL fpint
1898 0178 MOVW R14,R16
(0311) ty = y - fround(outer_radius * cos(degree * 3.14 / 180));
1899 E900 LDI R16,0x90
189A E010 LDI R17,0
189B 940E 1AAA CALL elpm32
189D 0118 MOVW R2,R16
189E 0129 MOVW R4,R18
189F 018A MOVW R16,R20
18A0 940E 1BF9 CALL int2fp
18A2 933A ST R19,-Y
18A3 932A ST R18,-Y
18A4 931A ST R17,-Y
18A5 930A ST R16,-Y
18A6 0181 MOVW R16,R2
18A7 0192 MOVW R18,R4
18A8 940E 1DFB CALL fpmule2
18AA 0118 MOVW R2,R16
18AB 0129 MOVW R4,R18
18AC E80C LDI R16,0x8C
18AD E010 LDI R17,0
18AE 940E 1AAA CALL elpm32
18B0 933A ST R19,-Y
18B1 932A ST R18,-Y
18B2 931A ST R17,-Y
18B3 930A ST R16,-Y
18B4 0181 MOVW R16,R2
18B5 0192 MOVW R18,R4
18B6 940E 1C20 CALL fpdiv2
18B8 940E 1E2A CALL _cosf
18BA 0118 MOVW R2,R16
18BB 0129 MOVW R4,R18
18BC 018B MOVW R16,R22
18BD 940E 1BF9 CALL int2fp
18BF 925A ST R5,-Y
18C0 924A ST R4,-Y
18C1 923A ST R3,-Y
18C2 922A ST R2,-Y
18C3 940E 1DFB CALL fpmule2
18C5 940E 201D CALL _froundf
18C7 0118 MOVW R2,R16
18C8 0129 MOVW R4,R18
18C9 850F LDD R16,Y+15
18CA 8918 LDD R17,Y+16
18CB 940E 1BF9 CALL int2fp
18CD 925A ST R5,-Y
18CE 924A ST R4,-Y
18CF 923A ST R3,-Y
18D0 922A ST R2,-Y
18D1 940E 1BB2 CALL fpsub2
18D3 940E 1BCB CALL fpint
18D5 01A8 MOVW R20,R16
(0312) lcd_line(fx,fy,tx,ty,show);
18D6 880F LDD R0,Y+23
18D7 820C STD Y+4,R0
18D8 835B STD Y+3,R21
18D9 834A STD Y+2,R20
18DA 82F9 STD Y+1,R15
18DB 82E8 STD Y+0,R14
18DC 0196 MOVW R18,R12
18DD 0185 MOVW R16,R10
18DE D093 RCALL _lcd_line
18DF 9625 ADIW R28,5
18E0 940E 1ACE CALL pop_xgsetF0FC
18E2 9622 ADIW R28,2
18E3 9508 RET
_lcd_circle:
p --> R12
yc --> R22
xc --> R20
show --> R10
radius --> R12
y --> Y,+13
x --> Y,+11
18E4 940E 1A64 CALL push_arg4
18E6 940E 1AD9 CALL push_xgsetF0FC
18E8 9721 SBIW R28,1
18E9 84CF LDD R12,Y+15
18EA 88D8 LDD R13,Y+16
18EB 88A9 LDD R10,Y+17
(0313) }
(0314)
(0315)
(0316) /***********************************************************************
(0317) Draws a circle with center at x,y with given radius.
(0318) Set show to 1 to draw pixel, set to 0 to hide pixel.
(0319) ***********************************************************************/
(0320) void lcd_circle(int x, int y, int radius, unsigned char show)
(0321) {
(0322) int xc = 0;
18EC 2744 CLR R20
18ED 2755 CLR R21
(0323) int yc = radius;
18EE 01B6 MOVW R22,R12
(0324) int p = 3 - (radius<<1);
18EF 0116 MOVW R2,R12
18F0 0C22 LSL R2
18F1 1C33 ROL R3
18F2 E083 LDI R24,3
18F3 E090 LDI R25,0
18F4 016C MOVW R12,R24
18F5 18C2 SUB R12,R2
18F6 08D3 SBC R13,R3
18F7 C071 RJMP 0x1969
(0325) while (xc <= yc)
(0326) {
(0327) lcd_pixel(x + xc, y + yc, show);
18F8 82A8 STD Y+0,R10
18F9 852D LDD R18,Y+13
18FA 853E LDD R19,Y+14
18FB 0F26 ADD R18,R22
18FC 1F37 ADC R19,R23
18FD 850B LDD R16,Y+11
18FE 851C LDD R17,Y+12
18FF 0F04 ADD R16,R20
1900 1F15 ADC R17,R21
1901 DE37 RCALL _lcd_pixel
(0328) lcd_pixel(x + xc, y - yc, show);
1902 82A8 STD Y+0,R10
1903 852D LDD R18,Y+13
1904 853E LDD R19,Y+14
1905 1B26 SUB R18,R22
1906 0B37 SBC R19,R23
1907 850B LDD R16,Y+11
1908 851C LDD R17,Y+12
1909 0F04 ADD R16,R20
190A 1F15 ADC R17,R21
190B DE2D RCALL _lcd_pixel
(0329) lcd_pixel(x - xc, y + yc, show);
190C 82A8 STD Y+0,R10
190D 852D LDD R18,Y+13
190E 853E LDD R19,Y+14
190F 0F26 ADD R18,R22
1910 1F37 ADC R19,R23
1911 850B LDD R16,Y+11
1912 851C LDD R17,Y+12
1913 1B04 SUB R16,R20
1914 0B15 SBC R17,R21
1915 DE23 RCALL _lcd_pixel
(0330) lcd_pixel(x - xc, y - yc, show);
1916 82A8 STD Y+0,R10
1917 852D LDD R18,Y+13
1918 853E LDD R19,Y+14
1919 1B26 SUB R18,R22
191A 0B37 SBC R19,R23
191B 850B LDD R16,Y+11
191C 851C LDD R17,Y+12
191D 1B04 SUB R16,R20
191E 0B15 SBC R17,R21
191F DE19 RCALL _lcd_pixel
(0331) lcd_pixel(x + yc, y + xc, show);
1920 82A8 STD Y+0,R10
1921 852D LDD R18,Y+13
1922 853E LDD R19,Y+14
1923 0F24 ADD R18,R20
1924 1F35 ADC R19,R21
1925 850B LDD R16,Y+11
1926 851C LDD R17,Y+12
1927 0F06 ADD R16,R22
1928 1F17 ADC R17,R23
1929 DE0F RCALL _lcd_pixel
(0332) lcd_pixel(x + yc, y - xc, show);
192A 82A8 STD Y+0,R10
192B 852D LDD R18,Y+13
192C 853E LDD R19,Y+14
192D 1B24 SUB R18,R20
192E 0B35 SBC R19,R21
192F 850B LDD R16,Y+11
1930 851C LDD R17,Y+12
1931 0F06 ADD R16,R22
1932 1F17 ADC R17,R23
1933 DE05 RCALL _lcd_pixel
(0333) lcd_pixel(x - yc, y + xc, show);
1934 82A8 STD Y+0,R10
1935 852D LDD R18,Y+13
1936 853E LDD R19,Y+14
1937 0F24 ADD R18,R20
1938 1F35 ADC R19,R21
1939 850B LDD R16,Y+11
193A 851C LDD R17,Y+12
193B 1B06 SUB R16,R22
193C 0B17 SBC R17,R23
193D DDFB RCALL _lcd_pixel
(0334) lcd_pixel(x - yc, y - xc, show);
193E 82A8 STD Y+0,R10
193F 852D LDD R18,Y+13
1940 853E LDD R19,Y+14
1941 1B24 SUB R18,R20
1942 0B35 SBC R19,R21
1943 850B LDD R16,Y+11
1944 851C LDD R17,Y+12
1945 1B06 SUB R16,R22
1946 0B17 SBC R17,R23
1947 DDF1 RCALL _lcd_pixel
(0335) if (p < 0)
1948 01C6 MOVW R24,R12
1949 3080 CPI R24,0
194A E0E0 LDI R30,0
194B 079E CPC R25,R30
194C F464 BGE 0x1959
(0336) p += (xc++ << 2) + 6;
194D 011A MOVW R2,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -