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

📄 main.lst

📁 上位机是VB设置成的界面;下位机是用C编释的51单片机的温度采集模块。
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 11/20/2008 22:47:21 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c DEBUG OBJECTEXTEND

line level    source

   1          #include <REG52.H>
   2          #include <intrins.h>
   3          #include<SCON.c>
   4          #include<STRING.H>
   5          #define uint unsigned int
   6          #define uchar unsigned char
   7          sbit DQ = P1^0;        //温度传送数据IO口
   8          uchar temp_value;      //温度值
   9          uchar TempBuffer[5];
  10          
  11          
  12          /***********1602液晶显示部分子程序****************/
  13          
  14          //Port Definitions**********************************************************
  15          sbit LcdRs              = P2^5;
  16          sbit LcdRw              = P2^6;
  17          sbit LcdEn      = P2^7;
  18          sfr  DBPort     = 0x80;         //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
  19          
  20          //内部等待函数**************************************************************************
  21          unsigned char LCD_Wait(void)
  22          {
  23   1              LcdRs=0;
  24   1              LcdRw=1;        _nop_();
  25   1              LcdEn=1;        _nop_();
  26   1                                                       
  27   1              LcdEn=0;
  28   1              return DBPort;          
  29   1      }
  30          //向LCD写入命令或数据************************************************************
  31          #define LCD_COMMAND                     0      // Command
  32          #define LCD_DATA                        1      // Data
  33          #define LCD_CLEAR_SCREEN        0x01      // 清屏
  34          #define LCD_HOMING              0x02      // 光标返回原点
  35          void LCD_Write(bit style, unsigned char input)
  36          {
  37   1              LcdEn=0;
  38   1              LcdRs=style;
  39   1              LcdRw=0;                _nop_();
  40   1              DBPort=input;   _nop_();//注意顺序
  41   1              LcdEn=1;                _nop_();//注意顺序
  42   1              LcdEn=0;                _nop_();
  43   1              LCD_Wait();     
  44   1      }
  45          
  46          //设置显示模式************************************************************
  47          #define LCD_SHOW                        0x04    //显示开
  48          #define LCD_HIDE                        0x00    //显示关          
  49          
  50          #define LCD_CURSOR                      0x02    //显示光标
  51          #define LCD_NO_CURSOR           0x00    //无光标                     
  52          
  53          #define LCD_FLASH                       0x01    //光标闪动
  54          #define LCD_NO_FLASH            0x00    //光标不闪动
  55          
