找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

超声波测距程序就是不能显示测出的距离,单片机程序没错误,求大佬们教我如何解决

查看数: 2546 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-4-6 17:22

正文摘要:

程序没有错误 /* 计算公式 我们知道声速是340m/s 根据x=vt 因为超声波发送出去和回来是测量距离的两倍,所以假设距离是L 2L=344xt t我们用定时器测出来 一般都是us 所以就是tx172x10的-6次方=L,L单位为cm ...

回复

ID:1005855 发表于 2022-4-8 10:48
#include "lcd.h"

//---------------------------------------------------------------------
//函数:判忙函数
//功能:判断液晶是否忙碌
void busy()
{
        uchar sta;
        P0= 0xFF;                //P0初始化
        RS = 0;                        //选择指令寄存器
        RW = 1;                        //读模式
        do
        {
                EN = 1;
                _nop_();
                sta = P0;         //读取状态字
                EN = 0;                //当E端由高电平跳变成低电平时,液晶模块执行命令
               
        }
        while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止
}

//---------------------------------------------------------------------
//函数:写命令函数
//功能:向液晶写入一字节命令(8位命令), cmd-待写入命令值
void LCD_Write_Com(unsigned char cmd)
{
        busy(); //判断液晶是否忙碌
        RS = 0; //选择指令寄存器
        RW = 0; //写模式
        P0 = cmd;//把数据给P0,即写入指令和地址
        EN = 1;
    _nop_();//短暂延时1us
        _nop_();//短暂延时1us       
        EN = 0;        //当E端由高电平跳变成低电平时,液晶模块执行命令
       
}

//---------------------------------------------------------------------
//函数:写数据函数
//功能:向液晶写入一字节数据(8位数据), dat-待写入数据值
void LCD_Write_Data(unsigned char dat)
{
        busy(); //判断液晶是否忙碌
        RS = 1; //选择数据寄存器
        RW = 0; //写模式
        P0= dat;//把数据给P0
        EN = 1;
        _nop_();//短暂延时1us
        _nop_();//短暂延时1us               
        EN = 0;        //当E端由高电平跳变成低电平时,液晶模块执行命令
       
}


//---------------------------------------------------------------------
//函数:初始化液晶函数
//功能:初始化液晶,并显示启动界面
void LCD_Init()
{
        LCD_Write_Com(0x38); //16*2 显示, 5*7 点阵, 8 位数据传送
        LCD_Write_Com(0x0C); //显示器开,光标关闭
        LCD_Write_Com(0x06); //文字不动,地址自动+1
        LCD_Write_Com(0x01); //清屏
       
}


//---------------------------------------------------------------------
/*函数:写入字符函数*/
//功能:设置显示 DDRAM 起始地址,亦即光标位置, (x,y)-对应屏幕上的字符坐标
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{     
    if (y == 0) //由输入的屏幕坐标计算显示 DDRAM 的地址
        {     
        LCD_Write_Com(0x80 + x); //第一行字符地址从 0x80 起始   
        }   
    else
        {     
        LCD_Write_Com(0xC0 + x); //第二行字符地址从 0xc0起始   
        }        
    LCD_Write_Data( Data);           //写数据-设置 DDRAM 地址
}

/*函数:写入字符串函数*/
//可参考网上的
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{            
    while (*s) //先取 s 指向的数据,然后s自加 1,指向下一个待写字符
    {     
        LCD_Write_Char(x,y,*s);     
        s++;  
        x++;   
    }
}
ID:1005855 发表于 2022-4-8 10:17
lkc8210 发表于 2022-4-7 21:14
我又沒有lcd.h和delay.h

#ifndef __LCD_H_
#define __LCD_H_

/**********************************
包含头文件
**********************************/
#include <reg52.h>
#include "intrins.h"

//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

/**********************************
            PIN口定义
**********************************/
sbit EN = P2^7;
sbit RW = P2^5;
sbit RS = P2^6;

/**********************************
            函数声明
**********************************/
void busy();//忙检测函数

/*LCD1602写入8位命令子函数*/
void LCD_Write_Com(unsigned char cmd);

/*LCD1602写入8位数据子函数*/       
void LCD_Write_Data(unsigned char dat);

/*LCD1602初始化子程序*/               
void LCD_Init(void);

void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
                                                  

#endif



#ifndef __DELAY_H__
#define __DELAY_H__

void DelayUs2x(unsigned char t);

void DelayMs(unsigned char t);

#endif




ID:161164 发表于 2022-4-7 21:14
lj2443454061 发表于 2022-4-7 19:53
还是不能显示数据,还要其他的方法吗

我又沒有lcd.h和delay.h
ID:1005855 发表于 2022-4-7 19:53
lkc8210 发表于 2022-4-6 23:09
试试在while(1)之前加个DelayMs(1000);

还是不能显示数据,还要其他的方法吗
ID:161164 发表于 2022-4-6 23:09
试试在while(1)之前加个DelayMs(1000);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表