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

📄 2051.lst

📁 用2051单片机来控制DA18B20
💻 LST
字号:
C51 COMPILER V8.02   2051                                                                  05/17/2009 11:49:10 PAGE 1   


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

line level    source

   1          #include <reg51.H>
   2          # define disdata P1     //数
   3          # define discan P3      //位
   4          # define uchar unsigned char 
   5          # define uint unsigned int
   6          sbit DQ=P3^2;           // 18B20
   7          sbit DIN = P1^7;
   8          uint h;
   9          char k;
  10          uchar code ditab[16]= 
  11          {0X00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x07,0x08,0x09,0x09}; 
  12          uchar code dis_7[12]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};  /*共阳LED段码表*/
  13          uchar code scan_con[3]={0x7f,0xfd,0xfe};          /*列扫描控制字*/
  14          uchar data temp_data[2]={0x00, 0x00,};                   /*读出温度暂放*/
  15          uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; /*显示单元数据,共4个数据和一个运算暂用*/
  16          
  17          
  18          
  19          /***********ds18b20延迟子函数(晶振12MHz )*******/
  20          void delay_18B20(unsigned int i)
  21          {
  22   1              while(i--);
  23   1      }
  24          /**********ds18b20初始化函数******************/
  25          void Init_DS18B20(void) 
  26          {
  27   1               unsigned char x=0;
  28   1               DQ = 1;          //DQ复位
  29   1               delay_18B20(8);  //稍做延时
  30   1               DQ = 0;          //单片机将DQ拉低
  31   1               delay_18B20(80); //精确延时 大于 480us
  32   1               DQ = 1;          //拉高总线
  33   1               delay_18B20(14);
  34   1               x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  35   1               delay_18B20(20);
  36   1      }
  37          /***********ds18b20读一个字节**************/
  38          unsigned char ReadOneChar(void)
  39          {
  40   1              unsigned char i=0;
  41   1              unsigned char dat = 0;
  42   1              for (i=8;i>0;i--)
  43   1               {
  44   2                        DQ = 0;           // 给脉冲信号
  45   2                        dat>>=1;
  46   2                        DQ = 1;           // 给脉冲信号
  47   2                        if(DQ)
  48   2                        dat|=0x80;
  49   2                        delay_18B20(4);
  50   2               }
  51   1              return(dat);
  52   1      }  
  53          /*************ds18b20写一个字节****************/ 
  54          void WriteOneChar(unsigned char dat)
  55          {
C51 COMPILER V8.02   2051                                                                  05/17/2009 11:49:10 PAGE 2   

  56   1              unsigned char i=0;
  57   1              for (i=8; i>0; i--)
  58   1              {
  59   2                      DQ = 0;
  60   2                      DQ = dat&0x01;
  61   2              delay_18B20(5);
  62   2                      DQ = 1;
  63   2              dat>>=1;
  64   2       }
  65   1      }
  66          
  67          void temp_to_str()                         
  68          {                 
  69   1              unsigned char a=0;
  70   1              unsigned char b=0;
  71   1              unsigned char t=0;
  72   1      
  73   1              Init_DS18B20();
  74   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
  75   1              WriteOneChar(0x44);     // 启动温度转换
  76   1      
  77   1              delay_18B20(100);       // this message is wery important
  78   1      
  79   1              Init_DS18B20();
  80   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
  81   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  82   1      
  83   1              delay_18B20(100);
  84   1      
  85   1              a=ReadOneChar();        //读取温度值低位
  86   1              b=ReadOneChar();                //读取温度值高位
  87   1              temp_data[0]=b<<4;
  88   1              temp_data[0]|=a>>4;       
  89   1          display[2]=temp_data[0]/10;  //十位
  90   1          display[1]=temp_data[0]%10;  //个位
  91   1              display[0]=ditab[(a&0x0f)<<4/10];//小数
  92   1      }
  93          
  94          
  95          /***************主函数***************/
  96          main()
  97           {
  98   1        disdata=0xff;                                   /*初始化端口*/
  99   1        discan=0xff; 
 100   1        //for(h=0;h<4;h++){display[h]=8;} 
 101   1       while(1) 
 102   1         {
 103   2         temp_to_str();             
 104   2         
 105   2        for(k=0;k<3;k++)        /*4位LED扫描控制*/
 106   2        { 
 107   3          disdata=~(dis_7[display[k]]);       /*数据显示*/
 108   3          if(k==1){DIN=1;}                /*小数点显示*/
 109   3          discan=scan_con[k];                 /*位选*/
 110   3          delay_18B20(90);
 111   3          discan=0xff;  
 112   3        } 
 113   2         }
 114   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   2051                                                                  05/17/2009 11:49:10 PAGE 3   

   CODE SIZE        =    264    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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