微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微波和射频技术 > 射频综合技术问答 > 超声波+1602 c程序

超声波+1602 c程序

时间:10-02 整理:3721RD 点击:
                                  
/*============================================================
//HC-SRO4 超声波测距模块 程序
使用12M或11.0592M晶振,实测使用11.0592M TX信号触发 RX信号回响
=============================================================*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit  RX = P2^0;
sbit  TX = P2^1;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;
                          
uint  i, timerH,timerL,time=0;
unsigned long S=0;
uint disbuff[]={0,0,0};
//************************************************
//延时函数,在12MHz的晶振频率下
//大约50us的延时
//************************************************
void delay_50us(uint t)
{
        uchar j;
        for(;t>0;t--)
        for(j=19;j>0;j--);
}
//************************************************
//延时函数,在12MHz的晶振频率下
//大约50ms的延时
//************************************************
void delay_50ms(uint t)
{
        uint j;
        for(;t>0;t--)
        for(j=6245;j>0;j--);
}
void write_com(uchar com)
{
        e=0;
        rs=0;
        rw=0;
        P0=com;
        delay_50us(10);
        e=1;
        delay_50us(20);
        e=0;
}
void write_data(uchar dat)
{
        e=0;
        rs=1;
        rw=0;
        P0=dat;
        delay_50us(10);
        e=1;
        delay_50us(20);
        e=0;       
}
void init(void)
{
        delay_50us(300);
        write_com(0x38);
        delay_50us(100);
        write_com(0x38);
        delay_50us(100);
        write_com(0x38);
        write_com(0x38);
        write_com(0x08);
        write_com(0x01);
        write_com(0x06);
        write_com(0x0c);
}
/********************************************************/
    void Conut(void)
        {
         time=timerH*256+timerL;       
         S=time*0.0172;     //算出来是CM
             if(S<=999)         
                 {
                  disbuff[0]=S/100;
                  disbuff[1]=S%100/10;
                  disbuff[2]=S%100%10;
                  }
                  write_com(0xc0);       
                  for(i=0;i<3;i++)
                   {
                         write_data(disbuff[i]);
                         delay_50us(20);
                     }                             
        }
     void  StartModule()                          //启动模块
  {
          TX=1;                                            
          delay_50us(1);
          TX=0;
  }                                 
                                 
/*********************************************************/
void main(void)
{       
         init();            //LCM初始化                       
         TMOD=0x01;                   //设T0为方式1
         TH0=0;
         TL0=0;         
         ET0=1;             //允许T0中断
         EA=1;                           //开启总中断        */                       
         while(1)
          {
             StartModule();
             while(!RX);                //当RX为零时等待
             TR0=1;                            //开启计数
             while(RX);                        //当RX为1计数并等待
             TR0=0;                                //关闭计数
         Conut();                        //计算
          }
}
void t0() interrupt 1
{
TH0=0;
TL0=0;
timerH=TH0;
timerL=TL0;
}
自己写的程序,请大家帮帮忙,为什么1602显示是3个乱码,(1602没坏)  谢谢
               

哈哈,不错

谢谢额。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top