标题: 51单片机的一个超声波测距,我感觉没有问题但就是不显示数据 [打印本页]

作者: wcyk115    时间: 2021-3-24 21:05
标题: 51单片机的一个超声波测距,我感觉没有问题但就是不显示数据
#include <REGX52.H>
#include <intrins.h>
#include "LCD1602.h"


sbit Ttig = P1^3;                //触发信号控制端口
sbit Echo = P1^4;                //回响信号接收端口

unsigned long S = 0;
unsigned long time = 0;
unsigned int flag;
unsigned int timer;

void count()
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
        
        S=(time*1.7)/100;
        if(S>=300||flag==1)
                LCD_ShowString(1,1,"error");
        else
                LCD_ShowNum(2,1,S,3);
        

}


void main()
{
        TMOD=0x11;
        TH0=0;
        TL0=0;
        TH1=0XF8;
        TL1=0X30;
        ET0=1;
        ET1=1;
        TR1=1;
        EA=1;
        
        
        LCD_Init();
        while(1)
        {
                while(!Echo);
                TR0=1;
                while(!Ttig);
                TR0=0;
                count();
               
               
        }
               
        
}
void zd0() interrupt 1
{
        flag=1;
        
}
void zd1() interrupt 3
{
        TH1=0XF8;
        TL1=0X30;
        timer++;
        if(timer>=400)
        {
                timer=0;
                Ttig=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                Ttig=0;
        }
        
}


作者: man1234567    时间: 2021-3-25 14:37
就这点程序别说出不了数据,连编译都过不去的
作者: 学生1    时间: 2021-3-25 14:56
不是说你感觉没问题就没问题,没问题就应该能正常显示了
作者: wcyk115    时间: 2021-3-25 19:04
man1234567 发表于 2021-3-25 14:37
就这点程序别说出不了数据,连编译都过不去的

LCD的部分没放上去,我试过LCD没问题,但就是没数据
作者: liugao888    时间: 2021-3-25 20:46
LCD_Init();
        while(1)
        {
                while(!Echo);      
                TR0=1;
                while(Echo);//这个地方改成这样
               
                TR0=0;
                count();
               
               
        }
作者: lwh999995    时间: 2021-3-26 12:33
                while(!Echo);//等待回响
                TR0=1;        //如果是高电平,那么关闭定时器
                while(!Ttig); //你这里应该判断Echo是否被拉低
                TR0=0;       //如果Echo信号被拉低,那么关闭定时器,就可以计算结果了
                count();      //计算距离

   可以先用LCD函数写一个固定的字符,看看显示正不正常。

04.jpeg (46.57 KB, 下载次数: 38)

时序图

时序图

作者: wcyk115    时间: 2021-4-5 12:25
liugao888 发表于 2021-3-25 20:46
LCD_Init();
        while(1)
        {

好的,我试一下

作者: wcyk115    时间: 2021-4-5 12:25
lwh999995 发表于 2021-3-26 12:33
while(!Echo);//等待回响
                TR0=1;        //如果是高电平,那么关闭定时 ...

感谢指点




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1