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

📄 text.lst

📁 语音温度智能报警系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 195          void Init_DS18B20(void) 
 196          {
 197   1               unsigned char x=0;
 198   1               DQ = 1;          //DQ复位
 199   1               delay_18B20(8);  //稍做延时
 200   1               DQ = 0;          //单片机将DQ拉低
 201   1               delay_18B20(80); //精确延时 大于 480us
 202   1               DQ = 1;          //拉高总线
 203   1               delay_18B20(14);
 204   1               x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 205   1               delay_18B20(20);
 206   1      }
 207          
 208          /***********ds18b20读一个字节**************/  
 209          
 210          unsigned char ReadOneChar(void)
 211          {
 212   1              uchar i=0;
 213   1              uchar dat = 0;
 214   1              for (i=8;i>0;i--)
 215   1               {
 216   2                        DQ = 0; // 给脉冲信号
 217   2                        dat>>=1;
 218   2                        DQ = 1; // 给脉冲信号
 219   2                        if(DQ)
 220   2                        dat|=0x80;
 221   2                        delay_18B20(4);
 222   2               }
 223   1              return(dat);
 224   1      }
 225          /*************ds18b20写一个字节****************/  
 226          
 227          void WriteOneChar(uchar dat)
 228          {
 229   1              unsigned char i=0;
 230   1              for (i=8; i>0; i--)
 231   1              {
 232   2                      DQ = 0;
 233   2                      DQ = dat&0x01;
 234   2              delay_18B20(5);
 235   2                      DQ = 1;
 236   2              dat>>=1;
 237   2       }
 238   1      }
 239          
 240          /**************读取ds18b20当前温度************/
 241          
C51 COMPILER V8.02   TEXT                                                                  04/04/2007 18:33:49 PAGE 5   

 242          void ReadTemperature(void)
 243          {
 244   1              unsigned char a=0;
 245   1              unsigned char b=0;
 246   1              unsigned int  t=0;
 247   1      
 248   1              Init_DS18B20();
 249   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
 250   1              WriteOneChar(0x44);     // 启动温度转换
 251   1      
 252   1              delay_18B20(100);       // this message is wery important
 253   1      
 254   1              Init_DS18B20();
 255   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 256   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 257   1      
 258   1              delay_18B20(100);
 259   1      
 260   1              a=ReadOneChar();        //读取温度值低8位
 261   1              b=ReadOneChar();                //读取温度值高8位
 262   1              temp1=b<<4;            
 263   1              temp1+=(a&0xf0)>>4;     //小数点前的数据
 264   1              temp2=a&0x0f;           //小数点后的数据
 265   1          temp=temp1;
 266   1          
 267   1      //    temp=((b*256+a)>>4);//当前采集温度值除16得实际温度值
 268   1              
 269   1          
 270   1      
 271   1      //      temp1 = t/100%10;       //温度值十位
 272   1      //  temp2 = t/10%10;        //温度值个位  
 273   1      //      temp3 = t%10;           //温度值十分位
 274   1      }
 275          
 276          /***************液晶显示子函数1正常显示*****************/
 277          
 278          void displayfun1(void)
 279          {       
 280   1              WriteCommandLCM(0x0c,1);                                         //显示屏打开,光标不显示,不闪烁,检测忙信号   
 281   1              DisplayListChar(0,0,str0);      
 282   1              DisplayListChar(0,1,str1);      
 283   1              
 284   1              DisplayOneChar(3,0,hour/10+0x30);
 285   1              DisplayOneChar(4,0,hour%10+0x30);
 286   1      
 287   1              DisplayOneChar(6,0,minite/10+0x30);
 288   1              DisplayOneChar(7,0,minite%10+0x30);
 289   1              
 290   1              DisplayOneChar(9,0, seconde/10+0x30);
 291   1              DisplayOneChar(10,0,seconde%10+0x30);
 292   1       
 293   1              DisplayOneChar(5,1,temp1/10+0x30);               
 294   1              DisplayOneChar(6,1,temp1%10+0x30);
 295   1              DisplayOneChar(8,1,temp2/10+0x30);
 296   1      }
 297          
 298          /***************定时器t0初始化*******************/
 299          
 300          
 301          void init_timer0(void)
 302          {
 303   1               TMOD=0x01;              //time0为定时器,方式1
C51 COMPILER V8.02   TEXT                                                                  04/04/2007 18:33:49 PAGE 6   

 304   1           TH0=0x3c;               //预置计数初值
 305   1           TL0=0xb0;
 306   1           EA=1;                                                              
 307   1           ET0=1;                                                                                             
 308   1           TR0=1;                     
 309   1      }
 310          
 311          /***********定时器t0中断子函数**************/
 312          
 313          void timer0(void) interrupt 1 using 0         //定时器0方式1,50ms中断一次
 314          {
 315   1           TH0=0x3c;
 316   1           TL0=0xb0;
 317   1           mstcnt++;
 318   1           if(mstcnt>=20 )  {seconde++; mstcnt=0; }
 319   1               if(seconde>=60)  {minite++;  seconde=0;}
 320   1               if(minite>=60 )  {hour++;    minite=0; }
 321   1               if(hour>=24   )  {hour=0;}
 322   1      }
 323          
 324          
 325          /*****************系统报警子函数***************************/
 326          
 327          void playalarm(void)                    //语音提示温度上升过快
 328          {
 329   1              
 330   1          if(temp>20&&temp<25)              
 331   1              {
 332   2                      RED_ALARM=0;
 333   2                      PLAYE_ADDR=0x11;
 334   2              _nop_();
 335   2                      PLAYE_ADDR=0x10;
 336   2                      delay_LCM(2000);                 //等待放音结束
 337   2                      RED_ALARM=1;
 338   2              }
 339   1              
 340   1              if(temp>25&&temp<30)                //语音提示温度上升过慢
 341   1              {
 342   2                      GREEN_ALARM=0;
 343   2                      PLAYE_ADDR=0x21;
 344   2                      _nop_();
 345   2                      PLAYE_ADDR=0x20;
 346   2                  delay_LCM(2000);
 347   2                      GREEN_ALARM=1;
 348   2              }
 349   1              
 350   1              if(temp>30)                         //语音提示恒温控制
 351   1              {
 352   2                      WRITE_ALARM=0;
 353   2                      PLAYE_ADDR=0x31;
 354   2                      _nop_();
 355   2                      PLAYE_ADDR=0x30;
 356   2                      delay_LCM(1000);
 357   2                      WRITE_ALARM=1;
 358   2              }
 359   1      }
 360          
 361          /***************the main funtion****************/
 362              
 363          void main(void)
 364          { 
 365   1          P1=0xff;                                   //初始化p1口,全设为1   
C51 COMPILER V8.02   TEXT                                                                  04/04/2007 18:33:49 PAGE 7   

 366   1              P3=0xff;    
 367   1              delay_LCM(500);  
 368   1              initLCM( );                                //LCD初始化
 369   1              init_timer0( );                            //时钟定时器0初始化  
 370   1              DisplayListChar(0,0,str0);      
 371   1              DisplayListChar(0,1,str1);
 372   1              Init_DS18B20( );                           //DS18B20初始化
 373   1                                                                      
 374   1          while (1)
 375   1          {                                        
 376   2                      delay_LCM(10);
 377   2                      ReadTemperature( );
 378   2                      playalarm( );
 379   2              displayfun1( );
 380   2              delay_LCM(10);
 381   2              }
 382   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    847    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      10
   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 + -