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

📄 改进程序.lst

📁 基于单片机的超声波测距程序,用C编写.液晶显示
💻 LST
字号:
C51 COMPILER V8.01   改絖程序                                                              11/22/2006 20:12:51 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE 改絖程序
OBJECT MODULE PLACED IN 改进程序.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 改进程序.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          #define ulong unsigned long
   6          
   7          uint c=340;
   8          ulong l,time;
   9          char i=1,j=1,k=80,aa;
  10          char t,tp=10,ts,tg,lb,ls,lg,lsf,fh,cb,cs,cg;
  11          sbit RW=P2^1;
  12          sbit RS=P2^0;
  13          sbit E=P2^2;
  14          sbit rece=P3^3;
  15          sbit k2=P1^1;
  16          sbit k1=P1^0;
  17          sbit k3=P1^2;
  18          sbit k4=P1^3;
  19          
  20          sbit sg=P3^7;
  21          sbit ctl=P3^5;
  22          void delay(uint i) //延时程序//
  23          {while(i--);
  24   1       }
  25          
  26          //************液晶显示***************//
  27          
  28          void writercom(uchar q) //写命令//
  29          {E=1;
  30   1       RS=0;
  31   1       RW=0;
  32   1       P0=q;
  33   1       E=0;
  34   1       delay(20);
  35   1       }
  36          
  37          void writerdata(uchar o)//写数据//
  38          {
  39   1       E=1;
  40   1       RS=1;
  41   1       RW=0;
  42   1       P0=o;
  43   1       E=0;
  44   1       delay(20);
  45   1       }
  46          
  47          void writer_d(uchar *u)//写数据串//
  48          {while(*u)
  49   1        writerdata(*u++);
  50   1       }
  51          
  52          void xsinit(void)
  53          {writercom(0x01);
  54   1       writercom(0x38);//使用8位数据,显示两行,使用5*7的字型//
  55   1       writercom(0x0c);//显示设置,不显示光标,字符不显闪琐//
C51 COMPILER V8.01   改絖程序                                                              11/22/2006 20:12:51 PAGE 2   

  56   1       writercom(0x06);//光标从左往右移,内容不移//
  57   1       }
  58          
  59          /**************温度输入程序***********************/
  60          
  61          void inptt()
  62          {while(1)
  63   1       {if(k2==0){tp++;if(tp>=99)tp=99;}
  64   2        delay(7000);
  65   2        if(k1==0){tp--;if(tp<=(-30))tp=(-30);}
  66   2        delay(7000);
  67   2        t=tp;
  68   2        if(t<0){fh=0x2d;t=~t+1;}
  69   2        else{fh=0x20;}
  70   2        ts=t/10;
  71   2        tg=t%10;
  72   2        writercom(0x80);
  73   2        writer_d("    T:");
  74   2        writerdata(fh);
  75   2        writerdata(ts+0x30);
  76   2        writerdata(tg+0x30);
  77   2        writerdata(0xdf);
  78   2        writer_d("C  ");
  79   2        writercom(0xba);
  80   2        writer_d("Press K4 finish ");
  81   2        if(k4==0)break;
  82   2        }
  83   1      }
  84          
  85          //**********超声波发射程序**************************//
  86          
  87          void sen()         //超声波发射程序//
  88          {uchar times=0; 
  89   1       TMOD=0x12;    //定时器1工作在定时方式1,定时器0工作在定时方式2//
  90   1       IE=0x84;          //中断设置//
  91   1       TH0=244;
  92   1       TL0=244;
  93   1       TR0=1;
  94   1       TR1=1;        //开定时器//
  95   1       while(1)
  96   1       {while(TF0==0);
  97   2        sg=~sg;
  98   2        times++;     //翻转20次,发送10个脉冲信号的超声波//
  99   2        TF0=0;   
 100   2        if(times==20)break;}
 101   1        TR0=0;
 102   1        times=0;
 103   1      }
 104          
 105          //**********外中断服务程序******************************//
 106          
 107          rec()interrupt 2 using 2//接收中断程序//
 108          {TR1=0;            //关计数器//
 109   1       ctl=0;
 110   1       time=TH1*256+TL1; //算出t的值,t的单位为us//
 111   1       l=time*c/2;
 112   1       TH1=0;
 113   1       TL1=0;
 114   1       }
 115          
 116          //************数据处理,显示结果***************//
 117          
