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

📄 text1.lst

📁 proteus调通的DS18B20
💻 LST
字号:
C51 COMPILER V7.50   TEXT1                                                                 11/23/2007 13:33:39 PAGE 1   


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

line level    source

   1          #include <AT89X51.H>
   2          #include <intrins.h>
   3          //#define unchar unsigned char
   4          typedef unsigned char unchar;
   5          
   6          unchar show[4]={1,2,3,4};
   7          unchar code showtap[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
             -  //0,1,2...显示代码
   8          unchar b=0;
   9          sbit DQ=P2^5;
  10          bit  flag_1820_1;
  11          bit flag_1820_2;
  12          void delay_ms(unsigned char time);
  13          void ledshow(void);
  14          void keypress(void);
  15          void init(void);
  16          void gettemp();
  17          void init1820(void);
  18          void write1820(unchar);
  19          unsigned char read1820(void);
  20          void delay_us(unchar);
  21          main()
  22          { //unsigned char i;
  23   1         //init();
  24   1         
  25   1          while(1)
  26   1        {   gettemp();
  27   2            ledshow();
  28   2            keypress();
  29   2                
  30   2           
  31   2          }
  32   1      }
  33          
  34          //****************LED显示程序**************
  35          //led 是共阴的 ,P2.0,2.1,2.2,2.3分别控制1234
  36          void ledshow()
  37          { 
  38   1        unchar i,j;
  39   1        j=0xf7;  //位选
  40   1        P0=0;
  41   1        P2=0xff;
  42   1        _nop_();
  43   1        _nop_();
  44   1        for(i=0;i<4;i++)
  45   1        {
  46   2           P0=showtap[show[3-i]];  //直接转换成显示的LED码
  47   2               P2=j>>i;
  48   2               delay_ms(2);
  49   2               P2=0xff;
  50   2        }
  51   1       
  52   1      }
  53          //***********************************************
  54          
C51 COMPILER V7.50   TEXT1                                                                 11/23/2007 13:33:39 PAGE 2   

  55          
  56          //////////*************键盘程序****************
  57          void keypress()
  58          {
  59   1          unchar a,i,j=0xfe;
  60   1              for(i=0;i<4;i++)
  61   1              {
  62   2                 P1=(j<<i)|(j>>(8-i));  //输出扫描码
  63   2                 delay_ms(2);
  64   2             a=P1;
  65   2                 if((a&0xf0)!=0xf0)
  66   2                 {
  67   3                    delay_ms(2);
  68   3                        a=P1;
  69   3                        if((a&0xf0)!=0xf0)
  70   3                        {
  71   4                          switch(~((j<<i)|(j>>(8-i))))
  72   4                          {
  73   5                                case 1: switch(~((a>>4)|0xf0))
  74   5                                         {
  75   6                                                    case 1: show[b]=0;break;
  76   6                                                        case 2: show[b]=1;break;
  77   6                                                        case 4: show[b]=2;break;
  78   6                                                        case 8: show[b]=3;break;
  79   6                                                  }
  80   5                                                      break;
  81   5                                case 2: switch(~((a>>4)|0xf0))
  82   5                                         {
  83   6                                                    case 1: show[b]=4;break;
  84   6                                                        case 2: show[b]=5;break;
  85   6                                                        case 4: show[b]=6;break;
  86   6                                                        case 8: show[b]=7;break;
  87   6                                                  }
  88   5                                                      break;
  89   5                   case 4: switch(~((a>>4)|0xf0))
  90   5                                         {
  91   6                                                    case 1: show[b]=8;break;
  92   6                                                        case 2: show[b]=9;break;
  93   6                                                        case 4: show[b]=10;break;
  94   6                                                        case 8: show[b]=11;break;
  95   6                                                  }
  96   5                                                      break;
  97   5                              case 8: switch(~((a>>4)|0xf0))
  98   5                                         {
  99   6                                                    case 1: show[b]=12;break;
 100   6                                                        case 2: show[b]=13;break;
 101   6                                                        case 4: show[b]=14;break;
 102   6                                                        case 8: show[b]=15;break;
 103   6                                                  }
 104   5                                                      break;
 105   5      
 106   5                              }
 107   4                              b++;
 108   4                              if(b==4)
 109   4                              b=0;
 110   4                         }
 111   3                  }
 112   2                      while((a&0xf0)!=0xf0)
 113   2                      {
 114   3                         a=P1;
 115   3                      }
 116   2              }
C51 COMPILER V7.50   TEXT1                                                                 11/23/2007 13:33:39 PAGE 3   

 117   1      }
 118          
 119          //***************************************
 120          //*******************DS18B20***************
 121          
 122          void gettemp()
 123          {  unsigned int tp;
 124   1         init1820();
 125   1         write1820(0xcc);
 126   1       //  delay_ms(2);
 127   1         write1820(0x44);
 128   1        // _nop_();
 129   1        // DQ=1;
 130   1        // delay_ms(250);     //多个1820时要延时,单个就不用,数据手册里看
 131   1        // delay_ms(250);
 132   1        // delay_ms(250);
 133   1         init1820();
 134   1         write1820(0xcc);
 135   1         write1820(0xbe);
 136   1         show[0]=read1820();
 137   1         show[1]=read1820();
 138   1         init1820();
 139   1         tp=show[1]*256+show[0];
 140   1         tp=tp>>4;
 141   1         show[0]=(unsigned char)(tp/10);
 142   1         show[1]=(unsigned char)(tp%10);
 143   1      }
 144          //********************1820初始化,读和写的子程序,延时
 145          //*******initial**********
 146          void init1820()
 147          {
 148   1       DQ = 1; _nop_();
 149   1       DQ = 0;      //拉低数据线,准备Reset OneWire Bus;
 150   1       delay_us(125);  //延时510us,Reset One-Wire Bus.
 151   1       delay_us(125);
 152   1       
 153   1       DQ = 1;      //提升数据线;
 154   1       delay_us(15);  //延时35us;
 155   1       
 156   1       while(DQ)     //等待Slave 器件Ack 信号;
 157   1       { _nop_(); }
 158   1       delay_us(60);  //延时125us; 
 159   1       DQ = 1;      //提升数据线,准备数据传输;
 160   1      }
 161          
 162          //******write********
 163          void write1820(unchar a)
 164          {
 165   1          unchar i;
 166   1       for(i=0;i<8;i++)
 167   1       {if(a & 0x01)  //低位在前;
 168   2         {DQ = 0;    //结束Recovery time;
 169   3          _nop_();_nop_();_nop_();
 170   3          DQ = 1;   } //发送数据;
 171   2        else
 172   2         DQ = 0;    //结束Rec time;
 173   2          _nop_();_nop_();_nop_();  
 174   2          //DQ = 0;  } //发送数据;
 175   2        delay_us(30);  //等待Slave Device采样;
 176   2        DQ = 1;      //Recovery;
 177   2        _nop_();      //Recovery Time Start;
 178   2        a >>= 1;
C51 COMPILER V7.50   TEXT1                                                                 11/23/2007 13:33:39 PAGE 4   

 179   2        }
 180   1      
 181   1      }
 182          
 183          //*******read************
 184          unsigned char read1820(void)
 185          {
 186   1      unsigned char i;
 187   1      unsigned char tmp=0;
 188   1       DQ = 1;  _nop_();     //准备读;
 189   1       for(i=0;i<8;i++)
 190   1       {
 191   2        tmp >>= 1;    //低位先发;
 192   2        DQ = 0;      //Read init;
 193   2        _nop_();     //2ms;
 194   2        DQ = 1;      //必须写1,否则读出来的将是不预期的数据;
 195   2        delay_us(2);   //延时9us;
 196   2        _nop_();
 197   2        if(DQ)      //在12us处读取数据;
 198   2         tmp |= 0x80;
 199   2        delay_us(30);  //延时55us;
 200   2        DQ = 1;   _nop_();   //恢复One Wire Bus;
 201   2        }
 202   1       return tmp; }
 203          //**************************延时程序,一个是1us的延时。一个是1ms的延时 **************
 204          void delay_us(unchar a)//when crystal is 12M ,a*2+5 us  ,子程序调用要5us,while 就等于DJNZ指令
 205          {
 206   1      while(--a);
 207   1      }
 208          void delay_ms(unchar a)
 209          {
 210   1          unchar i,j;
 211   1              for(i=0;i<a;i++)
 212   1              for(j=0;j<200;j++)
 213   1              {
 214   2                      _nop_();
 215   2                      _nop_();
 216   2              }
 217   1      }
 218          //**********************************************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    730    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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