[51单片机] HC-SR04超声波测距仪 基础代码

 

>_<:超声波测距仪模块:

>_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子:

>_<:代码:

  1 /***********************************************************************************************************/
  2 //HC-SR04 超声波测距模块 DEMO 程序
  3 //晶振:11。0592
  4 //接线:模块TRIG接 P1.2  ECH0 接P1.1
  5 //串口波特率9600
  6 /***********************************************************************************************************/      
  7 #include   <AT89X51.H>
  8 #include   <intrins.h>
  9 #include   <STDIO.H>
 10 
 11 #define uchar unsigned  char
 12 #define uint  unsigned   int  
 13 #define  RX  P1_1
 14 #define  TX  P1_2
 15 
 16 
 17 unsigned int  time=0;
 18 unsigned int  timer=0;
 19 float         S=0;
 20 bit           flag =0;
 21 
 22 
 23 /********************************************************/
 24 void Conut(void)
 25 {
 26     time=TH0*256+TL0;
 27     TH0=0;
 28     TL0=0;
 29     S=(time*1.87)/100;     //算出来是CM
 30     if(flag==1)               //超出测量
 31     {
 32         flag=0;
 33         printf("-----\n"); 
 34     }    
 35     printf("S=%f\n",S); 
 36 }
 37 /********************************************************/ 
 38 void delayms(unsigned int ms)
 39 {
 40     unsigned char i=100,j;
 41     for(;ms;ms--)
 42     {
 43         while(--i)
 44         {
 45             j=10;
 46             while(--j);
 47         }
 48     }
 49 }
 50 /********************************************************/
 51 void zd0() interrupt 1          //T0中断用来计数器溢出,超过测距范围
 52 {
 53     flag=1;                     //中断溢出标志
 54 }
 55 /********************************************************/
 56 void  StartModule()          //T1中断用来扫描数码管和计800MS启动模块
 57 {
 58     TX=1;                     //800MS  启动一次模块
 59     _nop_(); 
 60     _nop_(); 
 61     _nop_(); 
 62     _nop_(); 
 63     _nop_(); 
 64     _nop_(); 
 65     _nop_(); 
 66     _nop_(); 
 67     _nop_(); 
 68     _nop_(); 
 69     _nop_(); 
 70     _nop_(); 
 71     _nop_(); 
 72     _nop_(); 
 73     _nop_(); 
 74     _nop_(); 
 75     _nop_();
 76     _nop_(); 
 77     _nop_(); 
 78     _nop_(); 
 79     _nop_();
 80     TX=0;
 81 }
 82 /********************************************************/
 83 void main(void)
 84 {  
 85     TMOD=0x21;                   //设T0为方式1,GATE=1;
 86     SCON=0x50;
 87     TH1=0xFD;
 88     TL1=0xFD;
 89     TH0=0;
 90     TL0=0; 
 91     TR0=1;  
 92     ET0=1;                     //允许T0中断
 93     TR1=1;                       //开启定时器
 94     TI=1;
 95     
 96     EA=1;                       //开启总中断
 97     
 98     
 99     while(1)
100     {
101         StartModule();
102         while(!RX);            //当RX为零时等待
103         TR0=1;                //开启计数
104         while(RX);            //当RX为1计数并等待
105         TR0=0;                //关闭计数
106         Conut();            //计算
107         delayms(10);        //100MS
108     }
109 }              

 

posted @ 2014-08-04 09:20  beautifulzzzz  阅读(9861)  评论(2编辑  收藏  举报