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

📄 01.lst

📁 基于单片机超声波的防盗窗设计
💻 LST
字号:
C51 COMPILER V9.00   01                                                                    01/08/2012 15:16:23 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 01
OBJECT MODULE PLACED IN 01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 01.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*2012.1.8 编写完毕 BY:CMY  平台:倒车报警手工版*/
   2          
   3          #include "reg51.h"
   4          #include <intrins.h>
   5          #define uchar   unsigned char
   6          #define uint    unsigned int
   7          #define ulong   unsigned long
   8          sbit transfer=P1^0;
   9          sbit receiver=P3^2;
  10          sbit speak       =P2^0;
  11          /*数码管位选控制*/
  12          sbit ledwei0=P2^4;
  13          sbit ledwei1=P2^5;
  14          sbit ledwei2=P2^6;
  15          sbit ledwei3=P2^7;
  16          sbit    m=P1^5;
  17          sbit    n=P1^6;
  18          uchar   TimerH,TimerL,temp,a,b;            
  19          ulong   realTimer;                      //存放真测量时间
  20          ulong   real_dis;                       //存放测量距离
  21          uint    dis_flag;                       //距离计算标志位
  22          
  23          uint    wei0,wei1,wei2,wei3;
  24          uchar   ledflag=0;                      //数码管标志位,用于刷新 
  25          uchar   send_flag=0; 
  26          uchar   count=0;                        //定时器T0计数
  27          uchar   ledcode[11]={        
  28                          0x18,/*0*/
  29                  0x7B,/*1*/
  30                  0x2C,/*2*/
  31                  0x29,/*3*/
  32                  0x4B,/*4*/
  33                  0x89,/*5*/
  34                  0x88,/*6*/
  35                  0x3B,/*7*/
  36                  0x08,/*8*/
  37                  0x09,/*9*/};
  38          
  39          /*延时函数*/
  40          void delay(uint count)  
  41          {       
  42   1              while(count--);
  43   1      }
  44          
  45          /*超声波发送函数--40KHZ*/
  46          void CLK40K()
  47          {       
  48   1              uchar i=4;         //发送的波形数量=(i/2)
  49   1              TR0=1;                          //START TIME0,同时发送40KHZ方波
  50   1              do
  51   1              {
  52   2              transfer=~transfer;
  53   2                      _nop_ (); 
  54   2                      _nop_ (); 
  55   2                      _nop_ ();
C51 COMPILER V9.00   01                                                                    01/08/2012 15:16:23 PAGE 2   

  56   2                      _nop_ (); 
  57   2                      _nop_ (); 
  58   2                      _nop_ (); 
  59   2                      _nop_ ();
  60   2                      _nop_ (); 
  61   2                      _nop_ ();
  62   2              }
  63   1         while(--i);
  64   1      }
  65          
  66          /*距离测量函数*/
  67          void distance(void)
  68          {
  69   1              realTimer=TimerH*256+TimerL;
  70   1              real_dis=realTimer*164/10000;              //单位cm
  71   1              wei0=real_dis%10;
  72   1              wei1=(real_dis/10)%10;
  73   1              wei2=(real_dis/100)%10;
  74   1              wei3=real_dis/1000;
  75   1      }
  76          
  77          /*显示刷新函数函数*/
  78          void display(void)
  79          {
  80   1              switch(ledflag)
  81   1            {
  82   2                 case 0:P0=ledcode[wei0];ledwei0=0;ledwei1=1;ledwei2=1;ledwei3=1;break;
  83   2                 case 1:P0=ledcode[wei1];ledwei0=1;ledwei1=0;ledwei2=1;ledwei3=1;break;
  84   2                 case 2:P0=ledcode[wei2];ledwei0=1;ledwei1=1;ledwei2=0;ledwei3=1;break;
  85   2                 case 3:P0=ledcode[wei3];ledwei0=1;ledwei1=1;ledwei2=1;ledwei3=0;break;               
  86   2                }
  87   1       
  88   1                      ledflag++;
  89   1                      if(ledflag==4)
  90   1                      ledflag=0;
  91   1      //              delay(0x80);//768us=0.768ms//520次
  92   1      }
  93          
  94          /*报警处理函数*/
  95          void alarm(void)
  96          {
  97   1              long int i;
  98   1              if(real_dis>=100)
  99   1               for(i=1;i<800;i++)
 100   1                      {        
 101   2                              if(i<400)
 102   2                              {m=1;n=0;}
 103   2                          if(i>400)
 104   2                              {m=0;n=1;}
 105   2                               P0=0xff;
 106   2                               speak^=1;
 107   2                               delay(500);
 108   2                      }
 109   1              else
 110   1              {
 111   2                      speak=1;
 112   2              }
 113   1      }
 114          /*系统初始化程序*/
 115          void init()//系统初始化
 116          {
 117   1              temp=0xff;
C51 COMPILER V9.00   01                                                                    01/08/2012 15:16:23 PAGE 3   

 118   1              P1=temp;
 119   1              TMOD=0X11;      //初始化定时器T0,T1用于产生40hz发射波
 120   1              TH0=0x00;
 121   1              TL0=0x00;
 122   1              TH1=0x00;
 123   1              TL1=0x00;
 124   1              TF1=0;
 125   1              PX0=1;
 126   1              ET1=1;
 127   1              EA=1;
 128   1              TR1=1;          //启动定时器1
 129   1              IT0=0;          //外部低电平触发方式
 130   1      }
 131          
 132          
 133          void int0(void) interrupt 0  //关闭计数器,存计数值,置标志
 134          {
 135   1       
 136   1        EA=0;                 //关闭中断
 137   1        EX0=0;                //关外部中断
 138   1        TimerL=TL0;           //读取数值
 139   1        TimerH=TH0;
 140   1        TR0=0;                //关闭定时器0
 141   1        TH0=0x00;
 142   1        TL0=0x00;
 143   1        dis_flag=1;           //距离计算标志
 144   1      } 
 145          
 146          void time1(void) interrupt 3
 147          {       
 148   1              TF1=0;
 149   1              TH0=0x00;
 150   1              TL0=0x00;
 151   1              TH1=0x00;
 152   1              TL1=0x00;       
 153   1              send_flag=1;                    //开启接收回波中断      
 154   1      } 
 155          
 156          /*系统主函数*/
 157          void main()
 158          {       
 159   1      //      unsigned int i,j;
 160   1              init();                         //系统初始化
 161   1              real_dis=90;                    //y预设初值,防止开机未发射超声波,电机锁死
 162   1              delay(0x40);
 163   1              while(1)
 164   1              {
 165   2                      if(send_flag==1)
 166   2                      {                   
 167   3                              send_flag=0;
 168   3                              CLK40K();
 169   3                              delay(0x40);            //延时,避开发射的直达声波信号,可以调节测量的最小距离
 170   3                      EX0=1;
 171   3                      }
 172   2                      if(dis_flag==1)
 173   2                      {
 174   3                               dis_flag=0;
 175   3                               distance();
 176   3                               EA=1;
 177   3                      }
 178   2          display();    //调用显示函数   
 179   2              if(real_dis>=100)
C51 COMPILER V9.00   01                                                                    01/08/2012 15:16:23 PAGE 4   

 180   2                      delay(300);
 181   2                      display();    //调用显示函数
 182   2          alarm();
 183   2              }
 184   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    590    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37       4
   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 + -