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

📄 ds1820ds.lst

📁 89C52单片机12M晶振下DS18B20温度传感器测量温度应用子程序源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   DS1820DS                                                              05/01/2005 18:17:00 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE DS1820DS
OBJECT MODULE PLACED IN DS1820ds.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1820ds.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          
   4          
   5          
   6          //**********************************************************************//
   7          //                                          头文件区                                //
   8          //**********************************************************************//
   9          
  10          #include <reg52.h>                                      /*单片机内部寄存器*/
  11          
  12          #include <intrins.h>                            /*内部函数调用,如_nop_() 、_crol_()、cror();*/
  13          
  14          #include <absacc.h>                             /*绝对地址访问,如XBYTE[0x0fff0]*/
  15          
  16          
  17          //**********************************************************************//
  18          //                                        全局变量定义区                            //
  19          //**********************************************************************//
  20          
  21          #define Com7218 XBYTE [0x0300]          //外部地址必须大于FF,否则不能正常读写
  22          
  23          #define IN0 XBYTE[0x8FFa]                       //定义ADC0809的通道0地址//ADC0809地址定义
  24          
  25          sbit ICM7218Mode = P1^4;                        //7218模式选择,状态为0是即选择送数据,
  26          
  27          sbit TSOR = P2^3;
  28          
  29          static unsigned char MSB=0,LSB=0;//温度值的整数部分,小数部分
  30          static unsigned char count_remain=0,count_pre_c=0;
  31          //**********************************************************************//
  32          //                                      7218字型码表 0~9,A~F                       //
  33          //**********************************************************************//
  34          unsigned char code table[]={0xFB,0xB0,0xED,0xF5,0xB6,   /* 0,1,2,3,4  */
  35                                                          0xD7,0xDF,0xF0,0xFF,0xF7,       /* 5,6,7,8,9  */
  36                                                          0xFE,0x9F,0xCB,0xBD,0xCF,       /* A,b,C,d,E  */
  37                                                          0xCE,0x00,0x80,0xEE,0xF6,       /* F,.(16),blank(17),P(18),q(19)*/
  38                                                          0xBE,0x84,0xBB,0xFA             /* H(20), -(21),U(22),n(23)    */
  39                                             };                                           /*字型码表    */
  40          
  41          unsigned char code top_table[]={0x7b,0x30,0x6D,0x75,0x36,0x57,0x5F,0x70,0x7F,0x77};
  42                                               // 0.,1.,2.,3.,4., 5.,6.,7.,8.,9.  小数点显示 
  43            
  44          unsigned char buffer[8]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
  45                                                                   //码表缓冲区
  46          
  47          //**********************************************************************//
  48          //                                      延时子程序                                 //
  49          //**********************************************************************//
  50          void delay(unsigned int d)              //延时d微秒
  51          {
  52   1              while(d--);
  53   1      }         
  54          
  55          void delay100ms(void)
C51 COMPILER V7.09   DS1820DS                                                              05/01/2005 18:17:00 PAGE 2   

  56          {
  57   1              unsigned char i,j,k;
  58   1              for(i=0;i<8;i++)
  59   1                      for(j=0;j<25;j++)
  60   1                              for(k=0;k<250;k++);
  61   1      }
  62          
  63          void delay15us(void)
  64          {
  65   1              unsigned char i;
  66   1              for(i=0;i<8;i++);
  67   1      }
  68          
  69          void delay60us(void)
  70          {
  71   1              unsigned char i;
  72   1              for(i=0;i<30;i++);
  73   1      }
  74          
  75          
  76          void showdate(unsigned int t)
  77          {
  78   1              unsigned char mil,tho,hun,ten,one,i;
  79   1              unsigned int count;
  80   1              count=t;
  81   1      
  82   1              mil=t/10000;
  83   1              tho=t/1000%10;
  84   1              hun=t/100%10;
  85   1              ten=t/10%10;
  86   1              one=t%10;
  87   1      
  88   1              if(mil==0)
  89   1              {
  90   2                      buffer[4] = 0x80;
  91   2              }
  92   1              else
  93   1          {      
  94   2                      buffer[4] = table[mil];
  95   2          }
  96   1              
  97   1              if(mil==0&&tho==0)
  98   1          {
  99   2              buffer[3] = 0x80;
 100   2              }
 101   1              else
 102   1              {
 103   2                      if((count>=100)&&(count<=999))
 104   2                      buffer[3] = top_table[tho];
 105   2                      else buffer[3] = table[tho];
 106   2              }
 107   1                      
 108   1              if(mil==0&&tho==0&&hun==0)
 109   1          {
 110   2              buffer[2] =  0x80;
 111   2              }
 112   1              else
 113   1              {
 114   2                      if((count>=10)&&(count<=99))
 115   2                              buffer[2] = top_table[hun];
 116   2                      else buffer[2] = table[hun];
 117   2              }
C51 COMPILER V7.09   DS1820DS                                                              05/01/2005 18:17:00 PAGE 3   

 118   1                      
 119   1      
 120   1              if(mil==0&&tho==0&&hun==0&&ten==0)
 121   1              {
 122   2                      buffer[1] = 0x80;
 123   2              }
 124   1              else
 125   1              {
 126   2                      buffer[1] = table[ten];
 127   2              }
 128   1      
 129   1              buffer[0] = table[one];
 130   1        
 131   1              ICM7218Mode = 1 ;  //ICM7218B的方式字
 132   1              Com7218 = 0xF0 ;         //非译码方式
 133   1        
 134   1              delay(10);
 135   1      
 136   1              //连续向显示芯片送显示数据
 137   1              //=======================
 138   1              ICM7218Mode=0;
 139   1              for(i=0;i<8;i++)
 140   1              {
 141   2              Com7218 = buffer[ i ] ;
 142   2              }
 143   1      }
 144          
 145          
 146          void write_0_DS(void)//写 bit 0
 147          {//写数据位0:置总线为低电平并保持至少15us,
 148   1      //然后保持低电平15us~45us等待从端对电平采样,最后拉高电平完成写操作
 149   1              TSOR=1;
 150   1              TSOR=0;
 151   1              delay15us();
 152   1              delay15us();
 153   1              delay15us();
 154   1              delay15us();
 155   1              delay15us();
 156   1      
 157   1              TSOR=1;
 158   1      
 159   1              _nop_();
 160   1              _nop_();
 161   1      }
 162          
 163          void write_1_DS(void)//写 bit 1
 164          {//写数据位1:置总线为低电平并保持1us~15us,
 165   1      //然后拉高电平并保持15us~45us等待从端对电平采样,最后完成写操作
 166   1              TSOR=1;
 167   1              TSOR=0;

⌨️ 快捷键说明

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