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

📄 lcdsd1335.lst

📁 AVR单片机
💻 LST
📖 第 1 页 / 共 5 页
字号:
    194E 5F4F      SUBI	R20,0xFF
    194F 4F5F      SBCI	R21,0xFF
    1950 01C1      MOVW	R24,R2
    1951 0F88      LSL	R24
    1952 1F99      ROL	R25
    1953 0F88      LSL	R24
    1954 1F99      ROL	R25
    1955 9606      ADIW	R24,6
    1956 0EC8      ADD	R12,R24
    1957 1ED9      ADC	R13,R25
    1958 C010      RJMP	0x1969
(0337)     else
(0338)       p += ((xc++ - yc--)<<2) + 10;
    1959 011A      MOVW	R2,R20
    195A 5F4F      SUBI	R20,0xFF
    195B 4F5F      SBCI	R21,0xFF
    195C 017B      MOVW	R14,R22
    195D 5061      SUBI	R22,1
    195E 4070      SBCI	R23,0
    195F 01C1      MOVW	R24,R2
    1960 198E      SUB	R24,R14
    1961 099F      SBC	R25,R15
    1962 0F88      LSL	R24
    1963 1F99      ROL	R25
    1964 0F88      LSL	R24
    1965 1F99      ROL	R25
    1966 960A      ADIW	R24,0xA
    1967 0EC8      ADD	R12,R24
    1968 1ED9      ADC	R13,R25
    1969 1764      CP	R22,R20
    196A 0775      CPC	R23,R21
    196B F00C      BLT	0x196D
    196C CF8B      RJMP	0x18F8
    196D 9621      ADIW	R28,1
    196E 940E 1ACE CALL	pop_xgsetF0FC
    1970 9624      ADIW	R28,4
    1971 9508      RET
_lcd_line:
  stepy                --> R12
  stepx                --> R14
  dx                   --> R22
  dy                   --> R20
  fraction             --> R10
  show                 --> Y,+19
  y2                   --> Y,+17
  x2                   --> Y,+15
  y1                   --> Y,+13
  x1                   --> Y,+11
    1972 940E 1A64 CALL	push_arg4
    1974 940E 1AD9 CALL	push_xgsetF0FC
    1976 9721      SBIW	R28,1
