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

📄 ds18b20_pwm.lst

📁 数字温度PWM控制仪
💻 LST
📖 第 1 页 / 共 2 页
字号:
 174   1                
 175   1                disdata[0]=tvalue/1000+0x30;//百位数
 176   1           disdata[1]=tvalue%1000/100+0x30;//十位数
 177   1           disdata[2]=tvalue%100/10+0x30;//个位数
 178   1           disdata[3]=tvalue%10+0x30;//小数位
 179   1          
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 4   

 180   1           if(tflag==0)
 181   1                  flagdat=0x20;//正温度不显示符号
 182   1           else
 183   1             flagdat=0x2d;//负温度显示负号:-
 184   1      
 185   1           if(disdata[0]==0x30)
 186   1                 {disdata[0]=0x20;//如果百位为0,不显示
 187   2                       if(disdata[1]==0x30)
 188   2                        {disdata[1]=0x20;//如果百位为0,十位为0也不显示
 189   3                        }
 190   2                      }
 191   1             
 192   1                 Write_Com(0xCa);
 193   1                 Write_Dat(Tset/2000+0x30);//显示周期百位 Tset/20/100+0x30 
 194   1           
 195   1             Write_Com(0xCb);
 196   1                 Write_Dat(Tset/200%10+0x30);//显示周期十位  Tset/20/10%10+0x30
 197   1      
 198   1                 Write_Com(0xCc);
 199   1                 Write_Dat(Tset/20%10+0x30);//显示周期个位   Tset/20%10+0x30
 200   1              
 201   1             Write_Com(0x81);
 202   1                 Write_Dat(flagdat);//显示符号位
 203   1                 Write_Com(0x82);
 204   1                 Write_Dat(disdata[0]);//显示百位
 205   1                 Write_Com(0x83);
 206   1                 Write_Dat(disdata[1]);//显示十位     
 207   1                 Write_Com(0x84);
 208   1                 Write_Dat(disdata[2]);//显示个位     
 209   1                 Write_Com(0x85);
 210   1                 Write_Dat(0x2e);//显示小数点         
 211   1                 Write_Com(0x86);
 212   1                 Write_Dat(disdata[3]);//显示小数位
 213   1            
 214   1          
 215   1             Write_Com(0x8d);
 216   1             Write_Dat(SetTemp/10+0x30);  //显示设置温度十位
 217   1             Write_Com(0x8e);  
 218   1             Write_Dat(SetTemp%10+0x30);  //显示设置温度各位
 219   1                 Write_Com(0x8f);  
 220   1             Write_Dat('C');
 221   1      
 222   1             
 223   1         }
 224          
 225          
 226          void TO_Service (void) interrupt 1 using 3
 227                  {       
 228   1                       TH0 = 0x3C;                    //重装设置初值50MS
 229   1               TL0 = 0x0B0;
 230   1                      if(count==Tset) {count = 0;}
 231   1                      count++;
 232   1                      if(count<=Tset/20*(SetTemp-temp)) Light=0;  //小于高电平的次数灯亮
 233   1                      else Light=1;
 234   1          }
 235          void initTO(void)
 236              {
 237   1                 TMOD=0X11;
 238   1                 EA=1;
 239   1                 ET0=0;
 240   1                 TH0 = 0x3C;
 241   1             TL0 = 0x0B0;
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 5   

 242   1             TH1 = 0x3C;
 243   1             TL1 = 0x0B0;
 244   1             ET1 = 1;
 245   1             TR1 = 1;
 246   1             TR0=0;
 247   1                      
 248   1              }
 249          
 250          
 251          
 252          void Timer1Interrupt(void) interrupt 3
 253          {
 254   1          TH1 = 0x3C;
 255   1          TL1 = 0x0B0;
 256   1          if(count1==10) {count1=0;read_temp();}  //0.5S读一次温度
 257   1          count1++;  
 258   1        // keyscan();
 259   1          
 260   1          
 261   1      }
 262          
 263          void delay20ms(void)   //误差 0us
 264          {
 265   1          unsigned char a,b;
 266   1          for(b=215;b>0;b--)
 267   1              for(a=45;a>0;a--);
 268   1          _nop_;  //if Keil,require use intrins.h
*** WARNING C275 IN LINE 268 OF DS18B20_PWM.C: expression with possibly no effect
 269   1          _nop_;  //if Keil,require use intrins.h
*** WARNING C275 IN LINE 269 OF DS18B20_PWM.C: expression with possibly no effect
 270   1      }
 271          void keyscan()
 272                  {
 273   1                      if(key==0||key2==0||key3==0) 
 274   1                              delay20ms();
 275   1                     {
 276   2                              if(key==0)
 277   2                                              {SetTemp++; 
 278   3                                                      Disp();
 279   3                                 if(SetTemp==100)  SetTemp=0;
 280   3                           }
 281   2                       if(key2==0)
 282   2                                       {SetTemp--;
 283   3                                                      Disp(); 
 284   3                                                              if(SetTemp==-1)   SetTemp=99;
 285   3      
 286   3                           }
 287   2                                        if(key3==0)
 288   2                                               {
 289   3                             Tset+=20;count=0;//count必须清零,否则中断里的count不知道加到多少,造成紊乱
 290   3                                                      Disp();
 291   3                                                                      if(Tset==20000) Tset=20;                      
 292   3                                                }     
 293   2                                         if(key4==0)
 294   2                                               { 
 295   3                                                if(Tset==20) Tset=20000;      
 296   3                             Tset-=20;count=0;//count必须清零,否则中断里的count不知道加到多少,造成紊乱
 297   3                                                      Disp();
 298   3                                                      
 299   3                                                                                            
 300   3                                                }             
 301   2                      }
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 6   

 302   1       }
 303          
 304          /********************主程序***********************************/
 305           void main()
 306           { init_play();//初始化显示
 307   1         
 308   1         initTO();   //TO初始化
 309   1         while(1)
 310   1              { keyscan();
 311   2            Disp();//显示
 312   2           if((SetTemp-20)>0){
 313   3                                                       if(temp>=SetTemp) {ET0=0;Light=1;
 314   4                                                                                              Write_Com(0xC4);Write_Dat('0');
 315   4                                                                                              Write_Com(0xC5);Write_Dat('0');
 316   4                                                                                              Write_Com(0xC6);Write_Dat('*');
 317   4                                                                                              } //如果温度值大于等于50度,灯灭
 318   3                                                       if(temp>(SetTemp-20)&&temp<SetTemp) {TR0=1;ET0=1;
 319   4                                                                                                                                      Write_Com(0xC4);Write_Dat(((SetTemp-temp)*100/20)/10+0x30);
 320   4                                                                                                                                      Write_Com(0xC5);Write_Dat(((SetTemp-temp)*100/20)%10+0x30);
 321   4                                                                                                                                      Write_Com(0xC6);Write_Dat('%');} //如果温度值在30和50度之间,开中断,输出PWM波,显示占空比
 322   3                                                       if(temp<=SetTemp-20) {ET0=0;Light=0;
 323   4                                                                                                Write_Com(0xC4);Write_Dat('0');
 324   4                                                                                                Write_Com(0xC5);Write_Dat('1');
 325   4                                                                                                Write_Com(0xC6);Write_Dat('*');}// 如果温度值小于30度,关中断,灯亮
 326   3                                 }
 327   2           if ((SetTemp-20)<=0){ET0=0;Light=1;
 328   3                                                        Write_Com(0xC5);Write_Dat('0');
 329   3                                Write_Com(0xC6);Write_Dat('*');}//如果设置温度小于当前温度,占空比显示00*
 330   2              }
 331   1        }
 332          
 333          
 334          
 335          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1514    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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