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

📄 checkdistance.lst

📁 本压缩文件主要介绍一获奖的电子设计作品
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   CHECKDISTANCE                                                         11/20/2008 13:40:14 PAGE 1   


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

line level    source

   1          /*  
   2          **  设计者:蒙林通 ***
   3          **  华信通电子公司  **
   4          **  广东工业大学 *****
   5          ** 设计时间:2008/08/15 *
   6          **   ***历时:2天半 ****
   7          */
   8          #include "reg52.h"
   9          #include "intrins.h"
  10          #include "main.h"
  11          #define uchar unsigned char
  12          #define uint unsigned int
  13          #define sd=0.334
  14          unsigned int distance,tem;
  15          uchar data tdisdata[4];
  16          uchar data disdata[5];
  17          uint tvalue,tempkey;//温度值
  18          uchar tflag;//温度正负标志
  19          sbit en=P2^5;
  20          sbit rs=P2^7;
  21          sbit rw=P2^6;
  22          sbit D0=P1^0;
  23          sbit D1=P1^1;
  24          sbit D2=P1^2;
  25          sbit D3=P1^3;
  26          sbit D4=P1^4;
  27          sbit deep=P3^6;
  28          sbit DQ=P3^5;
  29          sbit LED1=P1^5;
  30          sbit LED2=P1^6;
  31          sbit  move=P1^7;
  32          sbit mode_button=P3^4;
  33          sbit operation_button=P3^5;
  34          uchar code table[]=">>温度: 0000 C";
  35          uchar code table2[]="=>距离:00000mm";
  36          uchar code warn1[7][14]={"->请注意左方!!","->请注意右方!!","->请注意后方!!","->左后轮泥坑!!","->右后轮泥坑
             -!!","->左后轮石头!!","->右后轮石头!!"};
  37          uchar code warn2[]="->车距匀安全!!";
  38          uchar code welcome[]="    提示系统  ";
  39          uchar code direction[5][4]={"左距","右距","后距","左轮","右轮"} ;
  40          uint time,t,kk;
  41          uchar bai,shi,ge,flag,i,j,temp;
  42          unsigned long int shu=0,v; 
  43           unsigned int back=0;                                                   
  44          /******************************
  45          *延时子程序
  46          ******************************/
  47          void delay(uint z)
  48          {
  49   1              uint x,y;
  50   1              for(y=110;y>0;y--)
  51   1              for(x=z;x>0;x--);
  52   1      }
  53          
  54          /****************************
C51 COMPILER V8.08   CHECKDISTANCE                                                         11/20/2008 13:40:14 PAGE 2   

  55          *写指令
  56          ****************************/
  57          void write_com(uchar com)
  58          {
  59   1              rs=0;
  60   1              rw=0;
  61   1              P0=com;
  62   1              delay(5);
  63   1              en=1;
  64   1              delay(5);
  65   1              en=0;
  66   1      
  67   1      }
  68          /************************
  69          *写数据
  70          ************************/
  71          void write_date(uchar date)
  72          {
  73   1              rs=1;
  74   1              rw=0;
  75   1              P0=date;
  76   1              delay(5);
  77   1              en=1;
  78   1              delay(5);
  79   1              en=0;
  80   1      }
  81          
  82          //******************************18B20温度传感程序***************************//
  83          
  84          void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  85          {unsigned int i,j;
  86   1         for(i=0;i<ms;i++)
  87   1          for(j=0;j<100;j++);
  88   1      }
  89          
  90          
  91          /******************************ds1820程序***************************************/
  92          void delay_18B20(unsigned int i)//延时1微秒
  93          {
  94   1         while(i--);
  95   1      }
  96          void ds1820rst()/*ds1820复位*/
  97          { unsigned char x=0;
  98   1      DQ = 1;          //DQ复位
  99   1      delay_18B20(4); //延时
 100   1      DQ = 0;          //DQ拉低
 101   1      delay_18B20(100); //精确延时大于480us
 102   1      DQ = 1;          //拉高
 103   1      delay_18B20(40); 
 104   1         } 
 105          
 106             uchar ds1820rd()/*读数据*/
 107          { unsigned char i=0;
 108   1      unsigned char dat = 0;
 109   1      for (i=8;i>0;i--)
 110   1      {   DQ = 0; //给脉冲信号
 111   2          dat>>=1;
 112   2          DQ = 1; //给脉冲信号
 113   2          if(DQ)
 114   2          dat|=0x80;
 115   2          delay_18B20(10);
 116   2      }
C51 COMPILER V8.08   CHECKDISTANCE                                                         11/20/2008 13:40:14 PAGE 3   

 117   1         return(dat);
 118   1      }
 119          void ds1820wr(uchar wdata)/*写数据*/
 120          {unsigned char i=0;
 121   1          for (i=8; i>0; i--)
 122   1         { DQ = 0;
 123   2           DQ = wdata&0x01;
 124   2           delay_18B20(10);
 125   2           DQ = 1;
 126   2           wdata>>=1;
 127   2         }
 128   1      }
 129          //******************读温度*********************/
 130          
 131           read_temp()/*读取温度值并转换*/
 132           {
 133   1       uchar a,b;
 134   1      ds1820rst();    
 135   1      ds1820wr(0xcc);//*跳过读序列号*/
 136   1      ds1820wr(0x44);//*启动温度转换*/
 137   1      ds1820rst();    
 138   1      ds1820wr(0xcc);//*跳过读序列号*/ 
 139   1      ds1820wr(0xbe);//*读取温度*/ 
 140   1      a=ds1820rd();
 141   1      b=ds1820rd();
 142   1      tvalue=b;
 143   1      tvalue<<=8;
 144   1      tvalue=tvalue|a;
 145   1          if(tvalue<0x0fff)
 146   1         tflag=0;
 147   1          else
 148   1         {tvalue=~tvalue+1;
 149   2      tflag=1;
 150   2         }
 151   1      tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 152   1      return(tvalue);
 153   1      }
 154          /*********************温度显示函数**********************/
 155          
 156           void ds1820disp()//温度值显示
 157          
 158          { uchar flagdat;
 159   1           disdata[0]=tvalue/1000+0x30;//百位数
 160   1           disdata[1]=tvalue%1000/100+0x30;//十位数
 161   1           disdata[2]=tvalue%100/10+0x30;//个位数
 162   1           disdata[3]=tvalue%10+0x30;//小数位
 163   1          
 164   1           if(tflag==0)
 165   1           flagdat=0x20;//正温度不显示符号
 166   1           else
 167   1             flagdat=0x2d;//负温度显示负号:-
 168   1           if(disdata[0]==0x30)
 169   1          {disdata[0]=0x20;//如果百位为0,不显示
 170   2         if(disdata[1]==0x30)
 171   2          {disdata[1]=0x20;//如果百位为0,十位为0也不显示
 172   3          }
 173   2         }
 174   1      
 175   1          write_com(0x90+4);
 176   1          //write_date(flagdat);//显示符号位
 177   1          write_date(disdata[0]);//显示百位
 178   1          write_date(disdata[1]);//显示十位 
C51 COMPILER V8.08   CHECKDISTANCE                                                         11/20/2008 13:40:14 PAGE 4   

 179   1          write_date(disdata[2]);//显示个位 
 180   1          write_date(0x2e);//显示小数点 
 181   1          write_date(disdata[3]);//显示小数位
 182   1         }
 183          
 184            /////////////////**********************超声波程序**********/////////////
 185          /************************
 186                *距离数值动态显示
 187          *************************/
 188          void dis_distance(uint add,uint date)
 189          {
 190   1              uchar mi,fen,li,bai,shi,ge;
 191   1              mi=date/100000;
 192   1              fen=date%100000/10000;
 193   1              li=date%10000/1000;
 194   1              bai=date%1000/100;
 195   1              shi=date%100/10;
 196   1              ge=date%10;
 197   1              write_com(0x88+add);
 198   1              write_date(0x30+mi);
 199   1              write_date(0x30+fen);
 200   1              write_date(0x30+li);
 201   1              write_date(0x30+bai);
 202   1              write_date(0x30+shi);
 203   1              write_date(0x30+ge);
 204   1              date=0; 
 205   1      }
 206          
 207          //**************提示注意函娄**************//
 208          dis_warn(char num[])
 209          {  int k;
 210   1        write_com(0x98);
 211   1         for(k=0;k<14;k++)
 212   1          { 
 213   2                write_date(num[k]);
 214   2                }
 215   1        }
 216          ///////////////////////////////////////////
 217           dis_direction(char num[])
 218          {  int k;
 219   1        write_com(0x88+1);
 220   1         for(k=0;k<4;k++)
 221   1          { 
 222   2                write_date(num[k]);
 223   2                }
 224   1        }
 225          /***************************
 226          *初始化程
 227          ***************************/
 228          void init(void)
 229          {
 230   1      
 231   1              write_com(0x01);                //清除显示
 232   1              write_com(0x02);            //地址归零
 233   1              write_com(0x06);                //进入设定点
 234   1              write_com(0x0c);                //显示开关设置
 235   1              write_com(0x30);                //功能设定
 236   1              write_com(0x80);                //在第一行开始输入
 237   1              for(i=0;i<14;i++)               //显示初始化
 238   1              {
 239   2                      write_date(welcome[i]);
 240   2              
C51 COMPILER V8.08   CHECKDISTANCE                                                         11/20/2008 13:40:14 PAGE 5   

 241   2              }
 242   1      
 243   1              write_com(0x90);                //在第一行开始输入
 244   1              for(i=0;i<14;i++)               //显示初始化
 245   1              {
 246   2                      write_date(table[i]);
 247   2              
 248   2              }
 249   1          write_com(0x88);            //在第一行开始输入
 250   1              for(i=0;i<14;i++)               //显示初始化
 251   1              {
 252   2                      write_date(table2[i]);
 253   2              
 254   2              }
 255   1              TMOD=0X01;                               //设定定时器为工作方式1
 256   1              TH0=0X00;
 257   1              TL0=0X00;                                //装初始值
 258   1              EA=1;                                    //开总中断
 259   1              IT1=1;                                   //设定外部中断为下降沿触发方式
 260   1      }
 261          /********************************
 262          *延时方法发送方波
 263          ********************************/

⌨️ 快捷键说明

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