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

📄 lcd_240128.lst

📁 基于AVR和51的240*128液晶显示模块驱动程序。很有用的喔~
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -