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

📄 ds18b20_pwm.lst

📁 数字温度PWM控制仪
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   DS18B20_PWM                                                           06/25/2010 17:30:16 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          sbit DQ=P3^3;//ds18b20与单片机连接口
  12          sbit RS=P2^0;
  13          sbit RW=P2^1;
  14          sbit EN=P2^2;
  15          
  16          unsigned char code str1[]={"D/C:  % T:  3S  "};
  17          unsigned char code str2[]={"t      C Set:50C"}; 
  18          
  19          
  20          uchar data disdata[5];
  21          uint tvalue;//温度值
  22          uchar tflag;//温度正负标志
  23          //uint  Tset=60; //设置周期
  24          
  25          sbit  Light = P2^3;   //控制LED显示
  26          sbit  key  = P1^0;      //调整设置温度加
  27          sbit  key2 = P1^1;      //调整设置温度减
  28          sbit  key3 = P1^2;      //调整周期加,步进20
  29          sbit  key4 = P1^3;      //调整周期减,步进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          
  38          
  39          
  40          /*************************lcd1602程序**************************/
  41           void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  42           {unsigned int i,j;
  43   1         for(i=0;i<ms;i++)
  44   1          for(j=0;j<100;j++);
  45   1       }
  46          
  47          void Write_Com(unsigned char com)//写指令//
  48           {  delay1ms(1);
  49   1         RS=0;
  50   1         RW=0;
  51   1         EN=0;
  52   1         P0=com;
  53   1         delay1ms(1);
  54   1         EN=1;
  55   1         delay1ms(1);
C51 COMPILER V8.02   DS18B20_PWM                                                           06/25/2010 17:30:16 PAGE 2   

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

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

⌨️ 快捷键说明

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