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

📄 电池放电器v2.lst

📁 这是一个电池放电器
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0114) 	      lcd_data[i]=0;
    016A E98B      LDI	R24,0x9B
    016B E090      LDI	R25,0
    016C 2FE4      MOV	R30,R20
    016D 27FF      CLR	R31
    016E 0FE8      ADD	R30,R24
    016F 1FF9      ADC	R31,R25
    0170 2422      CLR	R2
    0171 8220      STD	Z+0,R2
    0172 9543      INC	R20
    0173 3240      CPI	R20,0x20
    0174 F3A8      BCS	0x016A
(0115) 	   }
(0116) 	   delay_nus(500);
    0175 EF04      LDI	R16,0xF4
    0176 E011      LDI	R17,1
    0177 D338      RCALL	_delay_nus
    0178 DDC7      RCALL	pop_gset1
    0179 9508      RET
_LCD_write_string:
  e                    --> R20
  s                    --> R22
  y                    --> R18
  x                    --> R16
    017A DDC0      RCALL	push_gset2
    017B 816C      LDD	R22,Y+4
    017C 817D      LDD	R23,Y+5
    017D 814E      LDD	R20,Y+6
(0117)   }
(0118) /*-----------------------------------------------------------------------
(0119) LCD_check   : 统计发送数据到LCD次数的函数
(0120) 
(0121) 输入参数      :x,y 显示结果的座标
(0122) 编写日期      :2005/10/18	
(0123)        说明      :如果每秒调用一次,就是统计每秒的次数
(0124) -----------------------------------------------------------------------
(0125) void LCD_check(unsigned char x,unsigned char y) //检测每秒钟写LCD
(0126)                                                                       //次数的函数
(0127)   {  
(0128)     unsigned char  i;
(0129) 	unsigned char  lcd[2]={0};
(0130) 	add=y*16+x;//设置起始座标
(0131)         lcd[0]=num/10+48;
(0132) 		lcd[1]=num%10+48;
(0133) 	num=0;  
(0134)    for (i=0;i<2;i++) 
(0135)       {
(0136)               if(lcd_data[add]==lcd[i]){}
(0137) 			  else
(0138) 			     {data[add]=lcd[i];}
(0139) 		          add++;
(0140)       }
(0141) 	LCD_updata;
(0142)   }*/ 
(0143) /*-----------------------------------------------------------------------
(0144) LCD_write_string  : 英文字符串显示函数
(0145) 
(0146) 输入参数:*s       :英文字符串指针;
(0147)                  X、Y    : 显示字符串的位置
(0148) 				 e          : 把从最后一个字符到x=e之间的内容删除
(0149) 编写日期          :2005/10/18		
(0150) -----------------------------------------------------------------------*/
(0151) void LCD_write_string(unsigned char x,unsigned char y, const unsigned char *s,unsigned char e)
(0152)   { 
(0153)     if(y<2)
    017E 3022      CPI	R18,2
    017F F550      BCC	0x01AA
(0154) 	add=y*16+x;//设置起始座标
    0180 E180      LDI	R24,0x10
    0181 9F82      MUL	R24,R18
    0182 2C20      MOV	R2,R0
    0183 0E20      ADD	R2,R16
    0184 9220007A  STS	add,R2
    0186 C023      RJMP	0x01AA
(0155)     while (*s) 
(0156)       { 
(0157) 	    if(lcd_data[add]==*s)//如果LCD上显示的数和
    0187 E98B      LDI	R24,0x9B
    0188 E090      LDI	R25,0
    0189 91E0007A  LDS	R30,add
    018B 27FF      CLR	R31
    018C 0FE8      ADD	R30,R24
    018D 1FF9      ADC	R31,R25
    018E 8020      LDD	R2,Z+0
    018F 01FB      MOVW	R30,R22
    0190 91E4      LPM	R30,0(Z)
    0191 162E      CP	R2,R30
    0192 F409      BNE	0x0194
(0158) 		   {}                             //待写入的数相同的话
    0193 C00F      RJMP	0x01A3
(0159) 		else{data[add]=*s;}//要显示的数据存入显存
    0194 E78B      LDI	R24,0x7B
    0195 E090      LDI	R25,0
    0196 91E0007A  LDS	R30,add
    0198 27FF      CLR	R31
    0199 0FE8      ADD	R30,R24
    019A 1FF9      ADC	R31,R25
    019B 01DB      MOVW	R26,R22
    019C 93FA      ST	R31,-Y
    019D 93EA      ST	R30,-Y
    019E 01FD      MOVW	R30,R26
    019F 91A4      LPM	R26,0(Z)
    01A0 91E9      LD	R30,Y+
    01A1 91F9      LD	R31,Y+
    01A2 83A0      STD	Z+0,R26
(0160) 	       s ++;//指针加1
    01A3 5F6F      SUBI	R22,0xFF
    01A4 4F7F      SBCI	R23,0xFF
(0161) 	       add++;//显存地址加1
    01A5 9180007A  LDS	R24,add
    01A7 5F8F      SUBI	R24,0xFF
    01A8 9380007A  STS	add,R24
    01AA 01FB      MOVW	R30,R22
    01AB 91E4      LPM	R30,0(Z)
    01AC 23EE      TST	R30
    01AD F6C9      BNE	0x0187
(0162)       }
(0163) 	  if(y==1)
    01AE 3021      CPI	R18,1
    01AF F481      BNE	0x01C0
(0164) 	    e+=16;
    01B0 5F40      SUBI	R20,0xF0
(0165) 	  for(;e>=add;add++)
    01B1 C00E      RJMP	0x01C0
(0166) 	   {data[add]=' ';}
    01B2 E78B      LDI	R24,0x7B
    01B3 E090      LDI	R25,0
    01B4 91E0007A  LDS	R30,add
    01B6 27FF      CLR	R31
    01B7 0FE8      ADD	R30,R24
    01B8 1FF9      ADC	R31,R25
    01B9 E280      LDI	R24,0x20
    01BA 8380      STD	Z+0,R24
    01BB 9180007A  LDS	R24,add
    01BD 5F8F      SUBI	R24,0xFF
    01BE 9380007A  STS	add,R24
    01C0 9020007A  LDS	R2,add
    01C2 1542      CP	R20,R2
    01C3 F770      BCC	0x01B2
(0167) 	LCD_updata;
    01C4 2422      CLR	R2
    01C5 92200060  STS	new,R2
    01C7 DD65      RCALL	pop_gset2
    01C8 9508      RET
_LCD_write_number:
  c                    --> R10
  b                    --> R12
  lcd                  --> Y+0
  i                    --> R14
  e                    --> R6
  s                    --> R8
  dat                  --> Y+24
  d                    --> Y+22
  y                    --> Y+20
  x                    --> R14
    01C9 933A      ST	R19,-Y
    01CA 932A      ST	R18,-Y
    01CB DD69      RCALL	push_gset5
    01CC 2EE0      MOV	R14,R16
    01CD 972A      SBIW	R28,0xA
    01CE 8C8C      LDD	R8,Y+28
    01CF 8C9D      LDD	R9,Y+29
    01D0 8C6E      LDD	R6,Y+30
(0168)   }
(0169) /*-----------------------------------------------------------------------
(0170) LCD_write_number  : 数字显示函数
(0171) 
(0172) 输入参数:
(0173)           X、Y    : 显示字符串的位置
(0174)                d     :在第d位插入小数点
(0175) 		 data      :要显示的数据 长整形
(0176) 		     *s     :数据的单位
(0177) 	         e       : 把从最后一个字符到x=e之间的内容删除
(0178) 编写日期       :2005/10/18	 		
(0179) -----------------------------------------------------------------------*/ 
(0180) void LCD_write_number(unsigned char x,unsigned char y,unsigned char d,unsigned long dat,const unsigned char *s,unsigned char e)
(0181)   { 
(0182)     unsigned char  i;
(0183) 	unsigned char b=0;
    01D1 24CC      CLR	R12
(0184) 	unsigned char c='.';
    01D2 E28E      LDI	R24,0x2E
    01D3 2EA8      MOV	R10,R24
(0185) 	unsigned char lcd[10]={0};
    01D4 E286      LDI	R24,0x26
    01D5 E090      LDI	R25,0
    01D6 01FE      MOVW	R30,R28
    01D7 E00A      LDI	R16,0xA
    01D8 E010      LDI	R17,0
    01D9 93FA      ST	R31,-Y
    01DA 93EA      ST	R30,-Y
    01DB 939A      ST	R25,-Y
    01DC 938A      ST	R24,-Y
    01DD DDB0      RCALL	asgncblk
(0186) 	if(y<2)//如果Y>1则不重新计算地址
    01DE 898C      LDD	R24,Y+20
    01DF 3082      CPI	R24,2
    01E0 F438      BCC	0x01E8
(0187)     add=y*16+x;//设置起始座标
    01E1 E180      LDI	R24,0x10
    01E2 880C      LDD	R0,Y+20
    01E3 9D80      MUL	R24,R0
    01E4 2C20      MOV	R2,R0
    01E5 0C2E      ADD	R2,R14
    01E6 9220007A  STS	add,R2
(0188)     
(0189)    for (i=10;i>0;i--) 
    01E8 E08A      LDI	R24,0xA
    01E9 2EE8      MOV	R14,R24
    01EA C036      RJMP	0x0221
(0190)       {
(0191)         lcd[i]=dat%10+48;
    01EB E04A      LDI	R20,0xA
    01EC E050      LDI	R21,0
    01ED E060      LDI	R22,0
    01EE E070      LDI	R23,0
    01EF 01FE      MOVW	R30,R28
    01F0 8C20      LDD	R2,Z+24
    01F1 8C31      LDD	R3,Z+25
    01F2 8C42      LDD	R4,Z+26
    01F3 8C53      LDD	R5,Z+27
    01F4 937A      ST	R23,-Y
    01F5 936A      ST	R22,-Y
    01F6 935A      ST	R21,-Y
    01F7 934A      ST	R20,-Y
    01F8 0181      MOVW	R16,R2
    01F9 0192      MOVW	R18,R4
    01FA DC9B      RCALL	mod32u
    01FB 0118      MOVW	R2,R16
    01FC 0129      MOVW	R4,R18
    01FD E340      LDI	R20,0x30
    01FE E050      LDI	R21,0
    01FF E060      LDI	R22,0
    0200 E070      LDI	R23,0
    0201 0E24      ADD	R2,R20
    0202 1E35      ADC	R3,R21
    0203 1E46      ADC	R4,R22
    0204 1E57      ADC	R5,R23
    0205 01CE      MOVW	R24,R28
    0206 2DEE      MOV	R30,R14
    0207 27FF      CLR	R31
    0208 0FE8      ADD	R30,R24
    0209 1FF9      ADC	R31,R25
    020A 8220      STD	Z+0,R2
(0192) 		dat=dat/10;
    020B E04A      LDI	R20,0xA
    020C E050      LDI	R21,0
    020D E060      LDI	R22,0
    020E E070      LDI	R23,0
    020F 01FE      MOVW	R30,R28
    0210 8C20      LDD	R2,Z+24
    0211 8C31      LDD	R3,Z+25
    0212 8C42      LDD	R4,Z+26
    0213 8C53      LDD	R5,Z+27
    0214 937A      ST	R23,-Y
    0215 936A      ST	R22,-Y
    0216 935A      ST	R21,-Y
    0217 934A      ST	R20,-Y
    0218 0181      MOVW	R16,R2
    0219 0192      MOVW	R18,R4
    021A DC79      RCALL	div32u
    021B 01FE      MOVW	R30,R28
    021C 8F00      STD	Z+24,R16
    021D 8F11      STD	Z+25,R17
    021E 8F22      STD	Z+26,R18
    021F 8F33      STD	Z+27,R19
    0220 94EA      DEC	R14
    0221 2422      CLR	R2
    0222 142E      CP	R2,R14
    0223 F408      BCC	0x0225
    0224 CFC6      RJMP	0x01EB
(0193)       }
(0194) 	  
(0195) 	for(i=1;i<11;i++)
    0225 24EE      CLR	R14
    0226 94E3      INC	R14
    0227 C079      RJMP	0x02A1
(0196) 	   { 
(0197) 	     if(i==11-d)
    0228 E08B      LDI	R24,0xB
    0229 880E      LDD	R0,Y+22
    022A 1980      SUB	R24,R0
    022B 16E8      CP	R14,R24
    022C F4C1      BNE	0x0245
(0198) 		   {  
(0199) 		      if(lcd_data[add]==c)
    022D E98B      LDI	R24,0x9B
    022E E090      LDI	R25,0
    022F 91E0007A  LDS	R30,add
    0231 27FF      CLR	R31
    0232 0FE8      ADD	R30,R24
    0233 1FF9      ADC	R31,R25
    0234 8020      LDD	R2,Z+0
    0235 142A      CP	R2,R10
    0236 F409      BNE	0x0238
(0200) 			     {}
    0237 C008      RJMP	0x0240
(0201) 			  else
(0202) 			     {data[add]=c;}     
    0238 E78B      LDI	R24,0x7B
    0239 E090      LDI	R25,0
    023A 91E0007A  LDS	R30,add
    023C 27FF      CLR	R31
    023D 0FE8      ADD	R30,R24
    023E 1FF9      ADC	R31,R25
    023F 82A0      STD	Z+0,R10
(0203) 		          add++;
    0240 9180007A  LDS	R24,add
    0242 5F8F      SUBI	R24,0xFF
    0243 9380007A  STS	add,R24
(0204) 			}   
(0205) 	     if((lcd[i]-48+b)==0)
    0245 01CE      MOVW	R24,R28
    0246 2DEE      MOV	R30,R14
    0247 27FF      CLR	R31
    0248 0FE8      ADD	R30,R24
    0249 1FF9      ADC	R31,R25
    024A 8180      LDD	R24,Z+0
    024B 5380      SUBI	R24,0x30
    024C 0D8C      ADD	R24,R12
    024D F009      BEQ	0x024F
    024E C02B      RJMP	0x027A
(0206) 	     {
(0207) 		   if(i>=(10-d))
    024F E08A      LDI	R24,0xA
    0250 880E      LDD	R0,Y+22
    0251 1980      SUB	R24,R0
    0252 16E8      CP	R14,R24
    0253 F408      BCC	0x0255
    0254 C04B      RJMP	0x02A0
(0208) 		   { 
(0209) 		      if(lcd_data[add]==lcd[i])
    0255 01CE      MOVW	R24,R28
    0256 2DEE      MOV	R30,R14
    0257 27FF      CLR	R31
    0258 0FE8      ADD	R30,R24
    0259 1FF9      ADC	R31,R25
    025A 8020      LDD	R2,Z+0
    025B E98B      LDI	R24,0x9B
    025C E090      LDI	R25,0
    025D 91E0007A  LDS	R30,add
    025F 27FF      CLR	R31
    0260 0FE8      ADD	R30,R24
    0261 1FF9      ADC	R31,R25
    0262 8030      LDD	R3,Z+0
    0263 1432      CP	R3,R2
    0264 F409      BNE	0x0266
(0210) 			     {}
    0265 C00E      RJMP	0x0274
(0211) 			  else
(0212) 			     {data[add]=lcd[i];}     
    0266 01CE      MOVW	R24,R28
    0267 2DEE      MOV	R30,R14
    0268 27FF      CLR	R31
    0269 0FE8      ADD	R30,R24
    026A 1FF9      ADC	R31,R25
    026B 8020      LDD	R2,Z+0
    026C E78B      LDI	R24,0x7B
    026D E090      LDI	R25,0
    026E 91E0007A  LDS	R30,add
    0270 27FF      CLR	R31
    0271 0FE8      ADD	R30,R24
    0272 1FF9      ADC	R31,R25
    0273 8220      STD	Z+0,R2
(0213) 		          add++;
    0274 9180007A  LDS	R24,add
    0276 5F8F      SUBI	R24,0xFF
    0277 9380007A  STS	add,R24
(0214) 			} 	 
(0215) 		   else
(0216) 		   {}  	   
(0217) 		 }
    0279 C026      RJMP	0x02A0
(0218) 		 else
(0219) 		 {
(0220) 		      if(lcd_data[add]==lcd[i])
    027A 01CE      MOVW	R24,R28
    027B 2DEE      MOV	R30,R14
    027C 27FF      CLR	R31
    027D 0FE8      ADD	R30,R24
    027E 1FF9      ADC	R31,R25
    027F 8020      LDD	R2,Z+0
    0280 E98B      LDI	R24,0x9B
    0281 E090      LDI	R25,0
    0282 91E0007A  LDS	R30,add
    0284 27FF      CLR	R31
    0285 0FE8      ADD	R30,R24
    0286 1FF9      ADC	R31,R25
    0287 8030      LDD	R3,Z+0
    0288 1432      CP	R3,R2
    0289 F409      BNE	0x028B
(0221) 			     {}
    028A C00E      RJMP	0x0299
(0222) 			  else
(0223) 			     {data[add]=lcd[i];}      
    028B 01CE      MOVW	R24,R28
    028C 2DEE      MOV	R30,R14
    028D 27FF      CLR	R31
    028E 0FE8      ADD	R30,R24
    028F 1FF9      ADC	R31,R25
    0290 8020      LDD	R2,Z+0
    0291 E78B      LDI	R24,0x7B
    0292 E090      LDI	R25,0

⌨️ 快捷键说明

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