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

📄 shiyan2.lst

📁 单片机C和汇编程序代码,其中有EEPROM,LCD的使用.
💻 LST
字号:
C51 COMPILER V6.12  SHIYAN2                                                                03/29/2008 16:54:09 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SHIYAN2
OBJECT MODULE PLACED IN .\shiyan2.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\shiyan2.c DEBUG OBJECTEXTEND

stmt level    source

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

  56   2      delay1ms(1);
  57   2      }
  58   1      }
  59          init_play()//初始化显示
  60          { lcd_init();
  61   1          wr_com(0x80);
  62   1      display(str1);
  63   1      wr_com(0xc0);
  64   1      display(str2);
  65   1         }
  66          /******************************ds1820程序***************************************/
  67          void delay_18B20(unsigned int i)//延时1微秒
  68          {
  69   1         while(i--);
  70   1      }
  71          void ds1820rst()/*ds1820复位*/
  72          { unsigned char x=0;
  73   1      DQ = 1;          //DQ复位
  74   1      delay_18B20(4); //延时
  75   1      DQ = 0;          //DQ拉低
  76   1      delay_18B20(100); //精确延时大于480us
  77   1      DQ = 1;          //拉高
  78   1      delay_18B20(40); 
  79   1         } 
  80          
  81             uchar ds1820rd()/*读数据*/
  82          { unsigned char i=0;
  83   1      unsigned char dat = 0;
  84   1      for (i=8;i>0;i--)
  85   1      {   DQ = 0; //给脉冲信号
  86   2          dat>>=1;
  87   2          DQ = 1; //给脉冲信号
  88   2          if(DQ)
  89   2          dat|=0x80;
  90   2          delay_18B20(10);
  91   2      }
  92   1         return(dat);
  93   1      }
  94          void ds1820wr(uchar wdata)/*写数据*/
  95          {unsigned char i=0;
  96   1          for (i=8; i>0; i--)
  97   1         { DQ = 0;
  98   2           DQ = wdata&0x01;
  99   2           delay_18B20(10);
 100   2           DQ = 1;
 101   2           wdata>>=1;
 102   2         }
 103   1      }
 104          read_temp()/*读取温度值并转换*/
 105          {uchar a,b;
 106   1      ds1820rst();    
 107   1      ds1820wr(0xcc);//*跳过读序列号*/
 108   1      ds1820wr(0x44);//*启动温度转换*/
 109   1      ds1820rst();    
 110   1      ds1820wr(0xcc);//*跳过读序列号*/ 
 111   1      ds1820wr(0xbe);//*读取温度*/ 
 112   1      a=ds1820rd();
 113   1      b=ds1820rd();
 114   1      tvalue=b;
 115   1      tvalue<<=8;
 116   1      tvalue=tvalue|a;
 117   1          if(tvalue<0x0fff)
C51 COMPILER V6.12  SHIYAN2                                                                03/29/2008 16:54:09 PAGE 3   

 118   1         tflag=0;
 119   1          else
 120   1         {tvalue=~tvalue+1;
 121   2      tflag=1;
 122   2         }
 123   1      tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 124   1      return(tvalue);
 125   1      }
 126          /*******************************************************************/
 127             void ds1820disp()//温度值显示
 128          { uchar flagdat;
 129   1         disdata[0]=tvalue/1000+0x30;//百位数
 130   1           disdata[1]=tvalue%1000/100+0x30;//十位数
 131   1           disdata[2]=tvalue%100/10+0x30;//个位数
 132   1           disdata[3]=tvalue%10+0x30;//小数位
 133   1          
 134   1           if(tflag==0)
 135   1           flagdat=0x20;//正温度不显示符号
 136   1           else
 137   1             flagdat=0x2d;//负温度显示负号:-
 138   1           if(disdata[0]==0x30)
 139   1          {disdata[0]=0x20;//如果百位为0,不显示
 140   2         if(disdata[1]==0x30)
 141   2          {disdata[1]=0x20;//如果百位为0,十位为0也不显示
 142   3          }
 143   2         }
 144   1          wr_com(0xc0);
 145   1         wr_dat(flagdat);//显示符号位
 146   1          wr_com(0xc1);
 147   1          wr_dat(disdata[0]);//显示百位
 148   1          wr_com(0xc2);
 149   1          wr_dat(disdata[1]);//显示十位 
 150   1          wr_com(0xc3);
 151   1          wr_dat(disdata[2]);//显示个位 
 152   1          wr_com(0xc4);
 153   1          wr_dat(0x2e);//显示小数点 
 154   1          wr_com(0xc5);
 155   1          wr_dat(disdata[3]);//显示小数位
 156   1         }
 157          /********************主程序***********************************/
 158          void main()
 159          { init_play();//初始化显示
 160   1         while(1)
 161   1      {read_temp();//读取温度
 162   2          ds1820disp();//显示
 163   2      }
 164   1      }
 165          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    601    ----
   CONSTANT SIZE    =     29    ----
   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 + -