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

📄 电池放电器v2.lst

📁 这是一个电池放电器
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0293 91E0007A  LDS	R30,add
    0295 27FF      CLR	R31
    0296 0FE8      ADD	R30,R24
    0297 1FF9      ADC	R31,R25
    0298 8220      STD	Z+0,R2
(0224) 		          add++;
    0299 9180007A  LDS	R24,add
    029B 5F8F      SUBI	R24,0xFF
    029C 9380007A  STS	add,R24
(0225) 		 b=1;
    029E 24CC      CLR	R12
    029F 94C3      INC	R12
    02A0 94E3      INC	R14
    02A1 2D8E      MOV	R24,R14
    02A2 308B      CPI	R24,0xB
    02A3 F408      BCC	0x02A5
    02A4 CF83      RJMP	0x0228
    02A5 C024      RJMP	0x02CA
(0226) 		 }
(0227) 	   }
(0228) 	   while (*s) 
(0229)       {
(0230)         if(lcd_data[add]==*s)//如果LCD上显示的数和
    02A6 E98B      LDI	R24,0x9B
    02A7 E090      LDI	R25,0
    02A8 91E0007A  LDS	R30,add
    02AA 27FF      CLR	R31
    02AB 0FE8      ADD	R30,R24
    02AC 1FF9      ADC	R31,R25
    02AD 8020      LDD	R2,Z+0
    02AE 01F4      MOVW	R30,R8
    02AF 91E4      LPM	R30,0(Z)
    02B0 162E      CP	R2,R30
    02B1 F409      BNE	0x02B3
(0231) 		   {}                             //待写入的数相同的话
    02B2 C00F      RJMP	0x02C2
(0232) 		else{data[add]=*s;}//要显示的数据存入显存
    02B3 E78B      LDI	R24,0x7B
    02B4 E090      LDI	R25,0
    02B5 91E0007A  LDS	R30,add
    02B7 27FF      CLR	R31
    02B8 0FE8      ADD	R30,R24
    02B9 1FF9      ADC	R31,R25
    02BA 01D4      MOVW	R26,R8
    02BB 93FA      ST	R31,-Y
    02BC 93EA      ST	R30,-Y
    02BD 01FD      MOVW	R30,R26
    02BE 91A4      LPM	R26,0(Z)
    02BF 91E9      LD	R30,Y+
    02C0 91F9      LD	R31,Y+
    02C1 83A0      STD	Z+0,R26
(0233) 	       s ++;//指针加1
    02C2 01C4      MOVW	R24,R8
    02C3 9601      ADIW	R24,1
    02C4 014C      MOVW	R8,R24
(0234) 	       add++;//显存地址加1
    02C5 9180007A  LDS	R24,add
    02C7 5F8F      SUBI	R24,0xFF
    02C8 9380007A  STS	add,R24
    02CA 01F4      MOVW	R30,R8
    02CB 91E4      LPM	R30,0(Z)
    02CC 23EE      TST	R30
    02CD F6C1      BNE	0x02A6
(0235)       } 
(0236) 	  if(y==1)
    02CE 898C      LDD	R24,Y+20
    02CF 3081      CPI	R24,1
    02D0 F491      BNE	0x02E3
(0237) 	    e+=16;
    02D1 2D86      MOV	R24,R6
    02D2 5F80      SUBI	R24,0xF0
    02D3 2E68      MOV	R6,R24
(0238) 	  for(;e>=add;add++)
    02D4 C00E      RJMP	0x02E3
(0239) 	   {data[add]=' ';}
    02D5 E78B      LDI	R24,0x7B
    02D6 E090      LDI	R25,0
    02D7 91E0007A  LDS	R30,add
    02D9 27FF      CLR	R31
    02DA 0FE8      ADD	R30,R24
    02DB 1FF9      ADC	R31,R25
    02DC E280      LDI	R24,0x20
    02DD 8380      STD	Z+0,R24
    02DE 9180007A  LDS	R24,add
    02E0 5F8F      SUBI	R24,0xFF
    02E1 9380007A  STS	add,R24
    02E3 9020007A  LDS	R2,add
    02E5 1462      CP	R6,R2
    02E6 F770      BCC	0x02D5
(0240) 	    LCD_updata;
    02E7 2422      CLR	R2
    02E8 92200060  STS	new,R2
    02EA 962A      ADIW	R28,0xA
    02EB DC47      RCALL	pop_gset5
    02EC 9622      ADIW	R28,2
    02ED 9508      RET
