📄 lcd_240128.lst
字号:
0251 1B26 SUB R18,R22
0252 0B37 SBC R19,R23
0253 850B LDD R16,Y+11
0254 2711 CLR R17
0255 190A SUB R16,R10
0256 091B SBC R17,R11
0257 DECE RCALL _Lcd_Point
0258 82C8 STD Y+0,R12
0259 2D2E MOV R18,R14
025A 2733 CLR R19
(0360) Lcd_Point(x - yc, y + xc, draw);
025B 0D2A ADD R18,R10
025C 1D3B ADC R19,R11
025D 850B LDD R16,Y+11
025E 2711 CLR R17
025F 0F06 ADD R16,R22
0260 1F17 ADC R17,R23
0261 DEC4 RCALL _Lcd_Point
0262 82C8 STD Y+0,R12
0263 2D2E MOV R18,R14
0264 2733 CLR R19
(0361) Lcd_Point(x - yc, y - xc, draw);
0265 192A SUB R18,R10
0266 093B SBC R19,R11
0267 850B LDD R16,Y+11
0268 2711 CLR R17
0269 0F06 ADD R16,R22
026A 1F17 ADC R17,R23
026B DEBA RCALL _Lcd_Point
026C 82C8 STD Y+0,R12
026D 2D2E MOV R18,R14
026E 2733 CLR R19
(0362) if (p < 0)
026F 0D2A ADD R18,R10
0270 1D3B ADC R19,R11
0271 850B LDD R16,Y+11
0272 2711 CLR R17
(0363) p += (xc++ << 2) + 6;
0273 1B06 SUB R16,R22
0274 0B17 SBC R17,R23
0275 DEB0 RCALL _Lcd_Point
0276 82C8 STD Y+0,R12
0277 2D2E MOV R18,R14
0278 2733 CLR R19
0279 192A SUB R18,R10
027A 093B SBC R19,R11
027B 850B LDD R16,Y+11
027C 2711 CLR R17
027D 1B06 SUB R16,R22
027E 0B17 SBC R17,R23
027F DEA6 RCALL _Lcd_Point
(0364) else
(0365) p += ((xc++ - yc--)<<2) + 10;
0280 3040 CPI R20,0
0281 E0E0 LDI R30,0
0282 075E CPC R21,R30
0283 F46C BGE 0x0291
0284 0115 MOVW R2,R10
0285 01C1 MOVW R24,R2
0286 9601 ADIW R24,1
0287 015C MOVW R10,R24
0288 01C1 MOVW R24,R2
0289 0F88 LSL R24
028A 1F99 ROL R25
028B 0F88 LSL R24
028C 1F99 ROL R25
028D 9606 ADIW R24,6
028E 0F48 ADD R20,R24
028F 1F59 ADC R21,R25
0290 C011 RJMP 0x02A2
0291 0115 MOVW R2,R10
0292 01C1 MOVW R24,R2
0293 9601 ADIW R24,1
0294 015C MOVW R10,R24
0295 012B MOVW R4,R22
0296 5061 SUBI R22,1
0297 4070 SBCI R23,0
0298 01C1 MOVW R24,R2
0299 1984 SUB R24,R4
_glcd_circle_half:
p --> R20
yc --> R22
xc --> R10
show --> R12
radius --> Y+15
y --> R14
x --> Y+11
029A 0995 SBC R25,R5
029B 0F88 LSL R24
029C 1F99 ROL R25
029D 0F88 LSL R24
029E 1F99 ROL R25
029F 960A ADIW R24,0xA
02A0 0F48 ADD R20,R24
(0366) }
(0367) }
(0368) /*
(0369) //画半圆
(0370) void glcd_circle_half(int x, int y, int radius, unsigned char show)
(0371) {
(0372) int xc = 0;
02A1 1F59 ADC R21,R25
02A2 156A CP R22,R10
(0373) int yc ;
(0374) int p ;
(0375) yc=radius;
02A3 057B CPC R23,R11
02A4 F00C BLT 0x02A6
(0376) p = 3 - (radius<<1);
02A5 CF8A RJMP 0x0230
02A6 9621 ADIW R28,1
02A7 940E03E0 CALL pop_gset5
02A9 9624 ADIW R28,4
02AA 9508 RET
_Lcd_Box:
fill --> Y+21
draw --> R12
y2 --> R22
x2 --> R10
y1 --> R14
x1 --> R20
02AB 940E03E3 CALL push_gset5
(0377) while (xc <= yc)
(0378) {
(0379) // Lcd_Point(x + xc, y + yc, show);
(0380) Lcd_Point(x + xc, y - yc, show);
02AD 2EE2 MOV R14,R18
02AE 2F40 MOV R20,R16
02AF 9725 SBIW R28,5
02B0 84AF LDD R10,Y+15
02B1 8969 LDD R22,Y+17
02B2 88CB LDD R12,Y+19
02B3 880D LDD R0,Y+21
02B4 2000 TST R0
02B5 F059 BEQ 0x02C1
(0381) // Lcd_Point(x - xc, y + yc, show);
(0382) Lcd_Point(x - xc, y - yc, show);
02B6 C007 RJMP 0x02BE
02B7 82CC STD Y+4,R12
02B8 836A STD Y+2,R22
02B9 8348 STD Y+0,R20
02BA 2D2E MOV R18,R14
02BB 2F04 MOV R16,R20
02BC DE9B RCALL _Lcd_Line
02BD 9543 INC R20
02BE 154A CP R20,R10
(0383) // Lcd_Point(x + yc, y + xc, show);
(0384) Lcd_Point(x + yc, y - xc, show);
02BF F7B9 BNE 0x02B7
02C0 C018 RJMP 0x02D9
02C1 82CC STD Y+4,R12
02C2 836A STD Y+2,R22
02C3 8348 STD Y+0,R20
02C4 2D2E MOV R18,R14
02C5 2F04 MOV R16,R20
02C6 DE91 RCALL _Lcd_Line
02C7 82CC STD Y+4,R12
(0385) // Lcd_Point(x - yc, y + xc, show);
(0386) Lcd_Point(x - yc, y - xc, show);
02C8 82EA STD Y+2,R14
02C9 82A8 STD Y+0,R10
02CA 2D2E MOV R18,R14
02CB 2F04 MOV R16,R20
02CC DE8B RCALL _Lcd_Line
02CD 82CC STD Y+4,R12
02CE 836A STD Y+2,R22
02CF 82A8 STD Y+0,R10
02D0 2D2E MOV R18,R14
(0387) if (p < 0)
02D1 2D0A MOV R16,R10
02D2 DE85 RCALL _Lcd_Line
02D3 82CC STD Y+4,R12
02D4 836A STD Y+2,R22
(0388) p += (xc++ << 2) + 6;
02D5 82A8 STD Y+0,R10
02D6 2F26 MOV R18,R22
02D7 2F04 MOV R16,R20
02D8 DE7F RCALL _Lcd_Line
02D9 9625 ADIW R28,5
02DA 940E03E0 CALL pop_gset5
02DC 9508 RET
_Lcd_Setup:
02DD B387 IN R24,0x17
02DE 608F ORI R24,0xF
02DF BB87 OUT 0x17,R24
02E0 B388 IN R24,0x18
02E1 608F ORI R24,0xF
(0389) else
(0390) p += ((xc++ - yc--)<<2) + 10;
02E2 BB88 OUT 0x18,R24
02E3 EF8F LDI R24,0xFF
02E4 BB84 OUT 0x14,R24
02E5 9508 RET
_Lcd_Init:
02E6 9721 SBIW R28,1
02E7 DDDE RCALL _Lcd_ClrScreen
02E8 E480 LDI R24,0x40
02E9 8388 STD Y+0,R24
02EA 2722 CLR R18
02EB 2700 CLR R16
02EC DDB4 RCALL _Lcd_SendCom2
02ED E481 LDI R24,0x41
02EE 8388 STD Y+0,R24
02EF 2722 CLR R18
02F0 E10E LDI R16,0x1E
02F1 DDAF RCALL _Lcd_SendCom2
02F2 E482 LDI R24,0x42
02F3 8388 STD Y+0,R24
02F4 E023 LDI R18,3
02F5 E000 LDI R16,0
02F6 DDAA RCALL _Lcd_SendCom2
02F7 E483 LDI R24,0x43
02F8 8388 STD Y+0,R24
02F9 2722 CLR R18
02FA E10E LDI R16,0x1E
02FB DDA5 RCALL _Lcd_SendCom2
02FC DDE1 RCALL _Lcd_ClrText
02FD DDF8 RCALL _Lcd_ClrGraph
02FE EA07 LDI R16,0xA7
02FF DD82 RCALL _Lcd_SendCom0
0300 E801 LDI R16,0x81
0301 DD80 RCALL _Lcd_SendCom0
0302 E90C LDI R16,0x9C
0303 DD7E RCALL _Lcd_SendCom0
(0391) }
(0392) }
(0393) */
(0394) //画矩形
(0395) void Lcd_Box(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw, unsigned char fill)
(0396) {
(0397) if (fill)
0304 9621 ADIW R28,1
0305 9508 RET
_main:
0306 9727 SBIW R28,7
(0398) {
(0399) for (; x1 != x2; x1++) Lcd_Line(x1,y1,x1,y2,draw);
0307 D0CA RCALL _avr_init
0308 E680 LDI R24,0x60
0309 E090 LDI R25,0
030A 8399 STD Y+1,R25
030B 8388 STD Y+0,R24
030C E022 LDI R18,2
030D E00A LDI R16,0xA
030E DDFF RCALL _Lcd_PrintText
030F E081 LDI R24,1
0310 838C STD Y+4,R24
(0400) }
0311 E78F LDI R24,0x7F
(0401) else
(0402) {
(0403) Lcd_Line(x1,y1,x1,y2,draw);
0312 838A STD Y+2,R24
0313 EE8F LDI R24,0xEF
0314 8388 STD Y+0,R24
0315 2722 CLR R18
0316 2700 CLR R16
0317 DE40 RCALL _Lcd_Line
(0404) Lcd_Line(x1,y1,x2,y1,draw);
0318 E081 LDI R24,1
0319 838C STD Y+4,R24
031A 2422 CLR R2
031B 822A STD Y+2,R2
031C EE8F LDI R24,0xEF
031D 8388 STD Y+0,R24
(0405) Lcd_Line(x2,y1,x2,y2,draw);
031E E72F LDI R18,0x7F
031F 2700 CLR R16
0320 DE37 RCALL _Lcd_Line
0321 E081 LDI R24,1
0322 838C STD Y+4,R24
0323 E480 LDI R24,0x40
(0406) Lcd_Line(x1,y2,x2,y2,draw);
0324 838A STD Y+2,R24
0325 EE8F LDI R24,0xEF
0326 8388 STD Y+0,R24
0327 E420 LDI R18,0x40
0328 2700 CLR R16
0329 DE2E RCALL _Lcd_Line
(0407) }
032A E081 LDI R24,1
032B 838C STD Y+4,R24
032C E78F LDI R24,0x7F
032D 838A STD Y+2,R24
(0408) }
(0409)
(0410) //***********************************************************************
(0411) //以x,y点为原点,以degree为角度,画一条从内径到外径之间的线段
(0412) //(show=1画点,show=0清点)
(0413) //***********************************************************************
(0414) /*
(0415) void glcd_degree_line(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
(0416) {
(0417) int fx,fy,tx,ty;
(0418)
(0419) fx = x + (inner_radius * sin(degree * 3.14 / 180)); // ???????????????
(0420) fy = y - (inner_radius * cos(degree * 3.14 / 180));
(0421) tx = x + (outer_radius * sin(degree * 3.14 / 180));
(0422) ty = y - (outer_radius * cos(degree * 3.14 / 180));
(0423) glcd_line(fx,fy,tx,ty,show);
(0424) }
(0425)
(0426) //画上函数线段的包括线
(0427) void glcd_degree_line_bold(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
(0428) {
(0429) int fx,fy,tx,ty;
(0430)
(0431) fx = x + (inner_radius * sin(degree * 3.14 / 180)); // ???????????????
(0432) fy = y - (inner_radius * cos(degree * 3.14 / 180));
(0433) tx = x + (outer_radius * sin(degree * 3.14 / 180));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -