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

📄 仿真多点温度测量(毕业设计).lst

📁 电机的不同转动轻快
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0136)    }
     149 C00A      RJMP	0x0154
(0137)    else
(0138)    {
(0139)      PORTA&=0xfe;
     14A B38B      IN	R24,0x1B
     14B 7F8E      ANDI	R24,0xFE
     14C BB8B      OUT	0x1B,R24
(0140)      delay_18B20(100);
     14D E604      LDI	R16,0x64
     14E E010      LDI	R17,0
     14F DF9D      RCALL	_delay_18B20
(0141) 	  PORTA|=0x01;
     150 9AD8      SBI	0x1B,0
(0142) 	  delay_18B20(10);
     151 E00A      LDI	R16,0xA
     152 E010      LDI	R17,0
     153 DF99      RCALL	_delay_18B20
(0143)    }
(0144)    wdata=wdata>>1;
     154 9546      LSR	R20
     155 94A3      INC	R10
     156 E087      LDI	R24,7
     157 158A      CP	R24,R10
     158 F710      BCC	0x013B
     159 940C 02B1 JMP	pop_xgsetF00C
_ds1820disp:
  flagdat              --> R20
     15B 934A      ST	R20,-Y
(0145) }
(0146)  } 
(0147) 
(0148) /******************************************************************/  
(0149) 	 void ds1820disp()//温度值显示
(0150)      { 
(0151)      uchar flagdat;
(0152) 	 DDRB|=0xFF;      
     15C B387      IN	R24,0x17
     15D 6F8F      ORI	R24,0xFF
     15E BB87      OUT	0x17,R24
(0153)      DDRC|=(1<<3)|(1<<4)|(1<<5);
     15F B384      IN	R24,0x14
     160 6388      ORI	R24,0x38
     161 BB84      OUT	0x14,R24
(0154)      adata[0]=tvalue/1000+0x30;//百位数
     162 EE28      LDI	R18,0xE8
     163 E033      LDI	R19,3
     164 9100 00BD LDS	R16,tvalue
     166 9110 00BE LDS	R17,tvalue+1
     168 940E 0290 CALL	div16u
     16A 01C8      MOVW	R24,R16
     16B 96C0      ADIW	R24,0x30
     16C 9380 00C0 STS	adata,R24
(0155)      adata[1]=tvalue%1000/100+0x30;//十位数
     16E EE28      LDI	R18,0xE8
     16F E033      LDI	R19,3
     170 9100 00BD LDS	R16,tvalue
     172 9110 00BE LDS	R17,tvalue+1
     174 940E 028E CALL	mod16u
     176 E624      LDI	R18,0x64
     177 E030      LDI	R19,0
     178 940E 0290 CALL	div16u
     17A 01C8      MOVW	R24,R16
     17B 96C0      ADIW	R24,0x30
     17C 9380 00C1 STS	adata+1,R24
(0156)      adata[2]=tvalue%100/10+0x30;//个位数
     17E E624      LDI	R18,0x64
     17F E030      LDI	R19,0
     180 9100 00BD LDS	R16,tvalue
     182 9110 00BE LDS	R17,tvalue+1
     184 940E 028E CALL	mod16u
     186 E02A      LDI	R18,0xA
     187 E030      LDI	R19,0
     188 940E 0290 CALL	div16u
     18A 01C8      MOVW	R24,R16
     18B 96C0      ADIW	R24,0x30
     18C 9380 00C2 STS	adata+2,R24
(0157)      adata[3]=tvalue%10+0x30;//小数位
     18E E02A      LDI	R18,0xA
     18F E030      LDI	R19,0
     190 9100 00BD LDS	R16,tvalue
     192 9110 00BE LDS	R17,tvalue+1
     194 940E 028E CALL	mod16u
     196 01C8      MOVW	R24,R16
     197 96C0      ADIW	R24,0x30
     198 9380 00C3 STS	adata+3,R24
(0158)      if(tflag==0)
     19A 9020 00BC LDS	R2,tflag
     19C 2022      TST	R2
     19D F411      BNE	0x01A0
(0159)      flagdat=0x20;//正温度不显示符号
     19E E240      LDI	R20,0x20
     19F C001      RJMP	0x01A1
(0160)      else
(0161)        flagdat=0x2d;//负温度显示负号:-
     1A0 E24D      LDI	R20,0x2D
(0162)      if(adata[0]==0x30)
     1A1 9180 00C0 LDS	R24,adata
     1A3 3380      CPI	R24,0x30
     1A4 F451      BNE	0x01AF
(0163)         {
(0164)       adata[0]=0x20;//如果百位为0,不显示
     1A5 E280      LDI	R24,0x20
     1A6 9380 00C0 STS	adata,R24
(0165)       if(adata[1]==0x30)
     1A8 9180 00C1 LDS	R24,adata+1
     1AA 3380      CPI	R24,0x30
     1AB F419      BNE	0x01AF
(0166)         {
(0167)      adata[1]=0x20;//如果百位为0,十位为0也不显示
     1AC E280      LDI	R24,0x20
     1AD 9380 00C1 STS	adata+1,R24
(0168)         }
(0169)         }
(0170)     if(n==0)
     1AF 9020 00BF LDS	R2,n
     1B1 2022      TST	R2
     1B2 F431      BNE	0x01B9
(0171)    {
(0172)     wr_com(0x80);
     1B3 E800      LDI	R16,0x80
     1B4 DEDC      RCALL	_wr_com
(0173)     display(str1);
     1B5 E600      LDI	R16,0x60
     1B6 E010      LDI	R17,0
     1B7 DF22      RCALL	_display
(0174)    }
     1B8 C01D      RJMP	0x01D6
(0175)     else if(n==1)
     1B9 9180 00BF LDS	R24,n
     1BB 3081      CPI	R24,1
     1BC F431      BNE	0x01C3
(0176)     {
(0177)    wr_com(0x80);
     1BD E800      LDI	R16,0x80
     1BE DED2      RCALL	_wr_com
(0178)    display(str2);
     1BF E60F      LDI	R16,0x6F
     1C0 E010      LDI	R17,0
     1C1 DF18      RCALL	_display
(0179)     }
     1C2 C013      RJMP	0x01D6
(0180) 	else if(n==2)
     1C3 9180 00BF LDS	R24,n
     1C5 3082      CPI	R24,2
     1C6 F431      BNE	0x01CD
(0181) 	{
(0182)    wr_com(0x80);
     1C7 E800      LDI	R16,0x80
     1C8 DEC8      RCALL	_wr_com
(0183)    display(str3);
     1C9 E70E      LDI	R16,0x7E
     1CA E010      LDI	R17,0
     1CB DF0E      RCALL	_display
(0184)     }
     1CC C009      RJMP	0x01D6
(0185) 	else if(n==3)
     1CD 9180 00BF LDS	R24,n
     1CF 3083      CPI	R24,3
     1D0 F429      BNE	0x01D6
(0186) 	{
(0187)    wr_com(0x80);
     1D1 E800      LDI	R16,0x80
     1D2 DEBE      RCALL	_wr_com
(0188)    display(str4);
     1D3 E80D      LDI	R16,0x8D
     1D4 E010      LDI	R17,0
     1D5 DF04      RCALL	_display
(0189)     }
(0190)     wr_com(0xc0);
     1D6 EC00      LDI	R16,0xC0
     1D7 DEB9      RCALL	_wr_com
(0191)     wr_dat(flagdat);//显示符号位
     1D8 2F04      MOV	R16,R20
     1D9 DECA      RCALL	_wr_dat
(0192)     wr_com(0xc1);
     1DA EC01      LDI	R16,0xC1
     1DB DEB5      RCALL	_wr_com
(0193)     wr_dat(adata[0]);//显示百位
     1DC 9100 00C0 LDS	R16,adata
     1DE DEC5      RCALL	_wr_dat
(0194)     wr_com(0xc2);
     1DF EC02      LDI	R16,0xC2
     1E0 DEB0      RCALL	_wr_com
(0195)     wr_dat(adata[1]);//显示十位 
     1E1 9100 00C1 LDS	R16,adata+1
     1E3 DEC0      RCALL	_wr_dat
(0196)     wr_com(0xc3);
     1E4 EC03      LDI	R16,0xC3
     1E5 DEAB      RCALL	_wr_com
(0197)     wr_dat(adata[2]);//显示个位 
     1E6 9100 00C2 LDS	R16,adata+2
     1E8 DEBB      RCALL	_wr_dat
(0198)     wr_com(0xc4);
     1E9 EC04      LDI	R16,0xC4
     1EA DEA6      RCALL	_wr_com
(0199)     wr_dat(0x2e);//显示小数点 
     1EB E20E      LDI	R16,0x2E
     1EC DEB7      RCALL	_wr_dat
(0200)     wr_com(0xc5);
     1ED EC05      LDI	R16,0xC5
     1EE DEA2      RCALL	_wr_com
(0201)     wr_dat(adata[3]);//显示小数位
     1EF 9100 00C3 LDS	R16,adata+3
     1F1 DEB2      RCALL	_wr_dat
     1F2 9149      LD	R20,Y+
     1F3 9508      RET
_readandisp_temp:
  b                    --> R12
  a                    --> R10
  i                    --> R20
     1F4 940E 02B8 CALL	push_xgset303C
(0202)       }
(0203) /*******************读取温度值并转换********************************/
(0204)       void readandisp_temp()
(0205)   {
(0206)           unsigned char a,b,i;
(0207) 	       DDRB|=0xFF;     
     1F6 B387      IN	R24,0x17
     1F7 6F8F      ORI	R24,0xFF
     1F8 BB87      OUT	0x17,R24
(0208)            DDRA|=(1<<3)|(1<<4)|(1<<5);
     1F9 B38A      IN	R24,0x1A
     1FA 6388      ORI	R24,0x38
     1FB BB8A      OUT	0x1A,R24
(0209) 		   lcd_init();
     1FC DEBA      RCALL	_lcd_init
(0210)           for(n=0;n<4;n++)
     1FD 2422      CLR	R2
     1FE 9220 00BF STS	n,R2
     200 C082      RJMP	0x0283
(0211)     {    
(0212)         do
(0213)      i=ds1820rst();
     201 DEF3      RCALL	_ds1820rst
     202 2F40      MOV	R20,R16
(0214) 	 while(i==0x01);
     203 3041      CPI	R20,1
     204 F3E1      BEQ	0x0201
(0215)        ds1820wr(0xCC);
     205 EC0C      LDI	R16,0xCC
     206 DF2E      RCALL	_ds1820wr
(0216)        ds1820wr(0x44);
     207 E404      LDI	R16,0x44
     208 DF2C      RCALL	_ds1820wr
(0217)        delay_18B20(600);
     209 E508      LDI	R16,0x58
     20A E012      LDI	R17,2
     20B DEE1      RCALL	_delay_18B20
(0218)         do
(0219)     i=ds1820rst();
     20C DEE8      RCALL	_ds1820rst
     20D 2F40      MOV	R20,R16
(0220) 	 while(i==0x01);
     20E 3041      CPI	R20,1
     20F F3E1      BEQ	0x020C
(0221)        ds1820wr(0x55);//匹配
     210 E505      LDI	R16,0x55
     211 DF23      RCALL	_ds1820wr
(0222) 	   for(i=0;i<8;i++)
     212 2744      CLR	R20
     213 C014      RJMP	0x0228
(0223) 	   {
(0224)        ds1820wr(str5[n][i]);
     214 E98C      LDI	R24,0x9C
     215 E090      LDI	R25,0
     216 9020 00BF LDS	R2,n
     218 2433      CLR	R3
     219 0C22      LSL	R2
     21A 1C33      ROL	R3
     21B 0C22      LSL	R2
     21C 1C33      ROL	R3
     21D 0C22      LSL	R2
     21E 1C33      ROL	R3
     21F 0E28      ADD	R2,R24
     220 1E39      ADC	R3,R25
     221 2FE4      MOV	R30,R20
     222 27FF      CLR	R31
     223 0DE2      ADD	R30,R2
     224 1DF3      ADC	R31,R3
     225 8100      LDD	R16,Z+0
     226 DF0E      RCALL	_ds1820wr
     227 9543      INC	R20
     228 3048      CPI	R20,0x8
     229 F350      BCS	0x0214
(0225) 	   }
(0226)   ds1820wr(0xbe);
     22A EB0E      LDI	R16,0xBE
     22B DF09      RCALL	_ds1820wr
(0227)   a=ds1820rd();
     22C DEDF      RCALL	_ds1820rd
     22D 2EA0      MOV	R10,R16
(0228)   b=ds1820rd();
     22E DEDD      RCALL	_ds1820rd
     22F 2EC0      MOV	R12,R16
(0229)   ds1820rst();
     230 DEC4      RCALL	_ds1820rst
(0230)   tvalue=b;
     231 2C2C      MOV	R2,R12
     232 2433      CLR	R3
     233 9230 00BE STS	tvalue+1,R3
     235 9220 00BD STS	tvalue,R2
(0231)   tvalue<<=8;
     237 2C32      MOV	R3,R2
     238 2422      CLR	R2
     239 9230 00BE STS	tvalue+1,R3
     23B 9220 00BD STS	tvalue,R2
(0232)   tvalue=tvalue|a;
     23D 2C2A      MOV	R2,R10
     23E 2433      CLR	R3
     23F 9040 00BD LDS	R4,tvalue
     241 9050 00BE LDS	R5,tvalue+1
     243 2842      OR	R4,R2
     244 2853      OR	R5,R3
     245 9250 00BE STS	tvalue+1,R5
     247 9240 00BD STS	tvalue,R4
(0233)     if(tvalue<0x0fff)
     249 01C2      MOVW	R24,R4
     24A 3F8F      CPI	R24,0xFF
     24B E0EF      LDI	R30,0xF
     24C 079E      CPC	R25,R30
     24D F420      BCC	0x0252
(0234)    tflag=0;
     24E 2422      CLR	R2
     24F 9220 00BC STS	tflag,R2
     251 C00E      RJMP	0x0260
(0235)     else
(0236)    {
(0237)      tvalue=~tvalue+1;
     252 9180 00BD LDS	R24,tvalue
     254 9190 00BE LDS	R25,tvalue+1
     256 9580      COM	R24
     257 9590      COM	R25
     258 9601      ADIW	R24,1
     259 9390 00BE STS	tvalue+1,R25
     25B 9380 00BD STS	tvalue,R24
(0238)      tflag=1;
     25D E081      LDI	R24,1
     25E 9380 00BC STS	tflag,R24
(0239)    }
(0240)     tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
     260 E504      LDI	R16,0x54
     261 E010      LDI	R17,0
     262 940E 02CF CALL	lpm32
     264 0118      MOVW	R2,R16
     265 0129      MOVW	R4,R18
     266 9100 00BD LDS	R16,tvalue
     268 9110 00BE LDS	R17,tvalue+1
     26A 940E 030F CALL	uint2fp
     26C 933A      ST	R19,-Y
     26D 932A      ST	R18,-Y
     26E 931A      ST	R17,-Y
     26F 930A      ST	R16,-Y
     270 0181      MOVW	R16,R2
     271 0192      MOVW	R18,R4
     272 940E 0407 CALL	fpmule2
     274 940E 02E3 CALL	fpint
     276 9310 00BE STS	tvalue+1,R17
     278 9300 00BD STS	tvalue,R16
(0241)      ds1820disp();
     27A DEE0      RCALL	_ds1820disp
(0242)       delay1ms(1000);
     27B EE08      LDI	R16,0xE8
     27C E013      LDI	R17,3
     27D DDFF      RCALL	_delay1ms
     27E 9180 00BF LDS	R24,n
     280 5F8F      SUBI	R24,0xFF
     281 9380 00BF STS	n,R24
     283 9180 00BF LDS	R24,n
     285 3084      CPI	R24,4
     286 F408      BCC	0x0288
     287 CF79      RJMP	0x0201
     288 940C 02BF JMP	pop_xgset303C
(0243)     }   
(0244)   }
(0245) /********************主程序***********************************/
(0246)    void main()
(0247)     { 
_main:
     28A C001      RJMP	0x028C
(0248)      while(1)
(0249)       {
(0250)       readandisp_temp();//读取和显示温度
FILE: <library>
     28B DF68      RCALL	_readandisp_temp
     28C CFFE      RJMP	0x028B
     28D 9508      RET
mod16u:
     28E 9468      BSET	6
     28F C001      RJMP	xdiv16u
div16u:
     290 94E8      BCLR	6
xdiv16u:
     291 92EA      ST	R14,-Y
     292 92FA      ST	R15,-Y
     293 938A      ST	R24,-Y

⌨️ 快捷键说明

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