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

📄 chaoshengbo.lst

📁 单片机超声波测速
💻 LST
字号:
C51 COMPILER V7.50   CHAOSHENGBO                                                           09/11/2008 20:26:15 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CHAOSHENGBO
OBJECT MODULE PLACED IN chaoshengbo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chaoshengbo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************/
   2          //Program Name  :  超声波测距仪
   3          //Dedigned by      :  sc.Dai
   4          //Date                 :  2007.4.10
   5          /********************************************/
   6          #include <reg52.h>
   7          #include "intrins.h"
   8          #include "12864LCDdriver.h"
   9          #define uchar unsigned char
  10          #define uint unsigned int
  11          #define ulong unsigned long int
  12          #define V=173
  13          sbit CSOut=P1^0;
  14          sbit Start=P1^4;
  15          
  16          ulong TIME;
  17          uchar DISTANCE;
  18          uchar code discode[11]={'0','1','2','3','4','5','6','7','8','9',' '};
  19          ulong data disnum[5];
  20          bit data ReceiveOK=0;
  21          bit data TOut;
  22          bit data FLAG;
  23          
  24          /*-----------------------------------------------------------*/
  25          //延时函数
  26          /*-----------------------------------------------------------*/
  27          void delay2(uchar x)
  28          {
  29   1       uchar a,b;
  30   1       for(a=0;a<x;a++)
  31   1        for(b=0;b<255;b++);
  32   1      }
  33          
  34          /*-----------------------------------------------------------*/
  35          //初始化
  36          /*-----------------------------------------------------------*/
  37          void init(void)
  38          {
  39   1       lcd_init();//LCD初始化,开机调用一次
  40   1       TMOD=0x01;//T0定时器方式1
  41   1       IT0=0;//INT0负边沿触发
  42   1       IP=0x01;//INT0高优先级
  43   1       EA=1;//开总中断
  44   1      }
  45          
  46          /*-----------------------------------------------------------*/
  47          //超声波发射函数
  48          /*-----------------------------------------------------------*/
  49          void CCOut(void)
  50          {
  51   1       TR0=1;
  52   1      //40KHz
  53   1       CSOut=0;//1
  54   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  55   1       _nop_();_nop_();
C51 COMPILER V7.50   CHAOSHENGBO                                                           09/11/2008 20:26:15 PAGE 2   

  56   1       CSOut=1;//2
  57   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  58   1       _nop_();
  59   1       CSOut=0;//3
  60   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  61   1       _nop_();_nop_();
  62   1       CSOut=1;//4
  63   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  64   1       _nop_();
  65   1       CSOut=0;//5
  66   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  67   1       _nop_();_nop_();
  68   1       CSOut=1;//6
  69   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  70   1       _nop_();
  71   1       CSOut=0;//7
  72   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  73   1       _nop_();_nop_();
  74   1       CSOut=1;//8
  75   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  76   1       _nop_();
  77   1       CSOut=0;//9
  78   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  79   1       _nop_();_nop_();
  80   1       CSOut=1;//10
  81   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  82   1       _nop_();
  83   1       CSOut=0;//11
  84   1       _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  85   1       _nop_();_nop_();
  86   1       CSOut=1;//12
  87   1      }
  88          
  89          /*-----------------------------------------------------------*/
  90          //数据处理函数
  91          /*-----------------------------------------------------------*/
  92          void DataProcess(void)
  93          {
  94   1        ulong time=0;
  95   1        TIME=TH0;
  96   1        TIME=(TIME<<8)|TL0;
  97   1        TIME*=173;//距离
  98   1        TIME=TIME/10000;//单位:CM
  99   1        disnum[0]=(uchar)TIME%10;        //个位
 100   1        disnum[4]=TIME/10;
 101   1        disnum[1]=(uchar)disnum[4]%10;//十位
 102   1        disnum[4]=disnum[4]/10;
 103   1        disnum[2]=(uchar)disnum[4]%10;//百位
 104   1        disnum[4]=disnum[4]/10;
 105   1        disnum[3]=(uchar)disnum[4]%10;//千位
 106   1      }
 107          /*-----------------------------------------------------------*/
 108          //超时处理函数 T0
 109          /*-----------------------------------------------------------*/
 110          void TimeOut(void) interrupt 1
 111          {
 112   1       TR0=0;
 113   1       ET0=0;
 114   1       EX0=0;
 115   1       ReceiveOK=0;
 116   1       TOut=1;
 117   1      }