C51 COMPILER V8.05a   MAIN                                                                 11/20/2008 22:47:21 PAGE 2   

  56          void LCD_SetDisplay(unsigned char DisplayMode)
  57          {
  58   1              LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
  59   1      }
  60          
  61          //设置输入模式************************************************************
  62          #define LCD_AC_UP                       0x02
  63          #define LCD_AC_DOWN                     0x00      // default
  64          
  65          #define LCD_MOVE                        0x01      // 画面可平移
  66          #define LCD_NO_MOVE                     0x00      //default
  67          
  68          void LCD_SetInput(unsigned char InputMode)
  69          {
  70   1              LCD_Write(LCD_COMMAND, 0x04|InputMode);
  71   1      }
  72          
  73          //初始化LCD************************************************************
  74          void LCD_Initial()
  75          {
  76   1              LcdEn=0;
  77   1              LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
  78   1              LCD_Write(LCD_COMMAND,0x38);
  79   1              LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
  80   1              LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  81   1              LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
  82   1      }
  83          
  84          //液晶字符输入的位置************************
  85          void GotoXY(unsigned char x, unsigned char y)
  86          {
  87   1              if(y==0)
  88   1                      LCD_Write(LCD_COMMAND,0x80|x);
  89   1              if(y==1)
  90   1                      LCD_Write(LCD_COMMAND,0x80|(x-0x40));
  91   1      }
  92          
  93          //将字符输出到液晶显示
  94          void Print(unsigned char *str)
  95          {
  96   1              while(*str!='\0')
  97   1              {
  98   2                      LCD_Write(LCD_DATA,*str);
  99   2                      str++;
 100   2              }
 101   1      }
 102          
 103          
 104          /***********ds18b20子程序*************************/
 105          
 106          /***********ds18b20延迟子函数(晶振12MHz )*******/ 
 107          
 108          void delay_18B20(unsigned int i)
 109          {
 110   1              while(i--);
 111   1      }
 112          
 113          /**********ds18b20初始化函数**********************/
 114          
 115          void Init_DS18B20(void) 
 116          {
 117   1               unsigned char x=0;
C51 COMPILER V8.05a   MAIN                                                                 11/20/2008 22:47:21 PAGE 3   

 118   1               DQ = 1;          //DQ复位
 119   1               delay_18B20(8);  //稍做延时
 120   1               DQ = 0;          //单片机将DQ拉低
 121   1               delay_18B20(80); //精确延时 大于 480us
 122   1               DQ = 1;          //拉高总线
 123   1               delay_18B20(14);
 124   1               x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 125   1               delay_18B20(20);
 126   1      }
 127          
 128          /***********ds18b20读一个字节**************/  
 129          
 130          unsigned char ReadOneChar(void)
 131          {
 132   1              uchar i=0;
 133   1              uchar dat = 0;
 134   1              for (i=8;i>0;i--)
 135   1               {
 136   2                        DQ = 0; // 给脉冲信号
 137   2                        dat>>=1;
 138   2                        DQ = 1; // 给脉冲信号
 139   2                        if(DQ)
 140   2                        dat|=0x80;
 141   2                        delay_18B20(4);
 142   2               }
 143   1              return(dat);
 144   1      }
 145          
 146          /*************ds18b20写一个字节****************/  
 147          
 148          void WriteOneChar(uchar dat)
 149          {
 150   1              unsigned char i=0;
 151   1              for (i=8; i>0; i--)
 152   1              {
 153   2                      DQ = 0;
 154   2                      DQ = dat&0x01;
 155   2              delay_18B20(5);
 156   2                      DQ = 1;
 157   2              dat>>=1;
 158   2       }
 159   1      }
 160          
 161          /**************读取ds18b20当前温度************/
 162          
 163          void ReadTemp(void)
 164          {
 165   1              unsigned char a=0;
 166   1              unsigned char b=0;
 167   1              unsigned char t=0;
 168   1      
 169   1              Init_DS18B20();
 170   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
 171   1              WriteOneChar(0x44);     // 启动温度转换
 172   1      
 173   1              delay_18B20(100);       // this message is wery important
 174   1      
 175   1              Init_DS18B20();
 176   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 177   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 178   1      
 179   1              delay_18B20(100);
C51 COMPILER V8.05a   MAIN                                                                 11/20/2008 22:47:21 PAGE 4   

 180   1      
 181   1              a=ReadOneChar();        //读取温度值低位
 182   1              b=ReadOneChar();                //读取温度值高位
 183   1              temp_value=b<<4;
 184   1              temp_value+=(a&0xf0)>>4;               
 185   1      }
 186          void temp_to_str()   //温度数据转换成液晶字符显示
 187          {
 188   1        TempBuffer[0]=temp_value/10+'0';  //十位
 189   1        TempBuffer[1]=temp_value%10+'0';  //个位
 190   1        TempBuffer[2]=0xdf;   //温度符号
 191   1        TempBuffer[3]='C';
 192   1        TempBuffer[4]='\0';
 193   1      }
 194          void Delay1ms(unsigned int count)
 195          {
 196   1              unsigned int i,j;
 197   1              for(i=0;i<count;i++)
 198   1              for(j=0;j<120;j++);
 199   1      }
 200          
 201          /*延时子程序*/
 202          void mdelay(uint delay)
 203          {       uint i;
 204   1              for(;delay>0;delay--)
 205   1                      {for(i=0;i<62;i++) //1ms延时.
 206   2                      {;}
 207   2                      }
 208   1      }
 209          
 210          void main(void)
 211          {  
 212   1        unsigned char i;         
 213   1              LCD_Initial();    
 214   1              Init_DS18B20() ;
 215   1          UART_Init();
 216   1          mdelay(3000);          
 217   1              while(1)
 218   1              { 
 219   2                GotoXY(0,0);
 220   2            Print("THE TEMP IS:");
 221   2                ReadTemp(); 
 222   2            temp_to_str();            
 223   2            GotoXY(12,0);
 224   2            Print(TempBuffer);          //显示温度
 225   2                for(i=0;i<2;i++)
 226   2                {
 227   3                  SBUF=TempBuffer[i];   //发送数据
 228   3              while(!TI){}
 229   3              TI=0; 
 230   3                 }                                            
 231   2                if(tmp1==0)             //检测串口通信状况
 232   2                  {
 233   3                       GotoXY(0,1);
 234   3                   Print("SCOMM IS ERROR") ;
 235   3                       }
 236   2               else 
 237   2                  {
 238   3                   GotoXY(0,1);
 239   3                   Print("SCOMM IS OK") ;
 240   3                  }
 241   2                       mdelay(1000);  //1秒延时
C51 COMPILER V8.05a   MAIN                                                                 11/20/2008 22:47:21 PAGE 5   

 242   2               }
 243   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    563    ----
   CONSTANT SIZE    =     40    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       2
   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 + -