标题: STC单片机烧录后显示P1.0和P1.1与此次下载无关 [打印本页]

作者: 旋风麦麦麦    时间: 2023-9-19 18:17
标题: STC单片机烧录后显示P1.0和P1.1与此次下载无关
如图,可是我的超声波接线的trig和echo就接在这俩上,导致1602不显示测距的距离了,我想知道是程序的问题还是硬件接口的问题,谢谢各位的指导了

IMG_20230919_181114.jpg (1.56 MB, 下载次数: 73)

IMG_20230919_181114.jpg

作者: npn    时间: 2023-9-19 19:43
用示波器或逻辑分析仪捕捉trig和echo的信号是否正确?
作者: 旋风麦麦麦    时间: 2023-9-19 19:57
npn 发表于 2023-9-19 19:43
用示波器或逻辑分析仪捕捉trig和echo的信号是否正确?

不好意思我刚学这俩都没有//
作者: aking991    时间: 2023-9-20 08:32
这系列的单片机这两个口要用作IO口时请加上拉电阻就行了
作者: 123156fsadf    时间: 2023-9-20 08:39
和这个没关系,是你程序有问题。
作者: yzwzfyz    时间: 2023-9-20 08:51
都有问题,不信,上图、上程序。
作者: 旋风麦麦麦    时间: 2023-9-20 17:08
yzwzfyz 发表于 2023-9-20 08:51
都有问题,不信,上图、上程序。

不好意思因为我不太写的出来所以是粘粘别人的然后注释有乱码
作者: 旋风麦麦麦    时间: 2023-9-20 19:21
yzwzfyz 发表于 2023-9-20 08:51
都有问题,不信,上图、上程序。

不好意思粘粘别人的我用的是--/我不太写得出来

HCSR04.c
#include <REGX52.H>
#include "Timer0.h"

//定义引脚接口
sbit Trig = P1^0;
sbit Echo = P1^1;

/**
  * @brief  HC-SR04初始化
  * @param  无
  * @retval 无
  */
void HCSR04_Init()
{
        Timer0_Init();
        Trig = 0;
        Echo = 0;
}

/**
  * @brief  HC-SR04接收一个12us的触发信号
  * @param  无
  * @retval 无
  */
void HCSR04_Trig()
{
        unsigned char i;
        Trig = 1;
        i = 5;while (--i);                //延时12us
        Trig = 0;
}

/**
  * @brief  HC-SR04接收触发信号并计算回波信号高电平时间
  * @param  无
  * @retval 无
  */
void HCSR04_Set()
{
        HCSR04_Trig();
        while(!Echo);
        TR0 = 1;
        while(Echo);
        TR0 = 0;
}

/**
  * @brief  HC-SR04计算模块与障碍间的距离
  * @param  Duration(持续时间)        发送到接收的间隔时间
  * @param  Distance  模块与障碍间的距离
  * @retval Distance
  */
float HCSR04_Calc()
{
        unsigned int Duration = 0;
        float Distance = 0;
       
        Duration = TH0*256+TL0;
        Distance = Duration*0.017;//时间*音速/2,音速=340m/s=0.034cm/us
        TH0 = 0;
        TL0 = 0;
       
        return Distance;
}

Timer0.c
#include <REGX52.H>

/**
  * @brief  定时器0初始化@11.0592MHz
  * @param  无
  * @retval 无
  */
void Timer0_Init()      //@11.0592MHz
{
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TH0 = 0;                        //设置定时初值
        TL0 = 0;                        //设置定时初值
        TF0 = 0;                        //清除TF0标志
        TR0 = 0;                        //定时器0不计时
}

main.c
#include <REGX52.H>
#include "Delay.h"
#include "HCSR04.h"
#include "LCD1602.h"

unsigned int Distance;

void main()
{
        LCD_Init();                                                //LCD1602初始化
        HCSR04_Init();                                        //HC-SR04初始化
        LCD_ShowString(1,1,"Distance:");
        LCD_ShowString(2,4,"cm");
        while(1)
        {
                HCSR04_Set();                                //HC-SR04接收触发信号并计算回波信号高电平时间
                Distance = HCSR04_Calc();        //计算距离
                LCD_ShowNum(2,1,Distance,3);//调用显示
                Delay(20);
        }
}




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