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

📄 tem_test.lst

📁 DS1820智能温控系统,使用1602液晶显示,51单片机控制,KEIL开发
💻 LST
字号:
C51 COMPILER V8.02   TEM_TEST                                                              04/28/2008 19:04:33 PAGE 1   


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

line level    source

   1          /*---------------------------------------------------------------------------------
   2            
   3          ************************************ 程序功能说明 **********************************************
   4          单片机通过温度传感器读取当前温度显示在lcd1602上,lcd1602两位显示整数,两位显示小数;
   5          当前温度发生改变,lcd1602显示数值亦随之改变。
   6          ********************************************************************************************/
   7          
   8          #include <reg52.h>
   9          #include <lcd1602.c>
  10          #define  uchar  unsigned char
  11          
  12          sbit DQ =P0^6; //18B20数据线引脚        
  13          
  14          
  15                                                                                                                                                                                                                 
  16          uchar dispbuf[4]; //显示缓冲区   
  17          uchar  temper[2];//存放温度的数组       
  18          
  19                        
  20          
  21          /*****************************延时函数**************************/
  22          
  23          void delay_us (unsigned int us)  
  24          {
  25   1        while(us--);
  26   1      }
  27          
  28          void DS18b20_init(void)   //初始化
  29          {
  30   1        uchar flag=0;
  31   1        DQ = 1;
  32   1        delay_us(8);   //稍做延时
  33   1        DQ = 0;
  34   1        delay_us(80);   //精确延时 大于 480us
  35   1        DQ = 1;   //拉高总线
  36   1        delay_us(14);
  37   1        flag=DQ;
  38   1        delay_us(20);
  39   1      }
  40          /**********************从DS18B20读一字节***************/
  41          uchar readbyte(void) //读1字节
  42          {
  43   1        uchar i=0;
  44   1        uchar dat=0;
  45   1        for (i=8;i>0;i--)
  46   1        {
  47   2          DQ = 0;
  48   2          dat>>=1;
  49   2          DQ = 1;
  50   2          if(DQ)
  51   2          dat|=0x80;
  52   2          delay_us(4);
  53   2         }
  54   1        return(dat);
  55   1       }
C51 COMPILER V8.02   TEM_TEST                                                              04/28/2008 19:04:33 PAGE 2   

  56          /***********************向DS18B20写一字节***********************/
  57          void writebyte(unsigned char dat) //写1字节
  58          {
  59   1        uchar i=0;
  60   1        for (i=8; i>0; i--)
  61   1        {
  62   2         DQ = 0;
  63   2         DQ = dat&0x01;
  64   2         delay_us(5);
  65   2         DQ = 1;
  66   2         dat>>=1;
  67   2         }
  68   1       delay_us(4);
  69   1      }
  70          /***********************CPU读取温度值***************************/
  71          void readtemp(void) //读取温度
  72          {
  73   1        uchar a=0,b=0;
  74   1        DS18b20_init();  //初始化
  75   1        writebyte(0xCC); // 跳过序列号
  76   1        writebyte(0x44); // 启动温度转换
  77   1        DS18b20_init();        //要重新初始化才可以读寄存器
  78   1        writebyte(0xCC);
  79   1        writebyte(0xBE); //读取温度寄存器等(共可读9个寄存器) 
  80   1                         //前两个就是温度,且第一个寄存器的低4位是小数点部分,
  81   1                                         //高四位和另外一个寄存器的低三位是整数部分,另外那个寄存器剩下的5位是符号位
  82   1        a=readbyte();   //低位
  83   1        b=readbyte();   //高位
  84   1        temper[0]=a&0x0f;
  85   1        a=a>>4;         //低位右移4位,舍弃小数部分
  86   1        temper[1]=b<<4;         //高位左移4位,舍弃符号位
  87   1        temper[1]=temper[1]|a;
  88   1        }
  89                     
  90          
  91          main()
  92          { uchar i;
  93   1        uchar temp;
  94   1        
  95   1        float backbit;  
  96   1        lcd_init(); 
  97   1        for(i=0;i<4;i++)
  98   1         dispbuf[i] = 0;
  99   1        while(1){
 100   2             readtemp();//读18B20
 101   2             backbit = temper[0];//换成浮点数
 102   2             backbit = backbit * 625;//乘以0.0625*100
 103   2             temp = backbit;//取低2位整数部分
 104   2                 lcd_pos(1);
 105   2                 dispbuf[3] = temp%10 ;
 106   2             temp = temp/10;
 107   2             dispbuf[2] = temp%10 ;
 108   2             temp = temper[1];//取整数部分
 109   2             dispbuf[1] = temp%10;
 110   2             
 111   2             temp = temp/10;
 112   2             dispbuf[0]= temp%10;
 113   2              lcd_write(1,display_code[dispbuf[0]]);
 114   2                      lcd_write(1,display_code[dispbuf[1]]);
 115   2                      lcd_write(1,0x2E);
 116   2                      lcd_write(1,display_code[dispbuf[3]]);
 117   2                      lcd_write(1,display_code[dispbuf[2]]);
C51 COMPILER V8.02   TEM_TEST                                                              04/28/2008 19:04:33 PAGE 3   

 118   2                      
 119   2      
 120   2                 //seg_scan(); //显示扫描        
 121   2        }
 122   1      }
 123          
 124          /********************************结束************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    498    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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