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

📄 000.lst

📁 proteus仿真实例大全
💻 LST
字号:
C51 COMPILER V7.50   000                                                                   12/02/2008 14:45:26 PAGE 1   


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

line level    source

   1          #include<reg51.h>
   2          
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          sbit DQ=P1^7;//ds18b20与单片机连接口
   7          sbit RS=P2^0;
   8          sbit RW=P2^1;
   9          sbit EN=P2^2;
  10          
  11          unsigned char code str1[]={"temperature:  "};
  12          unsigned char code str2[]={"              "}; 
  13          
  14          uchar data disdata[5];
  15          uint tvalue;//温度值
  16          uchar tflag;//温度正负标志
  17          
  18          /*************************lcd1602程序**************************/
  19           void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  20           {unsigned int i,j;
  21   1         for(i=0;i<ms;i++)
  22   1          for(j=0;j<100;j++);
  23   1       }
  24          
  25          void wr_com(unsigned char com)//写指令//
  26           {  delay1ms(1);
  27   1         RS=0;
  28   1         RW=0;
  29   1         EN=0;
  30   1         P2=com;
  31   1         delay1ms(1);
  32   1         EN=1;
  33   1         delay1ms(1);
  34   1         EN=0;
  35   1        }
  36          
  37          void wr_dat(unsigned char dat)//写数据//
  38          {  delay1ms(1);;
  39   1         RS=1;
  40   1         RW=0;
  41   1         EN=0;
  42   1         P2=dat;
  43   1         delay1ms(1);
  44   1         EN=1;
  45   1         delay1ms(1);
  46   1         EN=0;
  47   1      }
  48          
  49           void lcd_init()//初始化设置//
  50          {delay1ms(15);
  51   1        wr_com(0x38);delay1ms(5);
  52   1         wr_com(0x08);delay1ms(5);
  53   1          wr_com(0x01);delay1ms(5);
  54   1           wr_com(0x06);delay1ms(5);
  55   1            wr_com(0x0c);delay1ms(5);
C51 COMPILER V7.50   000                                                                   12/02/2008 14:45:26 PAGE 2   

  56   1      }
  57          
  58          
  59           void display(unsigned char *p)//显示//
  60          {
  61   1      while(*p!='\0')
  62   1      {
  63   2      wr_dat(*p);
  64   2      p++;
  65   2      delay1ms(1);
  66   2      }
  67   1      }
  68          
  69            init_play()//初始化显示
  70            { lcd_init();
  71   1          wr_com(0x80);
  72   1               display(str1);
  73   1               wr_com(0xc0);
  74   1               display(str2);
  75   1         }
  76          
  77          /******************************ds1820程序***************************************/
  78           void delay_18B20(unsigned int i)//延时1微秒
  79          {
  80   1              while(i--);
  81   1      }
  82          
  83          void ds1820rst()/*ds1820复位*/
  84           {  unsigned char x=0;
  85   1               DQ = 1;          //DQ复位
  86   1               delay_18B20(4);  //延时
  87   1               DQ = 0;          //DQ拉低
  88   1               delay_18B20(100); //精确延时大于480us
  89   1               DQ = 1;          //拉高
  90   1               delay_18B20(40);        
  91   1         }  
  92            
  93             uchar ds1820rd()/*读数据*/
  94            { unsigned char i=0;
  95   1               unsigned char dat = 0;
  96   1               for (i=8;i>0;i--)
  97   1               {   DQ = 0; //给脉冲信号
  98   2                        dat>>=1;
  99   2                        DQ = 1; //给脉冲信号
 100   2                        if(DQ)
 101   2                        dat|=0x80;
 102   2                        delay_18B20(10);
 103   2               }
 104   1              return(dat);
 105   1        }
 106          
 107            void ds1820wr(uchar wdata)/*写数据*/
 108            {unsigned char i=0;
 109   1          for (i=8; i>0; i--)
 110   1         { DQ = 0;
 111   2           DQ = wdata&0x01;
 112   2           delay_18B20(10);
 113   2           DQ = 1;
 114   2           wdata>>=1;
 115   2         }
 116   1       }
 117            
C51 COMPILER V7.50   000                                                                   12/02/2008 14:45:26 PAGE 3   

 118           
 119          
 120            read_temp()/*读取温度值并转换*/
 121           {uchar a,b;
 122   1        ds1820rst();    
 123   1        ds1820wr(0xcc);//*跳过读序列号*/
 124   1        ds1820wr(0x44);//*启动温度转换*/
 125   1        ds1820rst();    
 126   1        ds1820wr(0xcc);//*跳过读序列号*/ 
 127   1        ds1820wr(0xbe);//*读取温度*/ 
 128   1        a=ds1820rd();
 129   1        b=ds1820rd();
 130   1        tvalue=b;
 131   1        tvalue<<=8;
 132   1        tvalue=tvalue|a;
 133   1          if(tvalue<0x0fff)
 134   1         tflag=0;
 135   1          else
 136   1         {tvalue=~tvalue+1;
 137   2               tflag=1;
 138   2         }
 139   1        tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 140   1              return(tvalue);
 141   1        }
 142          
 143          /*******************************************************************/
 144             void ds1820disp()//温度值显示
 145                  { uchar flagdat;
 146   1                disdata[0]=tvalue/1000+0x30;//百位数
 147   1           disdata[1]=tvalue%1000/100+0x30;//十位数
 148   1           disdata[2]=tvalue%100/10+0x30;//个位数
 149   1           disdata[3]=tvalue%10+0x30;//小数位
 150   1          
 151   1           if(tflag==0)
 152   1                  flagdat=0x20;//正温度不显示符号
 153   1           else
 154   1             flagdat=0x2d;//负温度显示负号:-
 155   1      
 156   1           if(disdata[0]==0x30)
 157   1                 {disdata[0]=0x20;//如果百位为0,不显示
 158   2                       if(disdata[1]==0x30)
 159   2                        {disdata[1]=0x20;//如果百位为0,十位为0也不显示
 160   3                        }
 161   2                      }
 162   1      
 163   1                 wr_com(0xc0);
 164   1                      wr_dat(flagdat);//显示符号位
 165   1                 wr_com(0xc1);
 166   1                 wr_dat(disdata[0]);//显示百位
 167   1                 wr_com(0xc2);
 168   1                 wr_dat(disdata[1]);//显示十位        
 169   1                 wr_com(0xc3);
 170   1                 wr_dat(disdata[2]);//显示个位        
 171   1                 wr_com(0xc4);
 172   1                 wr_dat(0x2e);//显示小数点    
 173   1                 wr_com(0xc5);
 174   1                 wr_dat(disdata[3]);//显示小数位
 175   1         }
 176          /********************主程序***********************************/
 177           void main()
 178           { init_play();//初始化显示
 179   1         while(1)
C51 COMPILER V7.50   000                                                                   12/02/2008 14:45:26 PAGE 4   

 180   1              {read_temp();//读取温度
 181   2          ds1820disp();//显示
 182   2               }
 183   1        }
 184          
 185          
 186          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    604    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       5
   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 + -