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

📄 temperature.lst

📁 RZ-51V20 实例程序
💻 LST
字号:
C51 COMPILER V8.02   TEMPERATURE                                                           08/11/2012 19:28:33 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include "temp.h"
   3          /**********************************************************
   4          *采用DS1820+YM12864R精确到4位小数的温度计
   5          *还请高手指点!
   6          *编程:飞扬
   7          *版本:V0.3
   8          *DS1820设置为12位精度
   9          **********************************************************/
  10          //声明外部温度读数数组
  11          extern unsigned char data temperature[2];
  12          //存放分解的7个ASCII码温度数据  
  13          unsigned char temp[7];
  14          
  15          unsigned char code string[6]={"温度:"};
  16          unsigned char code DispStr[7]={"系列号"};
  17          unsigned char fCode[8]; //存放序列号,CRC 
  18          /**********************************************************
  19          *主程序
  20          **********************************************************/
  21          void main()
  22          {
  23   1      
  24   1              unsigned char i;
  25   1              delay100us();//等待电源稳定,液晶复位完成
  26   1              delay100us();
  27   1              LCD_INIT();      //液晶初始化
  28   1              DS1820_Reset();//DS1820复位
  29   1              DS1820_WriteData(0x33);//读ROM指令
  30   1              for (i=0;i<8;i++)
  31   1                      {//读取64位系列号
  32   2                      fCode[i] = DS1820_ReadData();
  33   2                      }
  34   1              DS1820_Reset();//DS1820复位
  35   1              LCD_WRITE_IR(0x80);//在第一行显示
  36   1              for (i=0;i<5;i++)
  37   1                      {
  38   2                       LCD_WRITE_DR(string[i]);//显示"温度:"
  39   2                      }
  40   1              LCD_WRITE_IR(0x88);//在第3行显示
  41   1              for (i=0;i<6;i++)
  42   1                      {
  43   2                       LCD_WRITE_DR(DispStr[i]);//显示"系列号"
  44   2                      }
  45   1              DispCode();//在第4行显示序列号
  46   1              do{
  47   2                      read_temp(); //读取温度值
  48   2                      delay100us();
  49   2                      display();       //显示温度值
  50   2                      delay100us();
  51   2               }while (1);    //无限循环
  52   1      }
  53          /**********************************************************
  54          *系列号显示子程序
  55          *显示顺序(从左到右)8位CRC编码->48位序列号->8位产品系列编码
C51 COMPILER V8.02   TEMPERATURE                                                           08/11/2012 19:28:33 PAGE 2   

  56          **********************************************************/
  57          void DispCode()
  58          {
  59   1       unsigned char i,temp;
  60   1       LCD_WRITE_IR(0x98); //在第4行显示
  61   1       for (i=8;i>0;i--)
  62   1              {
  63   2              //显示高4位
  64   2              temp = fCode[i-1]>>4;
  65   2                      if (temp<10) //ASCII码转换
  66   2                               LCD_WRITE_DR(temp += 0x30);
  67   2                      else
  68   2                               LCD_WRITE_DR(temp += 0x37);
  69   2              //显示低4位
  70   2              temp = fCode[i-1]&0x0f;
  71   2                      if (temp<10) //ASCII码转换
  72   2                               LCD_WRITE_DR(temp += 0x30);
  73   2                      else
  74   2                               LCD_WRITE_DR(temp += 0x37);
  75   2               }
  76   1      }
  77          /**********************************************************
  78          *延时子程序
  79          **********************************************************/
  80          void delay100us()
  81          {
  82   1       unsigned char i;
  83   1       for (i=49;i>0;i--);
  84   1      }
  85          /**********************************************************
  86          *转换显示子程序
  87          **********************************************************/
  88          void display()
  89          {
  90   1       unsigned char temp_data,temp_data_2;
  91   1       unsigned int TempDec;  //用来存放4位小数
  92   1       temp_data = temperature[1];
  93   1       temp_data &= 0xf0;     //取高4位
  94   1       if (temp_data==0xf0)   //判断是正温度还是负温度读数
  95   1              {
  96   2              //负温度读数求补,取反加1,判断低8位是否有进位
  97   2                      if (temperature[0]==0)
  98   2                              {       //有进位,高8位取反加1
  99   3                                      temperature[0]=~temperature[0]+1;
 100   3                                      temperature[1]=~temperature[1]+1;
 101   3                              }
 102   2                      else
 103   2                              {       //没进位,高8位不加1
 104   3                                      temperature[0]=~temperature[0]+1;
 105   3                                      temperature[1]=~temperature[1];
 106   3                              }
 107   2               }
 108   1              temp_data = temperature[1]<<4;          //取高字节低4位(温度读数高4位)
 109   1              temp_data_2 = temperature[0]>>4;        //取低字节高4位(温度读数低4位)
 110   1              temp_data = temp_data|temp_data_2;      //组合成完整数据
 111   1              temp[0] = temp_data/100+0x30;           //取百位转换为ASCII码
 112   1              temp[1] = (temp_data%100)/10+0x30;      //取十位转换为ASCII码
 113   1              temp[2] = (temp_data%100)%10+0x30;      //取个位转换为ASCII码
 114   1              temperature[0]&=0x0f;                           //取小数位转换为ASCII码
 115   1              TempDec = ((temperature[0]&0x0f)*0.0625)*10000;//小数部分,扩大1万倍
 116   1              temp[3] = TempDec/1000+0x30;            //取小数个位转换为ASCII码
 117   1              temp[4] = (TempDec%1000)/100+0x30;      //取小数十位转换为ASCII码
C51 COMPILER V8.02   TEMPERATURE                                                           08/11/2012 19:28:33 PAGE 3   

 118   1              temp[5] = ((TempDec%1000)%100)/10+0x30;//取小数百位转换为ASCII码
 119   1              temp[6] = ((TempDec%1000)%100)%10+0x30;//取小数千位转换为ASCII码
 120   1              LCD_WRITE_IR(0x91);//在LCD第2行显示
 121   1              LCD_WRITE_DR(temp[0]);  //显示百位
 122   1              LCD_WRITE_DR(temp[1]);  //显示十位
 123   1              LCD_WRITE_DR(temp[2]);  //显示个位
 124   1              LCD_WRITE_DR(0x2e);             //显示"."
 125   1              LCD_WRITE_DR(temp[3]);  //显示小数位
 126   1              LCD_WRITE_DR(temp[4]);  //显示小数位
 127   1              LCD_WRITE_DR(temp[5]);  //显示小数位
 128   1              LCD_WRITE_DR(temp[6]);  //显示小数位
 129   1              LCD_WRITE_DR(0xa1);             //显示"℃"
 130   1              LCD_WRITE_DR(0xe6);
 131   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    491    ----
   CONSTANT SIZE    =     13    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15       3
   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 + -