[求助] 超声波+1602显示

cepoly   2012-2-29 00:27 楼主
 
/*============================================================
//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);
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没坏)  谢谢
                

回复评论 (2)

TH0=0;
TL0=0;
timerH=TH0;
timerL=TL0;
time永远是0啦
点赞  2012-2-29 01:02

回复 沙发 huo_hu 的帖子

进入中断,TH0和TL0自动加1,然后赋值给time  就算time值为0,1602也不会出现乱码吧
点赞  2012-2-29 13:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复