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

📄 text1.lst

📁 多点温度测量
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   TEXT1                                                                 05/13/2008 11:27:15 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           /******************************************/
   2          #include "reg51.h"
   3          #include "intrins.h"                            //_nop_();延时函数用
   4          #define  Disdata P1                             //段码输出口
   5          #define  discan  P3                             //扫描口
   6          #define  uchar unsigned char
   7          #define  uint  unsigned int
   8          #define num 10
   9          sbit     DQ1=P3^4;
  10          sbit     DQ2=P3^5;
  11          sbit     DQ3=P3^7;                             //温度输入口
  12          sbit     speak=P1^7;
  13          sbit     P3_0=P3^0;
  14          sbit     P3_1=P3^1;
  15          sbit     P3_2=P3^2;
  16          sbit     P3_3=P3^3;                           
  17          
  18          //**************温度小数部分用查表法***********//             
  19          uchar data temp_data[2]={0x00,0x00};             //读出温度暂放
  20          uchar data display[5]={0x00,0x00,0x00,0x00,0x00};     //显示单元数据,共4个数据和一个运算暂用
  21          uchar data  min_max[3][2]={0,100,20,50,30,40}; ////修改温度的上下限
  22          //
  23          
  24          void check(uint i)
  25          {
  26   1        speak=0;
  27   1        if(display[4]<min_max[i][0]||display[4]>min_max[i][1])
  28   1        speak=1;
  29   1      }
  30          /*****************11us延时函数*************************/
  31          //
  32          void cc(uint i)
  33          {
  34   1        switch(i)
  35   1        {
  36   2           case 0: P3_0=1;P3_1=0;P3_2=0;P3_3=0;break;
  37   2               case 1:P3_0=0;P3_1=1;P3_2=0;P3_3=0;break;
  38   2               case 2: P3_0=0;P3_1=0;P3_2=1;P3_3=0;break;
  39   2               case 3: P3_0=0;P3_1=0;P3_2=0;P3_3=1;break;
  40   2        }
  41   1      }
  42          void delay(uint t)
  43          {
  44   1        for (;t>0;t--);
  45   1      }
  46          //
  47          /****************显示扫描函数***************************/
  48          void scan()
  49          {
  50   1        char k;uint y=0x80;
  51   1        for(k=0;k<4;k++)                     //4位LED扫描控制
  52   1        {     
  53   2         cc(k);
  54   2         y=y&P1;
  55   2         Disdata=y|display[k];        //数据显示                
C51 COMPILER V7.06   TEXT1                                                                 05/13/2008 11:27:15 PAGE 2   

  56   2        delay(9000);                           //延时
  57   2        }
  58   1      }
  59          //
  60          //
  61          /****************DS18B20复位函数************************/
  62           ow_reset1()
  63          {
  64   1       char presence=1;           
  65   1       while(presence)
  66   1       {
  67   2        while(presence)
  68   2         {
  69   3          DQ1=1;_nop_();_nop_();//从高拉倒低
  70   3       DQ1=0;                                       
  71   3       delay(50);           //550 us
  72   3        DQ1=1;                                        
  73   3       delay(6);            //66 us
  74   3       presence=DQ1;         //presence=0 复位成功,继续下一步
  75   3         } 
  76   2         delay(45);            //延时500 us
  77   2         presence=~DQ1;         
  78   2       }
  79   1       DQ1=1;                   //拉高电平
  80   1      }
  81          
  82            ow_reset2()
  83          {
  84   1       char presence=1;
  85   1       while(presence)
  86   1       {
  87   2        while(presence)
  88   2         {
  89   3          DQ2=1;_nop_();_nop_();//从高拉倒低
  90   3       DQ2=0;                                       
  91   3       delay(50);           //550 us
  92   3      DQ2=1;                                        
  93   3       delay(6);            //66 us
  94   3       presence=DQ2;         //presence=0 复位成功,继续下一步
  95   3         } 
  96   2         delay(45);            //延时500 us
  97   2         presence=~DQ2;         
  98   2       }
  99   1       DQ2=1;                   //拉高电平
 100   1      }
 101          
 102          
 103           ow_reset3()
 104          {
 105   1       char presence=1;
 106   1       while(presence)
 107   1       {
 108   2        while(presence)
 109   2         {
 110   3          DQ3=1;_nop_();_nop_();//从高拉倒低
 111   3       DQ3=0;                                       
 112   3       delay(50);           //550 us
 113   3      DQ3=1;                                        
 114   3       delay(6);            //66 us
 115   3       presence=DQ3;         //presence=0 复位成功,继续下一步
 116   3         } 
 117   2         delay(45);            //延时500 us
C51 COMPILER V7.06   TEXT1                                                                 05/13/2008 11:27:15 PAGE 3   

 118   2         presence=~DQ3;         
 119   2       }
 120   1       DQ3=1;                   //拉高电平
 121   1      }
 122          //
 123          //
 124          /****************DS18B20写命令函数************************/
 125          //向1-WIRE 总线上写1个字节
 126          void write_byte1(uchar val)
 127          { 
 128   1        uchar i;
 129   1        for(i=8;i>0;i--)
 130   1        {
 131   2         DQ1=1;_nop_();_nop_();                  //从高拉倒低
 132   2         DQ1=0;_nop_();_nop_();_nop_();_nop_();  //5 us
 133   2         DQ1=val&0x01;                           //最低位移出
 134   2         delay(6);                              //66 us
 135   2         val=val/2;                             //右移1位
 136   2         }
 137   1         DQ1=1;
 138   1         delay(1);
 139   1      }
 140          
 141          void write_byte2(uchar val)
 142          { 
 143   1        uchar i;
 144   1        for(i=8;i>0;i--)
 145   1        {
 146   2         DQ2=1;_nop_();_nop_();                  //从高拉倒低
 147   2         DQ2=0;_nop_();_nop_();_nop_();_nop_();  //5 us
 148   2         DQ2=val&0x01;                           //最低位移出
 149   2         delay(6);                              //66 us
 150   2         val=val/2;                             //右移1位
 151   2         }
 152   1         DQ2=1;
 153   1         delay(1);
 154   1      }
 155          
 156          
 157          void write_byte3(uchar val)
 158          { 
 159   1        uchar i;
 160   1        for(i=8;i>0;i--)
 161   1        {
 162   2         DQ3=1;_nop_();_nop_();                  //从高拉倒低
 163   2         DQ3=0;_nop_();_nop_();_nop_();_nop_();  //5 us
 164   2         DQ3=val&0x01;                           //最低位移出
 165   2         delay(6);                              //66 us
 166   2         val=val/2;                             //右移1位
 167   2         }
 168   1         DQ3=1;
 169   1         delay(1);
 170   1      }
 171          //
 172          /****************DS18B20读1字节函数************************/

⌨️ 快捷键说明

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