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

📄 main.lst

📁 超声波的发射和接收
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  04/11/2009 10:23:23 PAGE 1   


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

line level    source

   1          /*********显示的结果为d=**** c (范围:005-070 cm)*******/
   2          /******P3^0输出38KHZ方波;P3.2接收返回信号*************/
   3          #include <reg52.h>
   4          #include <intrins.h>
   5          #define ulong unsigned long int
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          
   9          sbit RS    = P3^5;//RS=H 数据输入;RS=L时 指令输入;
  10          sbit RW    = P3^6;//RW=H 读数据  ;RW=L时 写数据  ;
  11          sbit E     = P3^7;//E =H->L 信号使能;
  12          sbit led=P3^4;
  13          extern void cs_t(void);
  14          extern void delay(uint);
  15          data uchar testok;
  16          float speed=0;  // 声音速度
  17          unsigned long time;
  18          
  19          uchar disp_buf[4]={0,0,0,0};//显示缓冲区
  20          uchar code dis_code[]={"Distance is:"};
  21          /***********显示延时函数***************/
  22          void delay_a(uchar z)
  23          {
  24   1              uint i,j;
  25   1              for(i=z;i>0;i--)
  26   1                for(j=110;j>0;j--);
  27   1      }
  28          
  29          void Delay_MS(unsigned char  no)
  30          { 
  31   1          unsigned char  i,j;                 //延时参数
  32   1          for(; no>0; no--)
  33   1          { 
  34   2              for(i=0; i<100; i++)
  35   2              for(j=0; j<100; j++);
  36   2          }
  37   1      }
  38          /********************************************************************\
  39          |* 函 数 名: write_command(uchar tempdata)                                                      *|
  40          |* 功能描述: 将数据码写入LCD数据寄存器                                                          *|
  41          \********************************************************************/
  42          void write_command(uchar tempdata)
  43          {
  44   1              RW=0;
  45   1              RS=0;     //RS=0/RW=0 时写指令;
  46   1              delay_a(5);     
  47   1              P1=tempdata;
  48   1              delay_a(5);
  49   1              E=1;
  50   1              delay_a(5); 
  51   1              E=0;
  52   1      }
  53          /********************************************************************\
  54          |* 函 数 名: void write_data(uchar tempdata)                                            *|
  55          |* 功能描述: 写LCD1602使能程序                                                                  *|
C51 COMPILER V8.08   MAIN                                                                  04/11/2009 10:23:23 PAGE 2   

  56          \********************************************************************/
  57          void write_data(uchar tempdata)
  58          {       
  59   1              RW=0;
  60   1              RS=1;      //RS=1/RW=0 时写数据;
  61   1              delay_a(5);
  62   1              P1=tempdata;
  63   1              delay_a(5);
  64   1              E=1;
  65   1              delay_a(5); 
  66   1              E=0;    
  67   1      }
  68          /*********液晶显示距离函数*************/
  69          void display(uint dis_data)
  70          {
  71   1              uint i;
  72   1              disp_buf[3] =(dis_data % 10);
  73   1          dis_data /= 10;
  74   1          disp_buf[2] =(dis_data % 10);
  75   1          dis_data /= 10;
  76   1          disp_buf[1] =(dis_data % 10);
  77   1          disp_buf[0] =(dis_data / 10);
  78   1              write_command(0xc0+2);
  79   1              for(i=0;i<4;i++)
  80   1              {
  81   2                      write_data(0x30+disp_buf[i]);
  82   2                      delay_a(9);
  83   2              }
  84   1      }
  85          /********************* 超声波接收程序(外部中断0)*******************/
  86          void cs_r(void) interrupt 0 using 1
  87          {
  88   1         TR0 = 0;
  89   1         ET0 = 0;
  90   1         EX0 = 0;
  91   1         testok = 1;    
  92   1      }
  93          
  94          /********************* 超时清除程序(内部中断T0)********************/
  95          void overtime(void) interrupt 1 using 1
  96          {
  97   1         EX0 = 0;
  98   1         TR0 = 0;
  99   1         ET0 = 0;   
 100   1         testok = 2;
 101   1      }
 102          void init()
 103          {
 104   1              uint i;
 105   1              time=0;
 106   1          speed = 332 + 0.607*15.0;//声速
 107   1      
 108   1              write_command(0x01);    
 109   1              write_command(0x38);    
 110   1              write_command(0x0C);    
 111   1              write_command(0x06);
 112   1              write_command(0x80);
 113   1              for(i=0;i<12;i++)
 114   1              {
 115   2                      write_data(dis_code[i]);//字符显示
 116   2                      delay_a(5);
 117   2              }
C51 COMPILER V8.08   MAIN                                                                  04/11/2009 10:23:23 PAGE 3   

 118   1              write_command(0xc0);
 119   1              write_data(0x64);
 120   1              delay_a(4);
 121   1              write_data(0x3d);
 122   1              delay_a(4);
 123   1              display(time);
 124   1              write_command(0xc0+6);
 125   1              write_data(0x63);
 126   1              delay_a(4);
 127   1              write_data(0x6d);
 128   1              delay_a(4);
 129   1              
 130   1              TMOD=0x11;
 131   1          EA=1;
 132   1              led=1;   
 133   1      }
 134          //=========================主函数============================//
 135          void main(void)
 136          { 
 137   1        init();   
 138   1        while(1) 
 139   1              { 
 140   2         cs_t();
 141   2         delay(1);
 142   2         testok = 0;
 143   2         EX0 = 1;
 144   2         ET0 = 1;
 145   2         //IT0=1;//下降沿触发;
 146   2        while(!testok) 
 147   2         if(testok==1)
 148   2          { time = TH0;
 149   3            time = (time<<8)|TL0;       // uS
 150   3            time *= speed/2;            // *速度(m/S) / 2
 151   3            time /= 10000;              // /1000000(m)*100(cm) 
 152   3                led=0;    
 153   3        }
 154   2        else
 155   2        {led=1;}
 156   2          display(time);//显示时间
 157   2          Delay_MS(18);
 158   2               
 159   2          }     
 160   1      } 
 161          
 162          
 163          
 164          


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


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

⌨️ 快捷键说明

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