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

📄 lyd.lst

📁 基于测距式的超声波测距仪
💻 LST
📖 第 1 页 / 共 2 页
字号:
 156   1                     Uint j;
 157   1                     while(i--)
 158   1                     {
 159   2                             j=7269;
 160   2                             while(j--);
 161   2                     };
 162   1            } 
 163          
 164           /*_________________________________________________________________________
 165           _________________________以下的为自己写的程序______________________________
 166           ___________________________________________________________________________*/
 167           //***************************** 延时程序*******************************//                                                  
             -                      
 168          void delay(d)//延时d微秒
 169                {
 170   1             while(d--);
 171   1            }
 172           
 173          /*===============================*/
 174          /*系统初始化*/
 175          void system_init(void)                   
 176          {
 177   1        TMOD=0x20;              /* 定时器0工作在方式二,用作自动从装的8位定时器        */
 178   1        EA=1;                   /* 开中断允许总开关                                    */
C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 4   

 179   1        EX1=1;                  /* 允许外部中断1                                       */
 180   1        IT1=1;                  /* 外部中断源1位负条变触发方式                         */
 181   1      
 182   1        ET0=1;                  /* 允许定时器T0中断产生                                */
 183   1        TR0=0;                  /* 定时器0没开始工作                                   */
 184   1        TH0=0x9c;               /* 12M晶振,定时0.1ms,用来控制发波时间,并计算时间间隔*/
 185   1        TL0=0x9c;
 186   1      
 187   1        ET1=1;                  /* 允许定时器T1中断0产生                               */
 188   1        TH1 = 0x00;                                   
 189   1        TL1 = 0x00;
 190   1      
 191   1        transmit=0;             /*不发波                                                                                               */
 192   1        for(i=0;i<40000;i++);   /*延时,使余震停止                                                                     */
 193   1        reset=0;                    /*外部电路不能产生中断                                                             */
 194   1      }
 195           
 196           /*=================================*/
 197          /* 定时器中断0处理程序,用于计算传波时间(等待1ms)*/
 198          void timer0(void) interrupt 1 using 1
 199          {
 200   1              counter++;
 201   1      
 202   1      }
 203          
 204           /*=================================*/
 205           /* 定时器中断1处理程序,用于计算传波时间(等待1ms)*/
 206          void timer1(void) interrupt 3 
 207          {
 208   1          disable_flag=1;
 209   1      
 210   1      }
 211           /*===================================*/
 212          /*外部中断1处理程序,接收到回波*/
 213          void int0(void) interrupt 0 using 1 
 214          {
 215   1              TR1=0;                                   //停止计数器T1计数
 216   1              receive_flag=1;                  //接收回波标志置位:收到回波
 217   1      
 218   1      if(TH1>3)
 219   1      {
 220   2              temp1=TH1*256+TL1;                  //读出计数值,      
 221   2              temp1=(temp1*172)/25;                   //换算成距离 cm
 222   2      }
 223   1      
 224   1      else temp1=0;
 225   1                      
 226   1                  
 227   1                  TH1 = 0x00;                 
 228   1                  TL1 = 0x00;
 229   1                  TR1 = 1;                                    //启动T1计数
 230   1      }
 231          
 232           /*===================================*/
 233          /*显示距离*/
 234          void showdate(unsigned int t)
 235           {
 236   1       
 237   1        unsigned int count,play;
 238   1        count=t;
 239   1        i=10;
 240   1        
C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 5   

 241   1           while(count&&i>0)
 242   1                { play=count%10;
 243   2                  DispOneChar(i,1,play+'0');
 244   2                  count=count/10;
 245   2                      i--;
 246   2                 }   
 247   1      }
 248          /*====================================*/
 249          /*主程序处理*/
 250          void main(void)
 251          { 
 252   1            Delay400Ms();                   // 启动时必须的延时,等待lcm进入工作状态
 253   1            LcdReset();                                         // 这也是必需的....初始化
 254   1            system_init();
 255   1                ePutstr(0,0,exampl);            // 上面一行显示一个预定字符串
 256   1      
 257   1      
 258   1        while(1)
 259   1        {
 260   2              transmit=0;                 //不发波
 261   2              for(i=0;i<4000;i++);    //延时,使余震停止
 262   2              reset=0;                //外部电路不能产生中断
 263   2                      TL0=0x9c;                   // 从设定时器初值
 264   2                      TH0=0x9c;
 265   2                      counter=0;       
 266   2                      TR0=1;
 267   2                      TR1=1;                      //开始计数
 268   2                      transmit=1;                 //发波
 269   2                      while(counter<4);           //等待0.5ms到来,
 270   2                      transmit=0;             //停止发波
 271   2                      while(counter<10);     // 等待1ms到来
 272   2                      reset=1;                        //外部电路可以产生中断
 273   2      
 274   2      
 275   2              if(disable_flag==0)                                /*在测量范围之内*/
 276   2              {  
 277   3                 if(receive_flag==1)
 278   3                    { receive_flag=0;
 279   4                          
 280   4      
 281   4                          for(i=0;i<16;i++)      DispOneChar(i,0,examp2[i]);
 282   4                      for(i=0;i<16;i++)          DispOneChar(i,1,' ');
 283   4                      dis=temp1;
 284   4                  showdate(dis); 
 285   4                      delay(60000);
 286   4                        }
 287   3                      else
 288   3                      {          for(i=0;i<16;i++)      DispOneChar(i,0,examp3[i]);
 289   4                                 for(i=0;i<16;i++)       DispOneChar(i,1,' ');
 290   4                      }
 291   3               }  
 292   2                                                                                 
 293   2              
 294   2                else            /*不在测量范围之内*/
 295   2                                  {  
 296   3                                         for(i=0;i<16;i++)      DispOneChar(i,0,exampl[i]);
 297   3                                 for(i=0;i<16;i++)       DispOneChar(i,1,' ');
 298   3                                         disable_flag=0;
 299   3                              }                     
 300   2          }
 301   1      }

C51 COMPILER V8.02   LYD                                                                   04/22/2008 11:38:52 PAGE 6   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    881    ----
   CONSTANT SIZE    =     59    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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