(0339)   }
(0340) }
(0341) 
(0342) 
(0343) /***********************************************************************
(0344) Draws a line from x1,y1 go x2,y2. Line can be drawn in any direction.
(0345) Set show to 1 to draw pixel, set to 0 to hide pixel.
(0346) ***********************************************************************/
(0347) void lcd_line(int x1, int y1, int x2, int y2, unsigned char show) 
(0348) {
(0349)   int dy = y2 - y1;
    1977 8949      LDD	R20,Y+17
    1978 895A      LDD	R21,Y+18
    1979 840D      LDD	R0,Y+13
    197A 841E      LDD	R1,Y+14
    197B 1940      SUB	R20,R0
    197C 0951      SBC	R21,R1
(0350)   int dx = x2 - x1;
    197D 856F      LDD	R22,Y+15
    197E 8978      LDD	R23,Y+16
    197F 840B      LDD	R0,Y+11
    1980 841C      LDD	R1,Y+12
    1981 1960      SUB	R22,R0
    1982 0971      SBC	R23,R1
(0351)   int stepx, stepy, fraction;
(0352)   if (dy < 0) 
    1983 3040      CPI	R20,0
    1984 E0E0      LDI	R30,0
    1985 075E      CPC	R21,R30
    1986 F444      BGE	0x198F
(0353)   {
(0354)     dy = -dy;
    1987 9540      COM	R20
    1988 9550      COM	R21
    1989 5F4F      SUBI	R20,0xFF
    198A 4F5F      SBCI	R21,0xFF
(0355)     stepy = -1;
    198B EF8F      LDI	R24,0xFF
    198C EF9F      LDI	R25,0xFF
    198D 016C      MOVW	R12,R24
(0356)   }
    198E C003      RJMP	0x1992
(0357)   else 
(0358)   {
(0359)     stepy = 1;
    198F E081      LDI	R24,1
    1990 E090      LDI	R25,0
    1991 016C      MOVW	R12,R24
(0360)   }
(0361)   if (dx < 0)
    1992 3060      CPI	R22,0
    1993 E0E0      LDI	R30,0
    1994 077E      CPC	R23,R30
    1995 F444      BGE	0x199E
(0362)   {
(0363)     dx = -dx;
    1996 9560      COM	R22
    1997 9570      COM	R23
    1998 5F6F      SUBI	R22,0xFF
    1999 4F7F      SBCI	R23,0xFF
(0364)     stepx = -1;
    199A EF8F      LDI	R24,0xFF
    199B EF9F      LDI	R25,0xFF
    199C 017C      MOVW	R14,R24
(0365)   }
    199D C003      RJMP	0x19A1
(0366)   else
(0367)   {
(0368)     stepx = 1;
    199E E081      LDI	R24,1
    199F E090      LDI	R25,0
    19A0 017C      MOVW	R14,R24
(0369)   }
(0370)   dy <<= 1;
    19A1 0F44      LSL	R20
    19A2 1F55      ROL	R21
(0371)   dx <<= 1;
    19A3 0F66      LSL	R22
    19A4 1F77      ROL	R23
(0372)   lcd_pixel(x1,y1,show);
    19A5 880B      LDD	R0,Y+19
    19A6 8208      STD	Y+0,R0
    19A7 852D      LDD	R18,Y+13
    19A8 853E      LDD	R19,Y+14
    19A9 850B      LDD	R16,Y+11
    19AA 851C      LDD	R17,Y+12
    19AB DD8D      RCALL	_lcd_pixel
(0373)   if (dx > dy)
    19AC 1746      CP	R20,R22
    19AD 0757      CPC	R21,R23
    19AE F55C      BGE	0x19DA
(0374)   {
(0375)     fraction = dy - (dx >> 1); 
    19AF 011B      MOVW	R2,R22
    19B0 9435      ASR	R3
    19B1 9427      ROR	R2
    19B2 015A      MOVW	R10,R20
    19B3 18A2      SUB	R10,R2
    19B4 08B3      SBC	R11,R3
    19B5 C01C      RJMP	0x19D2
(0376)     while (x1 != x2)
(0377)     {
(0378)       if (fraction >= 0)
    19B6 01C5      MOVW	R24,R10
    19B7 3080      CPI	R24,0
    19B8 E0E0      LDI	R30,0
    19B9 079E      CPC	R25,R30
    19BA F044      BLT	0x19C3
(0379)       {
(0380)         y1 += stepy;
    19BB 840D      LDD	R0,Y+13
    19BC 841E      LDD	R1,Y+14
    19BD 0C0C      ADD	R0,R12
    19BE 1C1D      ADC	R1,R13
    19BF 861E      STD	Y+14,R1
    19C0 860D      STD	Y+13,R0
(0381)         fraction -= dx;
    19C1 1AA6      SUB	R10,R22
    19C2 0AB7      SBC	R11,R23
(0382)       }
(0383)       x1 += stepx;
    19C3 840B      LDD	R0,Y+11
    19C4 841C      LDD	R1,Y+12
    19C5 0C0E      ADD	R0,R14
    19C6 1C1F      ADC	R1,R15
    19C7 861C      STD	Y+12,R1
    19C8 860B      STD	Y+11,R0
(0384)       fraction += dy;  
    19C9 0EA4      ADD	R10,R20
    19CA 1EB5      ADC	R11,R21
(0385)       lcd_pixel(x1,y1,show);
    19CB 880B      LDD	R0,Y+19
    19CC 8208      STD	Y+0,R0
    19CD 852D      LDD	R18,Y+13
    19CE 853E      LDD	R19,Y+14
    19CF 850B      LDD	R16,Y+11
    19D0 851C      LDD	R17,Y+12
    19D1 DD67      RCALL	_lcd_pixel
    19D2 840B      LDD	R0,Y+11
    19D3 841C      LDD	R1,Y+12
    19D4 850F      LDD	R16,Y+15
    19D5 8918      LDD	R17,Y+16
    19D6 1600      CP	R0,R16
    19D7 0611      CPC	R1,R17
    19D8 F6E9      BNE	0x19B6
(0386)     }
(0387)   }
    19D9 C02A      RJMP	0x1A04
(0388)   else
(0389)   {
(0390)     fraction = dx - (dy >> 1);
    19DA 011A      MOVW	R2,R20
    19DB 9435      ASR	R3
    19DC 9427      ROR	R2
    19DD 015B      MOVW	R10,R22
    19DE 18A2      SUB	R10,R2
    19DF 08B3      SBC	R11,R3
    19E0 C01C      RJMP	0x19FD
(0391)     while (y1 != y2)
(0392)     {
(0393)       if (fraction >= 0)
    19E1 01C5      MOVW	R24,R10
    19E2 3080      CPI	R24,0
    19E3 E0E0      LDI	R30,0
    19E4 079E      CPC	R25,R30
    19E5 F044      BLT	0x19EE
(0394)       {
(0395)         x1 += stepx;
    19E6 840B      LDD	R0,Y+11
    19E7 841C      LDD	R1,Y+12
    19E8 0C0E      ADD	R0,R14
    19E9 1C1F      ADC	R1,R15
    19EA 861C      STD	Y+12,R1
    19EB 860B      STD	Y+11,R0
(0396)         fraction -= dy;
    19EC 1AA4      SUB	R10,R20
    19ED 0AB5      SBC	R11,R21
(0397)       }
(0398)       y1 += stepy;
    19EE 840D      LDD	R0,Y+13
    19EF 841E      LDD	R1,Y+14
    19F0 0C0C      ADD	R0,R12
    19F1 1C1D      ADC	R1,R13
    19F2 861E      STD	Y+14,R1
    19F3 860D      STD	Y+13,R0
(0399)       fraction += dx;
    19F4 0EA6      ADD	R10,R22
    19F5 1EB7      ADC	R11,R23
(0400)       lcd_pixel(x1,y1,show);
    19F6 880B      LDD	R0,Y+19
    19F7 8208      STD	Y+0,R0
    19F8 852D      LDD	R18,Y+13
    19F9 853E      LDD	R19,Y+14
    19FA 850B      LDD	R16,Y+11
    19FB 851C      LDD	R17,Y+12
    19FC DD3C      RCALL	_lcd_pixel
    19FD 840D      LDD	R0,Y+13
    19FE 841E      LDD	R1,Y+14
    19FF 8909      LDD	R16,Y+17
    1A00 891A      LDD	R17,Y+18
    1A01 1600      CP	R0,R16
    1A02 0611      CPC	R1,R17
    1A03 F6E9      BNE	0x19E1
(0401)     }
(0402)   }
    1A04 9621      ADIW	R28,1
    1A05 940E 1ACE CALL	pop_xgsetF0FC
    1A07 9624      ADIW	R28,4
    1A08 9508      RET
_lcd_chinesechar:
  Address              --> R20
  high                 --> R20
  low                  --> R22
  k                    --> R10
  i                    --> R12
  lcd_fanxian          --> Y,+16
  length               --> R14
  width                --> Y,+12
  code1                --> Y,+10
  y                    --> R20
  x                    --> R22
    1A09 940E 1AD9 CALL	push_xgsetF0FC
    1A0B 01A9      MOVW	R20,R18
    1A0C 01B8      MOVW	R22,R16
    1A0D 84EE      LDD	R14,Y+14
(0403) }
(0404) 
(0405) /***********************************************************************
(0406) Happy end :-)
(0407) ***********************************************************************/
(0408) 
(0409) 
(0410) /*
(0411) *******************************************************************************
(0412) *
(0413) *函数名称:void lcd_chinesechar(int x, int y,unsigned char *code1 ,
(0414)                      unsigned char width,unsigned char length,unsigned char lcd_fanxian) 
(0415) *
(0416) *功能: 在指定位置显示一个width*length的汉字
(0417) *
(0418) *变量说明:
(0419) *
(0420) *
(0421) *
(0422) *
(0423) *
(0424) *
(0425) *作者:段胜柱
(0426) *
(0427) *时间:
(0428) ***************************************************************************
(0429) */
(0430) 
(0431) 
(0432) 
(0433) 
(0434) 
(0435) void lcd_chinesechar(int x, int y,unsigned char const  *code1 ,
(0436)                      unsigned char width,unsigned char length,unsigned char lcd_fanxian) 
(0437) {
(0438)     unsigned char i,k;
(0439) 	int Address;
(0440) 
(0441) 	unsigned char low,high;	
(0442) 	x--;
    1A0E 5061      SUBI	R22,1
    1A0F 4070      SBCI	R23,0
(0443) 	y--;
    1A10 5041      SUBI	R20,1
    1A11 4050      SBCI	R21,0
(0444) 	Address = (y * (LCD_X_SIZE/8)) + (x / 8);
    1A12 E028      LDI	R18,0x8
    1A13 E030      LDI	R19,0
    1A14 018B      MOVW	R16,R22
    1A15 940E 1A74 CALL	div16s
    1A17 0118      MOVW	R2,R16
    1A18 E208      LDI	R16,0x28
    1A19 E010      LDI	R17,0
    1A1A 019A      MOVW	R18,R20
    1A1B 940E 1ABE CALL	empy16s
    1A1D 01A8      MOVW	R20,R16
    1A1E 0D42      ADD	R20,R2
    1A1F 1D53      ADC	R21,R3
(0445) 	low = (unsigned char) (Address & 0x00ff);
    1A20 2F64      MOV	R22,R20
    1A21 7070      ANDI	R23,0
(0446)     high = (unsigned char) (((Address & 0xff00) >> 8));
    1A22 7040      ANDI	R20,0
    1A23 2F45      MOV	R20,R21
    1A24 2755      CLR	R21
(0447)     lcd_write_command(0x4f);
    1A25 E40F      LDI	R16,0x4F
    1A26 DC27      RCALL	_lcd_write_command
(0448)     
(0449)     for(k=0;k<width;k++)
    1A27 24AA      CLR	R10
    1A28 C035      RJMP	0x1A5E
(0450)     {
(0451) 	
(0452)         lcd_write_command(0x46);
    1A29 E406      LDI	R16,0x46
    1A2A DC23      RCALL	_lcd_write_command
(0453)         lcd_write_data(low + k*length);
    1A2B 9CAE      MUL	R10,R14
    1A2C 2F06      MOV	R16,R22
    1A2D 0D00      ADD	R16,R0
    1A2E DC24      RCALL	_lcd_write_data
(0454)         lcd_write_data(high);
    1A2F 2F04      MOV	R16,R20
    1A30 DC22      RCALL	_lcd_write_data
(0455)         lcd_write_command(0x42);
    1A31 E402      LDI	R16,0x42
    1A32 DC1B      RCALL	_lcd_write_command
(0456)         
(0457)         for(i=0;i<length;i++)
    1A33 24CC      CLR	R12
    1A34 C026      RJMP	0x1A5B
(0458)         {
(0459)             if(lcd_fanxian == 1)
    1A35 8988      LDD	R24,Y+16
    1A36 3081      CPI	R24,1
    1A37 F491      BNE	0x1A4A
(0460)             {                
(0461)                lcd_write_data(~code1[i * width + k]);lcd_delay(20000);
    1A38 840C      LDD	R0,Y+12
    1A39 9CC0      MUL	R12,R0
    1A3A 01F0      MOVW	R30,R0
    1A3B 2C2A      MOV	R2,R10
    1A3C 2433      CLR	R3
    1A3D 0DE2      ADD	R30,R2
    1A3E 1DF3      ADC	R31,R3
    1A3F 840A      LDD	R0,Y+10
    1A40 841B      LDD	R1,Y+11
    1A41 0DE0      ADD	R30,R0
    1A42 1DF1      ADC	R31,R1
    1A43 9106      ELPM	R16,11(Z)
    1A44 9500      COM	R16
    1A45 DC0D      RCALL	_lcd_write_data
    1A46 E200      LDI	R16,0x20
    1A47 E41E      LDI	R17,0x4E
    1A48 DBF0      RCALL	_lcd_delay
(0462)             }
    1A49 C010  

⌨️ 快捷键说明

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