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

📄 便携式温度计.lst

📁 小型便携式温度计的源代码第一版
💻 LST
📖 第 1 页 / 共 2 页
字号:
 164          
 165          /***********************读18B20ID**********************/
 166          void ReadID ()//读取器件 id
 167          {
 168   1              p = id_buff;
 169   1              Init18b20();
 170   1              WriteByte(0x33);  //read rom
 171   1              reads(8);
 172   1      }
 173          
 174          /********************温度转换全处理********************/
 175          void Temperature_change()
 176          {
 177   1              Init18b20 ();//初始化18B20
 178   1              WriteByte(0xcc);   //跳过ROM
 179   1              WriteByte(0x44);   //启动温度转换
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 4   

 180   1              mDelay(50);//重要延时
 181   1              Init18b20 ();
 182   1              WriteByte(0xcc);   //跳过ROM
 183   1              WriteByte(0xbe);   //读取温度
 184   1              p = temp_buff;
 185   1              reads (9);
 186   1              if (CRC(9)==0) //校验正确
 187   1              {
 188   2                      if(temp_buff[1]<0xF0)//温度大于0度
 189   2                      {
 190   3                              DispLED[3]=(temp_buff[0]&0x0F)*625/1000%10;//小数
 191   3                              Temperature=(temp_buff[0]>>4)+(temp_buff[1]<<4);
 192   3                              DispLED[2]=Temperature%10;//个位
 193   3                              DispLED[1]=Temperature/10;//十位
 194   3                              DispLED[0]=Temperature/100;//
 195   3                      }
 196   2                      else//温度小于0度
 197   2                      {
 198   3                              temp_buff[0]=~temp_buff[0]+1;
 199   3                              temp_buff[1]=~temp_buff[1];
 200   3                              DispLED[3]=(temp_buff[0]&0x0F)*625/1000%10;//小数
 201   3                              Temperature=(temp_buff[0]>>4)+(temp_buff[1]<<4);
 202   3                              DispLED[2]=Temperature%10;//个位
 203   3                              DispLED[1]=Temperature/10;//十位
 204   3                              DispLED[0]=Temperature/100+10;//百位+负号
 205   3                      }
 206   2              }
 207   1      }
 208          
 209          /********************中断初始化函数********************/
 210          void Init_TIME0(void)
 211          {
 212   1              TH0=0x3C;//定时器付初值,100ms
 213   1              TL0=0xB0;
 214   1              TMOD|=0x01;//定时器0工作于定时状态,工作方式1
 215   1              ET0=1;//定时器0中断允许开
 216   1      }
 217                  
 218          /**********************中断服务函数***************************/
 219          void LED_timer0() interrupt 1
 220          {
 221   1              static uchar flag_interrupt;//中断次数标志
 222   1              static uchar stop_num;//系统停止计数器
 223   1              stop_num++;
 224   1              flag_interrupt++;
 225   1              if(stop_num>=50)
 226   1              {
 227   2                      P3&=0xFF;//关闭所有显示
 228   2                      PCON=STOP_;//5秒停机
 229   2              }
 230   1              if(flag_interrupt==4)//每0.5s转换一次温度
 231   1              {
 232   2                      TR0=0;
 233   2                      P3=0xFF;//关闭所有显示
 234   2                      Temperature_change();
 235   2                      flag_interrupt=0;
 236   2                      TR0=1;
 237   2              }
 238   1              TH0=0x3C;//定时器付初值
 239   1              TL0=0xB0;
 240   1      }
 241          
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 5   

 242          /**********************主函数******************************/
 243          void main()
 244          {
 245   1              uchar flag_LED;//数码管显示段位标志
 246   1              uint i;
 247   1              
 248   1              Init18b20 ();//初始化18B20
 249   1              if(flag==0)//效验错误
 250   1              {
 251   2                      DispLED[0]=12;//字母F
 252   2                      DispLED[1]=13;//字母A
 253   2                      DispLED[2]=14;//字母L
 254   2                      DispLED[3]=14;//字母L
 255   2                      for(i=1250;i>0;i--)
 256   2                      {
 257   3                              P1=DispDB[DispLED[flag_LED]];
 258   3                              P3=DispCon[flag_LED];
 259   3                              flag_LED+=1;
 260   3                              if(flag_LED==4)
 261   3                              {
 262   4                                      flag_LED=0;//flag_LED到4归零
 263   4                              }
 264   3                              mDelay(2);
 265   3                      }
 266   2                      P3=0xff;
 267   2                      PCON=STOP_;//主机进入掉电模式
 268   2              }
 269   1              else  
 270   1              {
 271   2                      ReadID();
 272   2                      Temperature_change();
 273   2              }
 274   1              
 275   1              Init_TIME0();
 276   1              EA=1;//中断总允许开
 277   1              TR0=1;
 278   1              while (1)
 279   1          {
 280   2                      P3|=0x3C;//关闭显示
 281   2                      P1=DispDB[DispLED[flag_LED]];
 282   2                      switch(flag_LED)
 283   2                      {
 284   3                              case 0:
 285   3                                      if(DispLED[0]==0)//首位0消隐
 286   3                                      {
 287   4                                              P3&=0xFF;//关闭显示
 288   4                                      }
 289   3                                      else
 290   3                                      {
 291   4                                              P3&=0xFB;
 292   4                                      }
 293   3                                      flag_LED+=1;
 294   3                                      break;
 295   3                              case 1:
 296   3                                      if((DispLED[0]==0) && (DispLED[1]==0))//次位0消隐
 297   3                                      {
 298   4                                              P3&=0xFF;//关闭显示
 299   4                                      }
 300   3                                      else
 301   3                                      {
 302   4                                              P3&=0xF7;
 303   4                                      }
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 6   

 304   3                                      flag_LED+=1;
 305   3                                      break;
 306   3                              case 2:
 307   3                                      P3&=0xEF;
 308   3                                      flag_LED+=1;
 309   3                                      break;
 310   3                              case 3:
 311   3                                      P3&=0xDF;
 312   3                                      flag_LED=0;
 313   3                                      break;
 314   3                      }
 315   2                      mDelay(1);
 316   2          }
 317   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    711    ----
   CONSTANT SIZE    =    296    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     28       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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