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

📄 111.lst

📁 该资源 是 自动测量温度大小车 很有用的 希望大家放心的下载
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   111                                                                   03/12/2009 20:05:27 PAGE 1   


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

line level    source

   1          
   2            #include<AT89X51.H>
   3            #include <INTRINS.H> 
   4            
   5            
   6            sbit cs=P1^0;
   7            sbit sid=P1^1;
   8            sbit sclk=P1^2;
   9            sbit fang=P1^3;    // squart wave
  10            sbit ensp=P2^5;
  11            sbit dr=P2^4;      //dangerous distance led
  12            sbit hy=P2^3;      //hold distance led
  13            sbit sg=P2^2;      //safe distance led
  14            sbit dpl=P2^1;     //drop power led
  15            sbit re=P2^7;      //receive  led
  16            sbit vc=P3^0;      //voltage compare
  17            sbit dq=P1^4;      //18B20 data bit
  18            sbit hold=P2^6;     //hold 
  19            sbit play=P2^7;    //play
  20            
  21          //****************************************************************
  22          
  23            bit ff;
  24            bit flag;
  25            bit comflag;
  26            unsigned char pf=3;             //显示警告标志
  27          
  28            unsigned char  soubuf[6];
  29            unsigned char  disbufs[7];   //distance memory
  30            unsigned char  disbuft[8];   //temperature memory
  31            unsigned char timeh,timel;   //time memory
  32            unsigned char temp[2];      //temp[1]温度的高位与temp[0]低位
  33           
  34            unsigned char code word[9]={"当前距离:"};
  35            unsigned char code wordt[5]={"温度:"};
  36            unsigned char code wordd[8]={"危险距离"};
  37            unsigned char code wordh[8]={"保持距离"};
  38            unsigned char code words[8]={"安全距离"};
  39            unsigned char code wordpower[12]={"电源电压正常"};
  40            unsigned char code worddrop[12]={"请您更换电池"};
  41            unsigned char code check[13]={"系统正在自检!"};
  42            unsigned char code sound[10]={74,10,16,22,30,37,43,51,58,67};  //声音地址 点:92;米: 83
  43          //***************************************************************
  44              void lcdbusy(void);
  45              void sendbyte(unsigned char ds); 
  46              void wrlcd(unsigned char sta,ks);
  47              void ex0(void);
  48                  //void t00(void);
  49              void computers(unsigned int v);
  50              void display(void);
  51                  void send0(void);
  52              void send1(void);
  53                  void intlcd(void);
  54                  unsigned int computerv(void);
  55             
