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

📄 tmp36.lst

📁 基于aduc834单片机的温度采集系统
💻 LST
字号:
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE TMP36
OBJECT MODULE PLACED IN .\TMP36.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\TMP36.c BROWSE DEBUG OBJECTEXTEND PRINT(.\TMP36.lst) OBJECT(.\TMP36.o
                    -bj)

line level    source

   1          #include <ADI/ADuC834.h>
   2          #include <intrins.h>
   3          #include"ziku.h" 
   4          
   5          long int g_TemperatureL;
   6          int g_TemperatureI;
   7          
   8          /***************宏定义及位定义*********************/
   9          #define busy 0x80
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          #define LCD_DATA P0
  13          void LCD_Clr();
  14          sbit LCD_RS=P2^3;   
  15          sbit LCD_RW=P2^4;       
  16          sbit LCD_EN=P2^5; 
  17          sbit LCD_CSA=P2^6;
  18          sbit LCD_CSB=P2^7;
  19          sbit LCD_RST=P2^2;
  20          
  21          void delay(int ms) 
  22          { 
  23   1      uchar i; 
  24   1      while(ms--) 
  25   1      { 
  26   2      for(i=0;i<250;i++) 
  27   2      { 
  28   3      _nop_(); 
  29   3      _nop_(); 
  30   3      _nop_(); 
  31   3      _nop_(); 
  32   3      } 
  33   2      } 
  34   1      }
  35          //void delay(uint t)
  36          //{
  37          //      uint i,j;
  38          //      for(i=0;i<t;i++)
  39          //      for(j=0;j<110;j++);
  40          //}
  41          
  42          /***************AD转换器初始化*******************/
  43          void ADC_Init(void)
  44          {
  45   1              SF = 0xFF;     //最慢的转换速度效果最好
  46   1              ADC0CON = 0x0F;//一通道,单极性,内部参考电源,输入范围0~2.56V
  47   1              ADCMODE = 0x23;//连续转换
  48   1      }
  49          
  50          /***************读液晶状态字*********************/
  51          unsigned char ReadLCDStatus(void) 
  52          { 
  53   1       LCD_DATA = 0xFF;  
  54   1       LCD_RS = 0; 
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 2   

  55   1       LCD_RW = 1; 
  56   1       LCD_EN = 0; 
  57   1       LCD_EN = 0; 
  58   1       LCD_EN = 1;
  59   1       while (LCD_DATA & busy); //检测忙信号 
  60   1      // delay(1); 
  61   1       LCD_EN = 0; 
  62   1       return(P0); 
  63   1      } 
  64          
  65          /*****************写液晶命令*********************/
  66          void WriteLCD_Command(uchar Command)     
  67          {
  68   1              ReadLCDStatus ();               
  69   1              LCD_RS = 0;       
  70   1              LCD_RW = 0;       
  71   1              LCD_DATA = Command;     
  72   1              LCD_EN = 1;             
  73   1      //      delay(1);
  74   1              LCD_EN = 0;
  75   1      }
  76          
  77          /*****************写液晶数据*********************/
  78          void WriteLCD_Data(unsigned char Data)                  
  79          {                        
  80   1        ReadLCDStatus(); 
  81   1        LCD_RS = 1; 
  82   1        LCD_RW = 0; 
  83   1        LCD_DATA = Data;
  84   1        LCD_EN = 1; 
  85   1      //  delay(1);
  86   1              LCD_EN=0;
  87   1      }
  88          
  89          /*****************初始化液晶*********************/
  90          void LCD_Init()     
  91          {
  92   1              WriteLCD_Command(0x3E);
  93   1              WriteLCD_Command(0xC0);
  94   1              WriteLCD_Command(0x3F);
  95   1              LCD_Clr();
  96   1              LCD_CSB=0;
  97   1              LCD_CSA=1;
  98   1      }
  99          
 100          /*****************显示汉字数据*******************/
 101          /************Page0~7、Rom0~63、汉字数组**********/
 102          void LCD_Display_Word(unsigned char Page,unsigned char Rom,unsigned char *Data)
 103          {
 104   1              unsigned char i;
 105   1              if(Rom>63)
 106   1              {
 107   2                      LCD_CSB=1;
 108   2                LCD_CSA=0;
 109   2              }
 110   1              else
 111   1              {
 112   2                      LCD_CSB=0;
 113   2                LCD_CSA=1;
 114   2              }
 115   1              if((LCD_CSA==1)&&(LCD_CSB==0))
 116   1              {
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 3   

 117   2                WriteLCD_Command(0xB8+Page);//页地址
 118   2                WriteLCD_Command(0x40+Rom);//列地址
 119   2                for(i=0;i<16;i++)
 120   2                {
 121   3                WriteLCD_Data(Data[i]);
 122   3          }
 123   2          WriteLCD_Command(0xB8+Page+1);//页地址+1
 124   2          WriteLCD_Command(0x40+Rom);//列地址
 125   2          for(i=16;i<32;i++)
 126   2                {
 127   3                WriteLCD_Data(Data[i]);
 128   3          }
 129   2        }
 130   1        if((LCD_CSA==0)&&(LCD_CSB==1))
 131   1        {
 132   2              WriteLCD_Command(0xB8+Page);//页地址
 133   2                WriteLCD_Command(0x40+(Rom-64));//列地址
 134   2                for(i=0;i<16;i++)
 135   2                {
 136   3                WriteLCD_Data(Data[i]);
 137   3          }
 138   2          WriteLCD_Command(0xB8+Page+1);//页地址+1
 139   2          WriteLCD_Command(0x40+(Rom-64));//列地址
 140   2          for(i=16;i<32;i++)
 141   2                {
 142   3                WriteLCD_Data(Data[i]);
 143   3          }
 144   2        }
 145   1      }
 146          
 147          /*****************显示字符数据*******************/
 148          void LCD_Display_Eng(unsigned char Page,unsigned char Rom,unsigned char *Data)
 149          {//页0~7、列0~63、汉字数组
 150   1              unsigned char i;
 151   1              if(Rom>63)
 152   1              {
 153   2                      LCD_CSB=1;
 154   2                LCD_CSA=0;
 155   2              }
 156   1              else
 157   1              {
 158   2                      LCD_CSB=0;
 159   2                LCD_CSA=1;
 160   2              }
 161   1              if((LCD_CSA==1)&&(LCD_CSB==0))
 162   1              {
 163   2                WriteLCD_Command(0xB8+Page);//页地址
 164   2                WriteLCD_Command(0x40+Rom);//列地址
 165   2                for(i=0;i<8;i++)
 166   2                {
 167   3                WriteLCD_Data(Data[i]);
 168   3          }
 169   2          WriteLCD_Command(0xB8+Page+1);//页地址+1
 170   2          WriteLCD_Command(0x40+Rom);//列地址
 171   2          for(i=8;i<16;i++)
 172   2                {
 173   3                WriteLCD_Data(Data[i]);
 174   3          }
 175   2        }
 176   1        if((LCD_CSA==0)&&(LCD_CSB==1))
 177   1        {
 178   2              WriteLCD_Command(0xB8+Page);//页地址
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 4   

 179   2                WriteLCD_Command(0x40+(Rom-64));//列地址
 180   2                for(i=0;i<8;i++)
 181   2                {
 182   3                WriteLCD_Data(Data[i]);
 183   3          }
 184   2          WriteLCD_Command(0xB8+Page+1);//页地址+1
 185   2          WriteLCD_Command(0x40+(Rom-64));//列地址
 186   2          for(i=8;i<16;i++)
 187   2                {
 188   3                WriteLCD_Data(Data[i]);
 189   3          }
 190   2        }
 191   1      }
 192          
 193          /********************清屏幕**********************/
 194          void LCD_Clr()      
 195          {
 196   1        unsigned char j,i;
 197   1              WriteLCD_Command(0xB8);
 198   1              WriteLCD_Command(0x40);
 199   1              for(i=0;i<8;i++)
 200   1              {
 201   2                WriteLCD_Command(0xB8+i);
 202   2                WriteLCD_Command(0x40);
 203   2                      for(j=0;j<128;j++)
 204   2                {
 205   3                  WriteLCD_Data(0x00);
 206   3                }
 207   2              }
 208   1      }
 209          
 210          /********************显示文档*********************/
 211          void Display_Text(void)
 212          {
 213   1        LCD_Display_Word(0,16,dis1); //北
 214   1        LCD_Display_Word(0,32,dis2); //斗
 215   1        LCD_Display_Word(0,48,dis3); //星
 216   1        LCD_Display_Word(0,64,dis4); //工
 217   1        LCD_Display_Word(0,80,dis5); //化
 218   1        LCD_Display_Word(0,96,dis6); //所
 219   1        LCD_Display_Eng(2,32,dis7);  //b
 220   1        LCD_Display_Eng(2,40,dis8);  //i
 221   1        LCD_Display_Eng(2,48,dis9);  //g
 222   1        LCD_Display_Eng(2,56,dis10); //-
 223   1        LCD_Display_Eng(2,64,dis11); //d
 224   1        LCD_Display_Eng(2,72,dis12); //i
 225   1        LCD_Display_Eng(2,80,dis13); //p
 226   1        LCD_Display_Eng(2,88,dis14); //p
 227   1        LCD_Display_Eng(2,96,dis15); //e
 228   1        LCD_Display_Eng(2,104,dis16); //r
 229   1        LCD_Display_Eng(4,48,dis17); //1
 230   1        LCD_Display_Eng(4,56,dis18); //2
 231   1        LCD_Display_Eng(4,64,dis19); //8
 232   1        LCD_Display_Eng(4,72,dis20); //6
 233   1        LCD_Display_Eng(4,80,dis21); //4
 234   1        LCD_Display_Word(6,48,dis22);//王
 235   1        LCD_Display_Word(6,64,dis23);//敬
 236   1        LCD_Display_Word(6,80,dis24);//明
 237   1      }
 238          
 239          //void Delay400Ms(void) 
 240          //{ 
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 5   

 241          // unsigned char TempCycA = 5; 
 242          // unsigned int TempCycB; 
 243          // while(TempCycA--) 
 244          // { 
 245          //  TempCycB=7269; 
 246          //  while(TempCycB--); 
 247          // }; 
 248          //} 
 249          
 250          void Select_Char(char m_char,unsigned char Page,unsigned char Rom)
 251          {
 252   1              switch(m_char)
 253   1              {
 254   2                      case 0:
 255   2                              LCD_Display_Eng(Page,Rom,dis30);
 256   2                              break;
 257   2                      case 1:
 258   2                              LCD_Display_Eng(Page,Rom,dis17);
 259   2                              break;
 260   2                      case 2:
 261   2                              LCD_Display_Eng(Page,Rom,dis18);
 262   2                              break;
 263   2                      case 3:
 264   2                              LCD_Display_Eng(Page,Rom,dis26);
 265   2                              break;
 266   2                      case 4:
 267   2                              LCD_Display_Eng(Page,Rom,dis21);
 268   2                              break;
 269   2                      case 5:
 270   2                              LCD_Display_Eng(Page,Rom,dis27);
 271   2                              break;
 272   2                      case 6:
 273   2                              LCD_Display_Eng(Page,Rom,dis20);
 274   2                              break;
 275   2                      case 7:
 276   2                              LCD_Display_Eng(Page,Rom,dis28);
 277   2                              break;
 278   2                      case 8:
 279   2                              LCD_Display_Eng(Page,Rom,dis19);
 280   2                              break;
 281   2                      case 9:
 282   2                              LCD_Display_Eng(Page,Rom,dis29);
 283   2                              break;
 284   2                      case 10://.
 285   2                              LCD_Display_Eng(Page,Rom,dis32);
 286   2                              break;
 287   2                      case 11://℃
 288   2                              LCD_Display_Word(Page,Rom,dis31);
 289   2                              break;
 290   2                      default:
 291   2                        LCD_Display_Eng(Page,Rom,dis33);
 292   2                        break;
 293   2              }
 294   1      }
 295          
 296          void Display_Temperature(int DTemperature)//顺序十位、个位、点、点后一位
 297          {
 298   1              char bai,shi,ge;
 299   1              bai = DTemperature/100;
 300   1              Select_Char(bai,4,48);
 301   1              shi = (DTemperature%100)/10;
 302   1              Select_Char(shi,4,56);
C51 COMPILER V8.05a   TMP36                                                                03/10/2009 11:19:06 PAGE 6   

 303   1              Select_Char(10,4,64);
 304   1              ge  = (DTemperature%100)%10;
 305   1              Select_Char(ge,4,72);
 306   1              Select_Char(11,4,80);
 307   1      }
 308          
 309          int Account_Temperature(long int ATemperature)
 310          {
 311   1              int m_Temperature;
 312   1              m_Temperature = (ATemperature*128)/(1677722);
 313   1              m_Temperature = (m_Temperature-500);
 314   1        return m_Temperature;
 315   1      }
 316          
 317          long int Get_Temperature(void)
 318          {
 319   1              long int m_Temperature;
 320   1              CAL = 0;//启动转换
 321   1              RDY0 = 0;//允许写寄存器
 322   1              m_Temperature = ADC0H;
 323   1              m_Temperature = ADC0M|(m_Temperature<<8);
 324   1              m_Temperature = ADC0L|(m_Temperature<<8);
 325   1              return m_Temperature;
 326   1      }
 327          
 328          void main(void)
 329          {
 330   1              ADC_Init();
 331   1              LCD_Init();
 332   1              Display_Text();
 333   1              while(1)
 334   1              {
 335   2                      g_TemperatureL = 0;
 336   2                      g_TemperatureL = Get_Temperature();
 337   2                      g_TemperatureI = Account_Temperature(g_TemperatureL);
 338   2                      Display_Temperature(g_TemperatureI);
 339   2                      delay(10);
 340   2              }
 341   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1152    ----
   CONSTANT SIZE    =    704    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      16
   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 + -