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

📄 text1.lst

📁 DS18B20的51驱动。 用STC89C52成功测试。
💻 LST
字号:
C51 COMPILER V7.06   TEXT1                                                                 08/11/2008 12:53:33 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          sbit TMDAT =P3^1; //DS18B20的数据输入/输出脚DQ,根据情况设定 
   3          unsigned int sdata;//测量到的温度的整数部分
   4          unsigned char xiaoshu1;//小数第一位
   5          unsigned char xiaoshu2;//小数第二位
   6          unsigned char xiaoshu;//两位小数
   7          bit fg=0; //温度正负标志
   8          code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,
   9                                                                          0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //显示段码
  10          void Delay(unsigned int tc){ //显示延时程序
  11   1              while( tc != 0 ){
  12   2                      unsigned int i;
  13   2                      for(i=0; i<100; i++);
  14   2                      tc--;
  15   2              }
  16   1      }
  17          
  18          void dmsec (unsigned int count){//延时部分
  19   1              unsigned char i;
  20   1              while(count--){
  21   2                      for(i=0;i<115;i++);
  22   2              }
  23   1      }
  24          void tmreset (void){ //发送复位
  25   1              unsigned char i;
  26   1              TMDAT=0; for(i=0;i<103;i++);
  27   1              TMDAT = 1; for(i=0;i<4;i++);
  28   1              }
  29          bit tmrbit (void){ //读一位//
  30   1              unsigned int i;
  31   1              bit dat;
  32   1              TMDAT = 0;
  33   1              i++;
  34   1              TMDAT = 1;
  35   1              i++; i++; //微量延时 //
  36   1              dat = TMDAT;
  37   1              for(i=0;i<8;i++);
  38   1              return (dat);
  39   1      }
  40          unsigned char tmrbyte (void){ //读一个字节
  41   1              unsigned char i,j,dat;
  42   1              dat = 0;
  43   1              for (i=1;i<=8;i++){
  44   2                      j = tmrbit(); dat = (j << 7) | (dat >> 1); 
  45   2              }
  46   1              return (dat);
  47   1      }
  48          void tmwbyte (unsigned char dat){ //写一个字节
  49   1              unsigned char j,i;
  50   1              bit testb;
  51   1              for (j=1;j<=8;j++){
  52   2                      testb = dat & 0x01;
  53   2                      dat = dat >> 1;
  54   2                      if (testb){
  55   3                              TMDAT = 0; //写0
C51 COMPILER V7.06   TEXT1                                                                 08/11/2008 12:53:33 PAGE 2   

  56   3                              i++; i++;
  57   3                              TMDAT = 1;
  58   3                              for(i=0;i<8;i++); 
  59   3                      }
  60   2                      else{
  61   3                              TMDAT = 0; //写0
  62   3                              for(i=0;i<8;i++);
  63   3                              TMDAT = 1;
  64   3                              i++; i++;
  65   3                      }
  66   2              }
  67   1      }
  68          void tmstart (void){ //发送ds1820 开始转换
  69   1              tmreset(); //复位
  70   1              dmsec(1); //延时
  71   1              tmwbyte(0xcc); //跳过序列号命令
  72   1              tmwbyte(0x44); //发转换命令 44H,
  73   1      }
  74          void tmrtemp (void){//读取温度
  75   1              unsigned char a,b;
  76   1              tmreset (); //复位
  77   1              dmsec (1); //延时
  78   1              tmwbyte (0xcc); //跳过序列号命令
  79   1              tmwbyte (0xbe); //发送读取命令
  80   1              a = tmrbyte (); //读取低位温度
  81   1              b = tmrbyte (); //读取高位温度
  82   1              if(b>0x7f){ //最高位为1时温度是负
  83   2                      a=~a; b=~b+1; //补码转换,取反加一
  84   2                      fg=0;  //读取温度为负时fg=0
  85   2              }
  86   1              sdata = a/16+b*16; //整数部分
  87   1              xiaoshu1 = (a&0x0f)*10/16; //小数第一位
  88   1              xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位
  89   1              xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
  90   1      }
  91          void DS18B20PRO(void){
  92   1              tmstart();
  93   1              //dmsec(5); //如果是不断地读取的话可以不延时 //
  94   1              tmrtemp(); //读取温度,执行完毕温度将存于TMP中 //
  95   1      }
  96          void Led(){
  97   1              if(fg==0){ //温度为正时显示的数据
  98   2                      P1=P1&0xfe;
  99   2                      P0=seg7code[sdata/10]; //输出十位数
 100   2                      Delay(8); P1=P1|0x0f; P1=P1&0xfd;
 101   2                      P0=seg7code[sdata%10]|0x80; //输出个位和小数点
 102   2                      Delay(8); P1=P1|0x0f; P1=P1&0xfb;
 103   2                      P0=seg7code[xiaoshu1]; //输出小数点后第一位
 104   2                      Delay(8); P1=P1|0x0f; P1=P1&0xf7;
 105   2                      P0=seg7code[xiaoshu2]; //输出小数点后第二位
 106   2                      Delay(4); P1=P1|0x0f;
 107   2              }
 108   1              if(fg==1){ //温度为负时显示的数据
 109   2                      P1=P1&0xfe;
 110   2                      P0=seg7code[10]; //负号
 111   2                      Delay(8); P1=P1|0x0f; P1=P1&0xfd;
 112   2                      P0=seg7code[sdata/10]|0x80; //输出十位数
 113   2                      Delay(8); P1=P1|0x0f; P1=P1&0xfb;
 114   2                      P0=seg7code[sdata%10]; //输出个位和小数点
 115   2                      Delay(8); P1=P1|0x0f; P1=P1&0xf7;
 116   2                      P0=seg7code[xiaoshu1]; //输出小数点后第一位
 117   2                      Delay(4); P1=P1|0x0f;
C51 COMPILER V7.06   TEXT1                                                                 08/11/2008 12:53:33 PAGE 3   

 118   2              }
 119   1      }
 120          main(){
 121   1              fg=1;
 122   1      //      sdata=33;
 123   1              while(1){
 124   2                      DS18B20PRO();
 125   2                      Led();
 126   2              }
 127   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    511    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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