C51 COMPILER V8.01   改絖程序                                                              11/22/2006 20:12:51 PAGE 3   

 118          void dataxs()
 119          {if(tp>=10)c=338+(tp-10)*0.6;
 120   1       else c=338+(10-tp)*0.6;
 121   1       cb=c/100;
 122   1       cs=c%100/10;
 123   1       cg=c%100%10;
 124   1       lb=l/1000000;
 125   1       ls=l%1000000/100000;
 126   1       lg=l%1000000%100000/10000;
 127   1      
 128   1      /******显示********/
 129   1        writercom(0x80);
 130   1       if(l<=130000)writer_d("too near!       ");
 131   1       else if(l>=5000000)writer_d("too long!       ");
 132   1       else {writer_d("L=");
 133   2             writerdata(lb+0x30);
 134   2             writerdata('.');
 135   2             writerdata(ls+0x30);
 136   2             writerdata(lg+0x30);
 137   2             writer_d("m ");       
 138   2             writer_d("c=");
 139   2             writerdata(cb+0x30);
 140   2             writerdata(cs+0x30);
 141   2             writerdata(cg+0x30);
 142   2             writer_d("m/s ");
 143   2             }
 144   1      }
 145          
 146          //****状态1,手动控制******************//
 147          
 148          void unauto()
 149          {while(i)
 150   1       {while(k--)
 151   2        {writercom(0xba);
 152   3         writer_d("Press K4 measure");
 153   3         if(k4==0||k3==0){i=0;break;}
 154   3         delay(2000);}
 155   2         k=20;
 156   2        while(k--)
 157   2        {writercom(0xba);
 158   3         writer_d("                ");
 159   3         if(k4==0||k3==0){i=0;break;}
 160   3         delay(2000);}
 161   2         k=20;
 162   2        }
 163   1        i=1;
 164   1        ctl=0;
 165   1        sen();//调超声波发射程序;
 166   1        delay(50);
 167   1        ctl=1;
 168   1        }
 169          
 170          //****状态2,实时监控******************//
 171          
 172          void aut()
 173          {writercom(0xba);
 174   1       writer_d("real time measur");
 175   1       ctl=0;
 176   1       sen();
 177   1       delay(50);
 178   1       ctl=1;
 179   1       }
C51 COMPILER V8.01   改絖程序                                                              11/22/2006 20:12:51 PAGE 4   

 180          
 181          //*****状态选择************************//
 182          ztxz()
 183          {while(k3==0&&aa==0)
 184   1       {while(1)
 185   2        {if(k3==1)break;}
 186   2        aa=1;
 187   2        }
 188   1       while(k3==0&&aa==1)
 189   1       {while(1)
 190   2        {if(k3==1)break;}
 191   2        aa=0;
 192   2        }
 193   1       }
 194          //********主程序*******************//
 195          
 196          main()
 197          {xsinit();
 198   1       inptt();//温度输入//
 199   1       while(1)
 200   1       {while(!aa)
 201   2        {unauto();
 202   3         break;
 203   3        }
 204   2        while(aa) 
 205   2        {aut();
 206   3         break;
 207   3        }
 208   2       
 209   2        while(k--)//等待回波//
 210   2        {ztxz();//状态切换键判断
 211   3         delay(2000);
 212   3         }
 213   2         k=20;
 214   2        dataxs();
 215   2        }
 216   1      }
 217          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    991    ----
   CONSTANT SIZE    =    127    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26       3
   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 + -