C51 COMPILER V8.02   111                                                                   03/12/2009 20:05:27 PAGE 2   

  56              void de750ms(void);
  57              void init18b20(void);
  58              void wr18b20(unsigned char ks);
  59              unsigned read18b20(void);
  60              void gettemper(void);
  61              void computert(void);
  62              void checkself(void);
  63                  void speak(void);
  64           //******************************************************
  65            void init18b20(void)   // 初始化18B20
  66               { unsigned char i;
  67   1                  dq=1;
  68   1              _nop_();
  69   1              dq=0;
  70   1             for(i=255;i>0;i--);
  71   1              dq=1;
  72   1             for(i=30;i>0;i--);
  73   1             for(i=120;i>0;i--)
  74   1               if(dq==0)  {flag=1;break;}//led=0; 
  75   1             for(i=100;i>0;i--);
  76   1             dq=1;        
  77   1             }
  78           //*************************************************************
  79               void wr18b20(unsigned char ks)
  80                    {unsigned char i,j;
  81   1             for(i=8;i>0;i--)
  82   1                  {            
  83   2                       dq=0;
  84   2                       for(j=6;j>0;j--) ;
  85   2                       _nop_();
  86   2                       dq=(bit)(ks&0x01);
  87   2                       for(j=24;j>0;j--);
  88   2                       dq=1;
  89   2                       ks=ks>>1;
  90   2                      } 
  91   1                }
  92          //*************************************************************
  93              unsigned read18b20(void)              //先读出的是低位后读出的是高位,读一个字节子程序
  94               {unsigned char i,j,tdata;
  95   1                 tdata=0;
  96   1                for(j=8;j>0;j--)
  97   1                 {tdata=tdata>>1;
  98   2                 dq=0;
  99   2                 for(i=6;i>0;i--);
 100   2                 _nop_();
 101   2                 dq=1;
 102   2                 for(i=6;i>0;i--);  
 103   2                 if(dq==1)  tdata=tdata|0x80;    
 104   2                 for(i=28;i>0;i--);
 105   2                 dq=1;           
 106   2             }           
 107   1                return(tdata);            
 108   1               }
 109          //*******************************************************************
 110              void gettemper(void)
 111                { 
 112   1                 init18b20();
 113   1             if(flag==1) 
 114   1                    {                   //跳过ROM匹配
 115   2                         wr18b20(0xcc);  
 116   2                                      //发出温度转换命令
 117   2                         wr18b20(0x44);       
C51 COMPILER V8.02   111                                                                   03/12/2009 20:05:27 PAGE 3   

 118   2                 flag=0;
 119   2                
 120   2                 }       
 121   1                         de750ms();
 122   1                         
 123   1                      init18b20();
 124   1                if(flag==1) {                  
 125   2                              wr18b20(0xcc);                                       //读温度命令
 126   2                              wr18b20(0xbe);
 127   2                              temp[0]=read18b20();
 128   2                              temp[1]=read18b20();
 129   2                              flag=0;
 130   2                         
 131   2                        }
 132   1               
 133   1                      else flag=0;
 134   1                }
 135          
 136          //*****************************************************************/
 137              void computert(void)    //温度处理子程序,temp[1]温度的高位与temp[0]低位
 138                   { unsigned char aa,i;
 139   1             unsigned int cc;     
 140   1                      aa=temp[1]&0xf8;
 141   1                      if(aa==0xf8) {disbuft[5]=0x2d; //处理负温度
 142   2                                    
 143   2                                    temp[0]=~temp[0];                                  
 144   2                                                temp[1]=~temp[1];
 145   2                                                if(temp[0]==0xff) temp[1]=temp[1]+1;
 146   2                                                temp[0]=temp[0]+1;
 147   2                            aa=(temp[1]&0x07)<<4;                                                          
 148   2                            aa=aa|((temp[0]&0xf0)>>4);                                                
 149   2                                                disbuft[4]=aa/10;
 150   2                            disbuft[3]=(aa%10);
 151   2                       aa=temp[0]&0x0f;
 152   2               cc=(int)(aa*625);
 153   2               disbuft[3]=cc/10000+disbuft[3];
 154   2                       if (disbuft[3]==10) {disbuft[3]=disbuft[3]&0xff;disbuft[4]=disbuft[4]+1;}
 155   2               cc=cc%10000;
 156   2               disbuft[2]=cc/1000;
 157   2               cc=cc%1000;
 158   2               disbuft[1]=cc/100;
 159   2               cc=cc%100;
 160   2               disbuft[0]=cc/10;
 161   2                           }
 162   1                      else    {aa=((temp[1]&0x07)<<4);   //处理正温度
 163   2                               
 164   2                                       aa=aa|((temp[0]&0xf0)>>4);                                      
 165   2                                       disbuft[0]=aa/10;
 166   2                       disbuft[1]=aa%10;                               
 167   2               aa=temp[0]&0x0f;
 168   2               cc=(int)(aa*625);
 169   2               disbuft[1]=cc/10000+disbuft[1];
 170   2                       if (disbuft[1]==10) {disbuft[1]=0;disbuft[0]=disbuft[0]+1;}
 171   2               cc=cc%10000;
 172   2               disbuft[3]=cc/1000;
 173   2               cc=cc%1000;
 174   2               disbuft[4]=cc/100;
 175   2               cc=cc%100;
 176   2               disbuft[5]=cc/10;
 177   2               disbuft[6]=cc%10;
 178   2      
 179   2             for(i=0;i<7;i++)
C51 COMPILER V8.02   111                                                                   03/12/2009 20:05:27 PAGE 4   

 180   2                  disbuft[i]=disbuft[i]|0x30;
 181   2                 disbuft[2]=0x2e;
 182   2                  
 183   2                       }   
 184   1               }
 185          //*****************************************************************
 186            unsigned int computerv(void)
 187              {unsigned char a;
 188   1               unsigned int v;
 189   1                temp[1]=temp[1]&0x07;
 190   1                a=temp[1]<<4;
 191   1                a=a|(temp[0]>>4);
 192   1                a=a*6;
 193   1                v=3314+a;
 194   1               return(v);
 195   1               
 196   1              }
 197          
 198          //*************************************************************
 199              void de750ms(void)              //750ms
 200                    {unsigned char i,j,k;
 201   1                  for(i=6;i>0;i--)
 202   1                       for(j=255;j>0;j--)
 203   1                         for(k=255;k>0;k--);
 204   1                } 
 205          //*************************************************************
 206            void lcdbusy(void)
 207              {unsigned char i,c;
 208   1                while(1) 
 209   1                 {sendbyte(0xfc);
 210   2                      sclk=1;
 211   2                      c=sid;
 212   2                      sclk=0;
 213   2                 for(i=0;i<15;i++)
 214   2                  {sclk=1;
 215   3                       sclk=0;}
 216   2             if(c==0) break;
 217   2                }       
 218   1         }        
 219              
 220           //**********************************************************
 221            void sendbyte(unsigned char ds)    //向LCD中发送一个字节
 222             {unsigned char i;
 223   1           for(i=0;i<8;i++)
 224   1                 {sclk=1;
 225   2                  sid=ds&0x80;
 226   2                // if((ds&0x80)==0x80)  sid=1;
 227   2                // else sid=0;           
 228   2                 sclk=0;
 229   2                 ds=ds<<1;}
 230   1         }
 231          //*************************************************************
 232             void wrlcd(unsigned char sta,ks)  //向LCD中写入一个起始字节与一个数据
 233               {unsigned char hdata,ldata;          
 234   1                hdata=ks&0xf0;
 235   1                ks=ks&0x0f;
 236   1                ks=ks<<4;
 237   1                ldata=ks;

⌨️ 快捷键说明

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