_LCD_write_time:
  lcd                  --> Y+0
  i                    --> R20
  z                    --> R22
  s                    --> Y+18
  m                    --> Y+16
  h                    --> Y+14
  y                    --> R10
  x                    --> R20
    02EE DC4A      RCALL	push_gset3
    02EF 2EA2      MOV	R10,R18
    02F0 2F40      MOV	R20,R16
    02F1 9728      SBIW	R28,0x8
    02F2 896C      LDD	R22,Y+20
(0241)   }
(0242) /*-----------------------------------------------------------------------
(0243) LCD_write_time  : 数字显示函数
(0244) 
(0245) 输入参数:
(0246)           X、Y    : 显示数据的起始的位置
(0247) 		  h,m,s   :时,分,秒
(0248) 编写日期          :2005-10-19 		
(0249) -----------------------------------------------------------------------*/ 
(0250) void LCD_write_time(unsigned char x,unsigned char y,unsigned char h,unsigned char m,unsigned char s,unsigned char z)
(0251)   { 
(0252)     unsigned char  i;
(0253) 	unsigned char  lcd[8]={0};
    02F3 E380      LDI	R24,0x30
    02F4 E090      LDI	R25,0
    02F5 01FE      MOVW	R30,R28
    02F6 E008      LDI	R16,0x8
    02F7 E010      LDI	R17,0
    02F8 93FA      ST	R31,-Y
    02F9 93EA      ST	R30,-Y
    02FA 939A      ST	R25,-Y
    02FB 938A      ST	R24,-Y
    02FC DC91      RCALL	asgncblk
(0254) 	if(y<2)
    02FD 2D8A      MOV	R24,R10
    02FE 3082      CPI	R24,2
    02FF F430      BCC	0x0306
(0255) 	add=y*16+x;//设置起始座标LCD_set_xy( X, Y );  
    0300 E180      LDI	R24,0x10
    0301 9D8A      MUL	R24,R10
    0302 2C20      MOV	R2,R0
    0303 0E24      ADD	R2,R20
    0304 9220007A  STS	add,R2
(0256) 	lcd[0]=h/10+48;
    0306 E01A      LDI	R17,0xA
    0307 850E      LDD	R16,Y+14
    0308 DBFE      RCALL	div8u
    0309 2F80      MOV	R24,R16
    030A 5D80      SUBI	R24,0xD0
    030B 8388      STD	Y+0,R24
(0257) 	lcd[1]=h%10+48;
    030C E01A      LDI	R17,0xA
    030D 850E      LDD	R16,Y+14
    030E DBF6      RCALL	mod8u
    030F 2F80      MOV	R24,R16
    0310 5D80      SUBI	R24,0xD0
    0311 8389      STD	Y+1,R24
(0258) 	lcd[2]=':';
    0312 E38A      LDI	R24,0x3A
    0313 838A      STD	Y+2,R24
(0259) 	lcd[3]=m/10+48;
    0314 E01A      LDI	R17,0xA
    0315 8908      LDD	R16,Y+16
    0316 DBF0      RCALL	div8u
    0317 2F80      MOV	R24,R16
    0318 5D80      SUBI	R24,0xD0
    0319 838B      STD	Y+3,R24
(0260) 	lcd[4]=m%10+48;
    031A E01A      LDI	R17,0xA
    031B 8908      LDD	R16,Y+16
    031C DBE8      RCALL	mod8u
    031D 2F80      MOV	R24,R16
    031E 5D80      SUBI	R24,0xD0
    031F 838C      STD	Y+4,R24
(0261) 	lcd[5]=':';  
    0320 E38A      LDI	R24,0x3A
    0321 838D      STD	Y+5,R24
(0262) 	lcd[6]=s/10+48;
    0322 E01A      LDI	R17,0xA
    0323 890A      LDD	R16,Y+18
    0324 DBE2      RCALL	div8u
    0325 2F80      MOV	R24,R16
    0326 5D80      SUBI	R24,0xD0
    0327 838E      STD	Y+6,R24
(0263) 	lcd[7]=s%10+48;
    0328 E01A      LDI	R17,0xA
    0329 890A      LDD	R16,Y+18
    032A DBDA      RCALL	mod8u
    032B 2F80      MOV	R24,R16
    032C 5D80      SUBI	R24,0xD0
    032D 838F      STD	Y+7,R24
(0264)  if(z==5){if(lcd[7]%2)
    032E 3065      CPI	R22,5
    032F F451      BNE	0x033A
    0330 E012      LDI	R17,2
    0331 2F08      MOV	R16,R24
    0332 DBD2      RCALL	mod8u
    0333 2300      TST	R16
    0334 F019      BEQ	0x0338
(0265) 	          lcd[2]=':';
    0335 E38A      LDI	R24,0x3A
    0336 838A      STD	Y+2,R24
    0337 C002      RJMP	0x033A
(0266) 	       else
(0267) 	          lcd[2]=' ';}
    0338 E280      LDI	R24,0x20
    0339 838A      STD	Y+2,R24
(0268) 	
(0269)    for (i=0;i<z;i++)  
    033A 2744      CLR	R20
    033B C025      RJMP	0x0361
(0270)       {
(0271)               if(lcd_data[add]==lcd[i])
    033C 01CE      MOVW	R24,R28
    033D 2FE4      MOV	R30,R20
    033E 27FF      CLR	R31
    033F 0FE8      ADD	R30,R24
    0340 1FF9      ADC	R31,R25
    0341 8020      LDD	R2,Z+0
    0342 E98B      LDI	R24,0x9B
    0343 E090      LDI	R25,0
    0344 91E0007A  LDS	R30,add
    0346 27FF      CLR	R31
    0347 0FE8      ADD	R30,R24
    0348 1FF9      ADC	R31,R25
    0349 8030      LDD	R3,Z+0
    034A 1432      CP	R3,R2
    034B F409      BNE	0x034D
(0272) 			     {}
    034C C00E      RJMP	0x035B
(0273) 			  else
(0274) 			     {data[add]=lcd[i];}    
    034D 01CE      MOVW	R24,R28
    034E 2FE4      MOV	R30,R20
    034F 27FF      CLR	R31
    0350 0FE8      ADD	R30,R24
    0351 1FF9      ADC	R31,R25
    0352 8020      LDD	R2,Z+0
    0353 E78B      LDI	R24,0x7B
    0354 E090      LDI	R25,0
    0355 91E0007A  LDS	R30,add
    0357 27FF      CLR	R31
    0358 0FE8      ADD	R30,R24
    0359 1FF9      ADC	R31,R25
    035A 8220      STD	Z+0,R2
(0275) 		          add++;
    035B 9180007A  LDS	R24,add
    035D 5F8F      SUBI	R24,0xFF
    035E 9380007A  STS	add,R24
    0360 9543      INC	R20
    0361 1746      CP	R20,R22
    0362 F2C8      BCS	0x033C
(0276)       }
(0277) 	LCD_updata;
    0363 2422      CLR	R2
    0364 92200060  STS	new,R2
    0366 9628      ADIW	R28,0x8
    0367 DBC7      RCALL	pop_gset3
    0368 9508      RET
_LCD_write_new:
  address              --> R20
  new_add              --> R22
    0369 DBD1      RCALL	push_gset2
(0278)   }
(0279) /*----------------------------------------------------
(0280)     LCD_write_new:写显存函数
(0281) 	data[]:32字节的显存
(0282) 	new:显存标号
(0283) 	编写日期:2005/10/18
(0284) -----------------------------------------------------*/  
(0285) void  LCD_write_new(void)
(0286)   {   
(0287)     unsigned char address;
(0288) 	unsigned char new_add=1;//1表示要更新地址
    036A E061      LDI	R22,1
    036B C04F      RJMP	0x03BB
(0289) 	while(new<32)//显存共32个字节,标号从0--31 
(0290)       {    
(0291) 		 if(new==16)//换行
    036C 91800060  LDS	R24,new
    036E 3180      CPI	R24,0x10
    036F F409      BNE	0x0371
(0292) 		    new_add=1;	   
    0370 E061      LDI	R22,1
(0293) 	     if(data[new])//跳过为0的显存
    0371 E78B      LDI	R24,0x7B
    0372 E090      LDI	R25,0
    0373 91E00060  LDS	R30,new
    0375 27FF      CLR	R31
    0376 0FE8      ADD	R30,R24
    0377 1FF9      ADC	R31,R25
    0378 8020      LDD	R2,Z+0
    0379 2022      TST	R2
    037A F409      BNE	0x037C
    037B C039      RJMP	0x03B5
(0294)             {  
(0295) 			if(new_add)//当new_add=0时表示无需更新地址
    037C 2366      TST	R22
    037D F081      BEQ	0x038E
(0296) 		      {
(0297) 		         if(new>15)
    037E E08F      LDI	R24,0xF
    037F 90200060  LDS	R2,new
    0381 1582      CP	R24,R2
    0382 F418      BCC	0x0386
(0298) 			       address=0xb0+new;
    0383 2D42      MOV	R20,R2
    0384 5540      SUBI	R20,0x50
    0385 C003      RJMP	0x0389
(0299) 				 else
(0300) 			       address=0x80+new;
    0386 91400060  LDS	R20,new
    0388 5840      SUBI	R20,0x80
(0301) 			       LCD_write_char(0,address);//设置起始地址
    0389 2F24      MOV	R18,R20
    038A 2733      CLR	R19
    038B 2700      CLR	R16
    038C 2711      CLR	R17
    038D DD71      RCALL	_LCD_write_char
(0302) 		       }  			  
(0303) 			  LCD_write_char(1,data[new]);//写数据
    038E E78B      LDI	R24,0x7B
    038F E090      LDI	R25,0
    0390 91E00060  LDS	R30,new
    0392 27FF      CLR	R31
    0393 0FE8      ADD	R30,R24
    0394 1FF9      ADC	R31,R25
    0395 8120      LDD	R18,Z+0
    0396 2733      CLR	R19
    0397 E001      LDI	R16,1
    0398 E010      LDI	R17,0
    0399 DD65      RCALL	_LCD_write_char
(0304) 			  lcd_data[new]=data[new];
    039A E78B      LDI	R24,0x7B
    039B E090      LDI	R25,0
    039C 91E00060  LDS	R30,new
    039E 27FF      CLR	R31
    039F 0FE8      ADD	R30,R24
    03A0 1FF9      ADC	R31,R25
    03A1 8020      LDD	R2,Z+0
    03A2 E98B      LDI	R24,0x9B
    03A3 E090      LDI	R25,0
    03A4 91E00060  LDS	R30,new
    03A6 27FF      CLR	R31
    03A7 0FE8      ADD	R30,R24
    03A8 1FF9      ADC	R31,R25
    03A9 8220      STD	Z+0,R2
(0305) 			  data[new]=0;//写完数据后,显存清0
    03AA E78B      LDI	R24,0x7B
    03AB E090      LDI	R25,0
    03AC 91E00060  LDS	R30,new
    03AE 27FF      CLR	R31
    03AF 0FE8      ADD	R30,R24
    03B0 1FF9      ADC	R31,R25
    03B1 2422      CLR	R2
    03B2 8220      STD	Z+0,R2
(0306) 			  new_add=0;
    03B3 2766      CLR	R22
(0307) 			}
    03B4 C001      RJMP	0x03B6
(0308) 		else
(0309) 		   new_add=1;
    03B5 E061      LDI	R22,1
(0310) 		   new++;//
    03B6 91800060  LDS	R24,new
    03B8 5F8F      SUBI	R24,0xFF
    03B9 93800060  STS	new,R24
    03BB 91800060  LDS	R24,new
    03BD 3280      CPI	R24,0x20
    03BE F408      BCC	0x03C0
    03BF CFAC      RJMP	0x036C
    03C0 DB6C      RCALL	pop_gset2
    03C1 9508      RET
_T_BT1_T:
  BT_T                 --> R20
  a                    --> R22
  i                    --> R10
    03C2 DB76      RCALL	push_gset3
FILE: E:\刻录的\电子技术\项目\电池放电器\软件V2.0\read_adc.c
(0001) #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
(0002) #include <macros.h>
(0003) #include "discharge.h"
(0004) #include <stdio.h>
(0005) #include "LCD_1602.h"
(0006) 
(0007) /*---------------------------------------------
(0008)        电池1温度测量程序
(0009)        最大测量温度:88度
(0010)        测量64次取平均数
(0011) ----------------------------------------------*/
(0012) unsigned int T_BT1_T(void)
(0013) {
(0014)  unsigned char i;
(0015)  unsigned int a=0;
    03C3 2766      CLR	R22
    03C4 2777      CLR	R23
(0016)  unsigned int BT_T;//电池1温度
(0017)      i=read_adc(0,1);//第一次转换,不要
    03C5 E021      LDI	R18,1
    03C6 2700      CLR	R16
    03C7 D0BB      RCALL	_read_adc
(0018)      for (i=0;i<1;i++)
    03C8 24AA      CLR	R10

⌨️ 快捷键说明

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