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

📄 max232.lst

📁 基于proteus的多点温控系统的设计与仿真,该系统能够同时检测多路温度,用DS18B20温度传感器,AT89C51单片机为CPU.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAX232                                                                01/11/2009 16:09:35 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAX232
OBJECT MODULE PLACED IN MAX232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAX232.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #include<stdio.h>
   3          #include<intrins.h>
   4          #include "LCD1602.h"
   5          
   6          
   7          
   8          #define uchar unsigned char
   9          #define uint unsigned int
  10          
  11          unsigned char TBuffer[15];
  12          sbit menu=P2^3; //按键菜单
  13          sbit key_up=P2^4;   //按键UP
  14          sbit key_down=P2^5; //按键DOWN
  15          sbit enter=P2^6;//按键确定
  16          sbit  DQ=P1^3;        //温度输入口
  17          sbit alarm=P1^0;//蜂鸣器报警接口
  18          sbit led1=P1^1;//状态灯1接口
  19          sbit led2=P1^2;//状态灯2接口
  20          
  21          unsigned char aaa,flag1,bbb,ccc,ddd;
  22          unsigned int tvalue;      //16进制温度值
  23          bit tflag;        //温度正负标志
  24          bit Keyset;       //进入温度设定键标志位
  25          bit limit_max;    //温度上限标志
  26          bit limit_min;    //温度下限标志
  27          unsigned int limit_up=0x1A;      //10进制上限温度值
  28          unsigned int limit_down=0x0f;    //10进制下限温度值
  29          unsigned char Keyenter;        //键值
  30          unsigned char temperature;   //10进制温度值
  31          
  32          unsigned char buffer[3];
  33          unsigned char flag=1;
  34          unsigned char DataFromPC[3];
  35          
  36          unsigned char flag_URT=0;
  37          unsigned char test=0;
  38          unsigned char count=0;
  39          
  40          /*------------------------------------------------
  41          Speaker Registers
  42          ------------------------------------------------*/
  43          sbit SPEACKER = P3^7;
  44          sbit Send_en = P3^2;
  45          bit show_flag;
  46                    
  47          
  48          
  49          
  50          //uchar open_flag=0;
  51          
  52          
  53          void IntToStr(unsigned int t, unsigned char *str, unsigned char n) 
  54          {
  55   1              unsigned char a[5]; char i, j;                                  
C51 COMPILER V7.06   MAX232                                                                01/11/2009 16:09:35 PAGE 2   

  56   1              a[0]=(t/10000)%10;         //取得整数值到数组           
  57   1              a[1]=(t/1000)%10;                                       
  58   1              a[2]=(t/100)%10;                                        
  59   1              a[3]=(t/10)%10;                                         
  60   1              a[4]=(t/1)%10;                                          
  61   1                                                            
  62   1              for(i=0; i<5; i++)         //转成ASCII码                
  63   1                      a[i]=a[i]+'0';                                          
  64   1              for(i=0; a[i]=='0' && i<=3; i++);                       
  65   1              for(j=5-n; j<i; j++)       //填充空格                   
  66   1                      { *str=' ';  str++; }                                   
  67   1              for(; i<5; i++)                                         
  68   1                      { *str=a[i]; str++; }  //加入有效的数字                 
  69   1              *str='\0'; 
  70   1      } 
  71          
  72          
  73          
  74          void Delay1ms(unsigned int count)
  75           {
  76   1              unsigned int i,j;
  77   1              for(i=0;i<count;i++)
  78   1              for(j=0;j<120;j++);
  79   1       }
  80          /******************************ds1820程序***************************************/
  81          void delay_18B20(unsigned int i)//延时1微秒
  82          {
  83   1         while(i--);
  84   1      }
  85          
  86          void ds1820rst()/*ds1820复位*/
  87          { unsigned char x=0;
  88   1      DQ = 1;          //DQ复位
  89   1      delay_18B20(4); //延时
  90   1      DQ = 0;          //DQ拉低
  91   1      delay_18B20(100); //精确延时大于480us
  92   1      DQ = 1;          //拉高
  93   1      delay_18B20(40); 
  94   1         } 
  95          
  96          unsigned char ds1820rd()/*读数据*/
  97          { unsigned char i=0;
  98   1      unsigned char dat = 0;
  99   1      for (i=8;i>0;i--)
 100   1      {   DQ = 0; //给脉冲信号
 101   2          dat>>=1;
 102   2          DQ = 1; //给脉冲信号
 103   2          if(DQ)
 104   2          dat|=0x80;
 105   2          delay_18B20(10);
 106   2      }
 107   1         return(dat);
 108   1      }
 109          
 110          void ds1820wr(uchar wdata)/*写数据*/
 111          {unsigned char i=0;
 112   1          for (i=8; i>0; i--)
 113   1         { DQ = 0;
 114   2           DQ = wdata&0x01;
 115   2           delay_18B20(10);
 116   2           DQ = 1;
 117   2           wdata>>=1;
C51 COMPILER V7.06   MAX232                                                                01/11/2009 16:09:35 PAGE 3   

 118   2         }
 119   1      }
 120          
 121          
 122          
 123          read_temp()/*读取温度值并转换*/
 124          {unsigned char a,b;
 125   1      ds1820rst();    
 126   1      ds1820wr(0xcc);//*跳过读序列号*/
 127   1      ds1820wr(0x44);//*启动温度转换*/
 128   1      ds1820rst();    
 129   1      ds1820wr(0xcc);//*跳过读序列号*/ 
 130   1      ds1820wr(0xbe);//*读取温度*/ 
 131   1      a=ds1820rd();
 132   1      b=ds1820rd();
 133   1      tvalue=b;
 134   1      tvalue<<=8;
 135   1      tvalue=tvalue|a;
 136   1          if(tvalue<0x0fff)
 137   1         tflag=0;
 138   1          else
 139   1         {tvalue=~tvalue+1;
 140   2      tflag=1;
 141   2         }
 142   1      tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 143   1      return(tvalue);
 144   1      }
 145          
 146          /***********************温度数据处理与显示*********************************/
 147          void ds1820disp(unsigned int t, unsigned char *str, unsigned char n)
 148          {
 149   1              unsigned char tp[14]; char i, j;
 150   1              if(tflag==1&&Keyset==0){
 151   2                        tp[0]=0x2d;       //加一个"-"
 152   2                        tp[1]=t/1000+0x30;//百位数
 153   2                        tp[2]=t%1000/100+0x30;//十位数
 154   2                        tp[3]=t%100/10+0x30;//个位数
 155   2                        tp[4]=0x2e;
 156   2                        tp[5]=t%10+0x30;//小数位
 157   2                        tp[6]=0xdf;//显示"。"
 158   2                        tp[7]=0x43;//"C"
 159   2                        tp[8]=0xa0;tp[9]=0xa0;tp[10]=0xa0;tp[11]=0xa0;tp[12]=0xa0;
 160   2                        temperature=(tp[0]-0x30)*100+(tp[1]-0x30)*10+(tp[2]-0x30)+(tp[4]-0x30)*0.1;
 161   2                              for(i=0; tp[i]=='0' && i<=3; i++);
 162   2                              for(j=14-n; j<i; j++){ *str=' ';  str++; }  //填充空格
 163   2                                  for(; i<14; i++){ *str=tp[i]; str++; }  //加入有效的数字
 164   2                                      *str='\0';
 165   2                        }
 166   1              if(tflag==0&&Keyset==0){
 167   2                   tp[0]=t/1000+0x30;//百位数
 168   2                   tp[1]=t%1000/100+0x30;//十位数
 169   2                   tp[2]=t%100/10+0x30;//个位数
 170   2                   tp[3]=0x2e;//显示小数点
 171   2                   tp[4]=t%10+0x30;//小数位
 172   2                   tp[5]=0xdf;//显示"。"
 173   2                   tp[6]=0x43;//"C"
 174   2                   tp[7]=0xa0;tp[8]=0xa0;tp[9]=0xa0;tp[10]=0xa0;tp[11]=0xa0;tp[12]=0xa0;
 175   2                   temperature=(tp[0]-0x30)*100+(tp[1]-0x30)*10+(tp[2]-0x30)+(tp[4]-0x30)*0.1;
 176   2                         for(i=0; tp[i]=='0' && i<=3; i++);
 177   2                     for(j=13-n; j<i; j++){ *str=' ';  str++; }       //填充空格
 178   2                             for(; i<13; i++){ *str=tp[i]; str++; }  //加入有效的数字
 179   2                             *str='\0';
C51 COMPILER V7.06   MAX232                                                                01/11/2009 16:09:35 PAGE 4   

 180   2                   }  
 181   1               if(tflag==0&&Keyset==1){
 182   2                   tp[0]=t/100+0x30;//百位数
 183   2                   tp[1]=t%100/10+0x30;//十位数
 184   2                   tp[2]=t%100%10+0x30;//个位数
 185   2                   tp[3]=0x2e;//显示小数点
 186   2                   tp[4]=0+0x30;//小数位
 187   2                   tp[5]=0xdf;//显示"。"
 188   2                   tp[6]=0x43;//"C"
 189   2                   tp[7]=0xa0;tp[8]=0xa0;tp[9]=0xa0;tp[10]=0xa0;tp[11]=0xa0;tp[12]=0xa0;
 190   2                         for(i=0; tp[i]=='0' && i<=3; i++);

⌨️ 快捷键说明

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