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

📄 ds18b20_pwm.lst

📁 数字温度PWM控制仪
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20_PWM
OBJECT MODULE PLACED IN ds18b20_pwm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds18b20_pwm.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include "intrins.h"
   3          
   4          
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          void keyscan();
   8          void delay20ms(void);
   9          
  10          
  11          
  12          //unsigned char code str1[]={"D/C:  % T:  3S  "};
  13          //unsigned char code str2[]={"t      C Set:50C"}; 
  14          
  15          unsigned char code str1[]=  {"t      C Set:50C"};
  16          unsigned char code str2[]=  {"D/C:  % T:  3S  "}; 
  17          
  18          
  19          
  20          uchar data disdata[5];
  21          uint tvalue;//温度值
  22          uchar tflag;//温度正负标志
  23          //uint  Tset=60; //设置周期
  24          
  25          sbit  Light = P2^7;   //控制LED显示
  26          sbit  key  = P1^5;      //调整设置温度加
  27          sbit  key2 = P1^6;      //调整设置温度减
  28          sbit  key3 = P1^7;      //调整周期加,步进20
  29          sbit  key4 = P2^0;      //调整周期减,步进20
  30          int SetTemp=50;      //温度初始值
  31          unsigned long int Tset=60; //设置周期 
  32          int temp=0;                           //温度中间变量
  33          uint count1=0;                    
  34          
  35          unsigned long int count=0;  //计数器
  36          
  37          sbit DQ=P3^7;//ds18b20与单片机连接口
  38          sbit RS=P1^1;
  39          sbit RW=P2^1;
  40          sbit EN=P1^0;
  41          
  42          
  43          
  44          
  45          /*************************lcd1602程序**************************/
  46           void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  47           {unsigned int i,j;
  48   1         for(i=0;i<ms;i++)
  49   1          for(j=0;j<100;j++);
  50   1       }
  51          
  52          void Write_Com(unsigned char com)//写指令//
  53           {  delay1ms(1);
  54   1         RS=0;
  55   1         RW=0;
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 2   

  56   1         EN=0;
  57   1         P0=com;
  58   1         delay1ms(1);
  59   1         EN=1;
  60   1         delay1ms(1);
  61   1         EN=0;
  62   1        }
  63          
  64          void Write_Dat(unsigned char dat)//写数据//
  65          {  delay1ms(1);;
  66   1         RS=1;
  67   1         RW=0;
  68   1         EN=0;
  69   1         P0=dat;
  70   1         delay1ms(1);
  71   1         EN=1;
  72   1         delay1ms(1);
  73   1         EN=0;
  74   1      }
  75          
  76           void lcd_init()//初始化设置//
  77          {delay1ms(15);
  78   1        Write_Com(0x38);delay1ms(5);
  79   1         Write_Com(0x08);delay1ms(5);
  80   1          Write_Com(0x01);delay1ms(5);
  81   1           Write_Com(0x06);delay1ms(5);
  82   1            Write_Com(0x0c);delay1ms(5);
  83   1      }
  84          
  85          
  86           void display(unsigned char *p)//显示//
  87          {
  88   1      while(*p!='\0')
  89   1      {
  90   2      Write_Dat(*p);
  91   2      p++;
  92   2      delay1ms(1);
  93   2      }
  94   1      }
  95          
  96            init_play()//初始化显示
  97            { lcd_init();
  98   1          Write_Com(0x80);
  99   1               display(str1);
 100   1               Write_Com(0xc0);
 101   1               display(str2);
 102   1         }
 103          
 104          /******************************ds1820程序***************************************/
 105           void delay_18B20(unsigned int i)//延时1微秒
 106          {
 107   1              while(i--);
 108   1      }
 109          
 110          void ds1820rst()/*ds1820复位*/
 111           {  unsigned char x=0;
 112   1               DQ = 1;          //DQ复位
 113   1               delay_18B20(4);  //延时
 114   1               DQ = 0;          //DQ拉低
 115   1               delay_18B20(100); //精确延时大于480us
 116   1               DQ = 1;          //拉高
 117   1               delay_18B20(40);        
C51 COMPILER V8.02   DS18B20_PWM                                                           01/02/2003 13:13:40 PAGE 3   

 118   1         }  
 119            
 120             uchar ds1820rd()/*读数据*/
 121            { unsigned char i=0;
 122   1               unsigned char dat = 0;
 123   1               for (i=8;i>0;i--)
 124   1               {   DQ = 0; //给脉冲信号
 125   2                        dat>>=1;
 126   2                        DQ = 1; //给脉冲信号
 127   2                        if(DQ)
 128   2                        dat|=0x80;
 129   2                        delay_18B20(10);
 130   2               }
 131   1              return(dat);
 132   1        }
 133          
 134            void ds1820wr(uchar wdata)/*写数据*/
 135            {unsigned char i=0;
 136   1          for (i=8; i>0; i--)
 137   1         { DQ = 0;
 138   2           DQ = wdata&0x01;
 139   2           delay_18B20(10);
 140   2           DQ = 1;
 141   2           wdata>>=1;
 142   2         }
 143   1       }
 144            
 145           
 146          
 147            read_temp()/*读取温度值并转换*/
 148           {uchar a,b;
 149   1        ds1820rst();    
 150   1        ds1820wr(0xcc);//*跳过读序列号*/
 151   1        ds1820wr(0x44);//*启动温度转换*/
 152   1        ds1820rst();    
 153   1        ds1820wr(0xcc);//*跳过读序列号*/ 
 154   1        ds1820wr(0xbe);//*读取温度*/ 
 155   1        a=ds1820rd();
 156   1        b=ds1820rd();
 157   1        tvalue=b;
 158   1        tvalue<<=8;
 159   1        tvalue=tvalue|a;
 160   1          if(tvalue<0x0fff)
 161   1         tflag=0;
 162   1          else
 163   1         {tvalue=~tvalue+1;
 164   2               tflag=1;
 165   2         }
 166   1        tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 167   1        temp=tvalue/10;
 168   1              return(tvalue);
 169   1        }
 170          
 171          /*******************************************************************/
 172             void Disp()//温度值显示
 173                  { uchar flagdat;

⌨️ 快捷键说明

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