C51 COMPILER V7.50   CHAOSHENGBO                                                           09/11/2008 20:26:15 PAGE 3   

 118          
 119          /*-----------------------------------------------------------*/
 120          //超声波接收处理函数
 121          /*-----------------------------------------------------------*/
 122          void Receive(void) interrupt 0
 123          {
 124   1       TR0=0;
 125   1       EX0=0;
 126   1       ET0=0;
 127   1       ReceiveOK=1; //设定接收成功标志
 128   1       TOut=0;      //清除超时标志
 129   1      }
 130          
 131          
 132          /*-----------------------------------------------------------*/
 133          //测量结果显示函数
 134          /*-----------------------------------------------------------*/
 135          void LCDDisplay(void)
 136          {
 137   1       lcd_home();
 138   1       lcd_writestr(0,0,"  超声波测距仪  ");
 139   1       lcd_writestr(1,0,"********");
 140   1       lcd_writestr(2,0,"当前被测距离为:");
 141   1       lcd_writestr(3,0,"        厘米    ");
 142   1       lcd_writechar(discode[disnum[3]],discode[disnum[2]],discode[disnum[1]],discode[disnum[0]]);
 143   1      }
 144          
 145          /*-----------------------------------------------------------*/
 146          //出错提示函数
 147          /*-----------------------------------------------------------*/
 148          void ErrorDisplay(void)
 149          {
 150   1       lcd_home();
 151   1       lcd_writestr(0,0,"  超声波测距仪  ");
 152   1       lcd_writestr(1,0,"********");
 153   1       lcd_writestr(2,0,"未收到回波信号,");
 154   1       lcd_writestr(3,0,"请缩短测量距离!");
 155   1      }
 156          
 157          /*-----------------------------------------------------------*/
 158          //预备好提示函数
 159          /*-----------------------------------------------------------*/
 160          void ReadyDis(void)
 161          {
 162   1       lcd_home();
 163   1       lcd_writestr(0,0,"  超声波测距仪  ");
 164   1       lcd_writestr(1,0,"********");
 165   1       lcd_writestr(2,0,"    已准备好    ");
 166   1       lcd_writestr(3,0,"    等待测量    ");
 167   1      }
 168          
 169          /*-----------------------------------------------------------*/
 170          //主函数
 171          /*-----------------------------------------------------------*/
 172          void main(void)
 173          {
 174   1        uchar ct;
 175   1        init();         //初始化
 176   1        ReadyDis();
 177   1        while(1)
 178   1        {
 179   2          if(Start==0)
C51 COMPILER V7.50   CHAOSHENGBO                                                           09/11/2008 20:26:15 PAGE 4   

 180   2          {
 181   3            delay2(50);
 182   3            if(Start==0) FLAG=1;
 183   3          } 
 184   2       
 185   2          if(FLAG==1)   //启动测量一次
 186   2          {
 187   3            TH0=0x00;
 188   3            TL0=0x00;
 189   3            TIME=0x00;
 190   3            ET0=1;
 191   3            CCOut();
 192   3            ct=100;
 193   3            while(--ct);
 194   3            EX0=1;
 195   3            while(TOut==0)
 196   3            {
 197   4              if(ReceiveOK==1)    //接收成功
 198   4              {
 199   5                 DataProcess();   //数据处理
 200   5                 LCDDisplay();    //LCD显示
 201   5                 ReceiveOK=0;     //清除接收成功标志
 202   5                 goto aa;
 203   5              }
 204   4            }
 205   3            if(TOut==1)
 206   3            {
 207   4              TOut=0;
 208   4              ErrorDisplay(); //超时,错误提示
 209   4            }
 210   3        aa: FLAG=0;            //清除定时标志,等待下一次测量
 211   3          }
 212   2        }
 213   1      }
 214           
 215          /*------------------------------end of the program----------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1214    ----
   CONSTANT SIZE    =    146    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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