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

📄 便携式温度计.lst

📁 小型便携式温度计的源代码第一版
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 便衉式蝊度计
OBJECT MODULE PLACED IN 便携式温度计.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 便携式温度计.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************************************
   2          ;便携式温度计
   3          ;数码管引脚连接:a=P1.3 b=P1.2 c=P1.1 d=P1.0 e=P1.6 f=P1.4 g=P1.5 h=nc共阳;
   4          ;编写人:芦庆
   5          ;时间:2008年7月27日
   6          ;主控芯片:AT89C2051-24PU
   7          ;温度传感器:DS18B20
   8          ;占用资源:定时器0,P1口,P3.2,P3.3,P3.4,P3.5,P3.7
   9          ;晶振速度:6MHz
  10          ;版本:1.0
  11          ;ROM指令                                代码
  12          ;Read ROM(读ROM)                 [33H]
  13          ;Match ROM(匹配ROM)           [55H]
  14          ;Skip ROM(跳过ROM]             [CCH]
  15          ;Search ROM(搜索ROM)           [F0H]
  16          ;Alarm search(告警搜索)          [ECH]
  17          ;
  18          ;存储器操作指令                                         代码
  19          ;Write Scratchpad(写暂存存储器)         [4EH]
  20          ;Read Scratchpad(读暂存存储器)          [BEH]
  21          ;Copy Scratchpad(复制暂存存储器)        [48H]
  22          ;Convert Temperature(温度变换)                  [44H]
  23          ;Recall EPROM(重新调出)                         [B8H]
  24          ;Read Power supply(读电源)                      [B4H]
  25          ;
  26          ************************************************************************/
  27          
  28          /*****************数据类型定义***********************/
  29          #define uchar unsigned char
  30          #define uint unsigned int
  31          
  32          /****************包含文件声明************************/
  33          #include "intrins.h"
  34          #include "AT89x051.H"
  35          
  36          //定义数据引脚
  37          sbit dq=P3^7;
  38          
  39          /****************全局变量声明************************/
  40          uchar flag;//18b20存在标志
  41          uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节
  42          uchar id_buff[8];//64位id寄存
  43          uchar *p;//地址指针
  44          uchar Temperature;//温度换算中间寄存器
  45          uchar code CrcTable [256]={
  46          0,  94, 188,  226,  97,  63,  221,  131,  194,  156,  126,  32,  163,  253,  31,  65,
  47          157,  195,  33,  127,  252,  162,  64,  30,  95,  1,  227,  189,  62,  96,  130,  220,
  48          35,  125,  159,  193,  66,  28,  254,  160,  225,  191,  93,  3,  128,  222,  60,  98,
  49          190,  224,  2,  92,  223,  129,  99,  61,  124,  34,  192,  158,  29,  67,  161,  255,
  50          70,  24,  250,  164,  39,  121,  155,  197,  132,  218,  56,  102,  229,  187,  89,  7,
  51          219,  133, 103,  57,  186,  228,  6,  88,  25,  71,  165,  251,  120,  38,  196,  154,
  52          101,  59, 217,  135,  4,  90,  184,  230,  167,  249,  27,  69,  198,  152,  122,  36,
  53          248,  166, 68,  26,  153,  199,  37,  123,  58,  100,  134,  216,  91,  5,  231,  185,
  54          140,  210, 48,  110,  237,  179,  81,  15,  78,  16,  242,  172,  47,  113,  147,  205,
  55          17,  79,  173,  243,  112,  46,  204,  146,  211,  141,  111,  49,  178,  236,  14,  80,
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 2   

  56          175,  241, 19,  77,  206,  144,  114,  44,  109,  51,  209,  143,  12,  82,  176,  238,
  57          50,  108,  142,  208,  83,  13,  239,  177,  240,  174,  76,  18,  145,  207,  45,  115,
  58          202,  148, 118,  40,  171,  245,  23,  73,  8,  86,  180,  234,  105,  55,  213, 139,
  59          87,  9,  235,  181,  54,  104,  138,  212,  149,  203,  41,  119,  244,  170,  72,  22,
  60          233,  183,  85,  11,  136,  214,  52,  106,  43,  117,  151,  201,  74,  20,  246,  168,
  61          116,  42,  200,  150,  21,  75,  169,  247,  182,  232,  10,  84,  215,  137,  107,  53};
  62          uchar code DispDB[15]={//字形码
  63                  0xA0,0xF9,0x92,0xD0,0xC9,0xC4,0x84,0xF1,//0,1,2,3,4,5,6,7
  64                  0x80,0xC0,0xDF,0xD9,0x87,0x81,0xAE};//8,9,-,-1,F,A,L
  65          uchar code DispCon[4]={0xFB,0xF7,0xEF,0xDF};//段位控制码
  66          uchar DispLED[4];//数码管显示缓冲区
  67          
  68          uchar code DayStr[]=__DATE__;
  69          uchar code TimeStr[]=__TIME__;
  70          
  71          /*****************精确延时函数************************/
  72          void TempDelay (uchar us)//微秒级延时
  73          {
  74   1              while(us--);
  75   1      }
  76          
  77          /******************一般延时函数************************/
  78          void mDelay(uint num)
  79          {
  80   1              uint i;
  81   1              for(;num>0;num--)
  82   1              {       for(i=0;i<124;i++)
  83   2                              {;}
  84   2              }
  85   1      }
  86          
  87          /********************18B20初始化函数******************/
  88          void Init18b20 ()
  89          {
  90   1              dq=1;
  91   1              _nop_();
  92   1              dq=0;
  93   1              TempDelay(86/2);   //delay 530 uS//80
  94   1              _nop_();
  95   1              dq=1;
  96   1              TempDelay(14/2);   //delay 100 uS//14
  97   1              _nop_();
  98   1              _nop_();
  99   1              _nop_();
 100   1              
 101   1              if(dq==0)
 102   1                      flag = 1;   //detect 1820 success!
 103   1              else
 104   1                      flag = 0;    //detect 1820 fail!
 105   1              TempDelay(20/2);       //20
 106   1              _nop_();
 107   1              _nop_();
 108   1              dq = 1;
 109   1      }
 110          
 111          /********************向18B20写入一个字节***********/
 112          void WriteByte (uchar wr)  //单字节写入
 113          {
 114   1              uchar i;
 115   1              for (i=0;i<8;i++)
 116   1              {
 117   2                      dq = 0;
C51 COMPILER V8.08   便衉式蝊度计                                                          02/14/2009 14:33:38 PAGE 3   

 118   2                      _nop_();
 119   2                      dq=wr&0x01;
 120   2                      TempDelay(5/2);   //delay 45 uS //5
 121   2                      _nop_();
 122   2                      _nop_();
 123   2                      dq=1;
 124   2                      wr >>= 1;
 125   2              }
 126   1      }
 127          
 128          /***************读18B20的一个字节*******************/
 129          uchar ReadByte()     //读取单字节
 130          {
 131   1              uchar i,u=0;
 132   1              for(i=0;i<8;i++)
 133   1              {
 134   2                      dq = 0;
 135   2                      u >>= 1;
 136   2                      dq = 1;
 137   2                      if(dq==1)
 138   2                      u |= 0x80;
 139   2                      TempDelay (4/2);
 140   2                      _nop_();
 141   2              }
 142   1              return(u);
 143   1      }
 144          
 145          /*****************读18B20*************************/
 146          void reads (uchar k) //reentrant
 147          {
 148   1               uchar i;
 149   1               for(i=0;i<k;i++)
 150   1               {
 151   2                        *p = ReadByte();
 152   2                        p++;
 153   2               }
 154   1      }
 155          
 156          /********************CRC校验**********************/
 157          uchar CRC (uchar j)
 158          {
 159   1              uchar i,crc_data=0;
 160   1              for(i=0;i<j;i++)  //查表校验
 161   1              crc_data=CrcTable[crc_data^temp_buff[i]];
 162   1          return (crc_data);
 163   1      }

⌨️ 快捷键说明

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