基于51单片机超声波测距带语音播报JQ6500

发布者:RadiantBreeze最新更新时间:2020-12-18 来源: 51hei关键字:51单片机  超声波测距  语音播报  JQ6500 手机看文章 扫描二维码
随时随地手机看文章

功能说明:

1.本设计采用STC89C52单片机作为主控制器

2.LCD1602液晶显示测量的距离和温度;

3.带有温度补偿功能(DS18B20传感器);

4.测量范围0.02m~4m,精度为0.01m;

5.带实时语音播报功能;

6.按键功能:按键2:加报警值按键3:减报警值按键1:设置按键(只有在按下设置的时候才可以加减报警值),在未按下按键1时,按下按键3播报测量距离。

实物制作图:

a7ae39578d2e506adcb00194439b33a.jpg

原理图:

663[~KYON8K0Q3F%~0PRAK1.png


4556666.png

单片机源程序如下:

//宏定义

#define uchar unsigned char

#define uint unsigned int

#define ULint unsigned long int

//温度零上与零下的标志位

char flag=0;

//超声波

char flags=0;

//超声波距离

char flag1s=0;

//计算定时间

uint time=0;

//计算距离

ULint L_=0;

//温度

uint t_=0;

//显示模式  0正常  1最大值调整  2最小值调整

uchar mode=0;


uint Max=490;

uint Min=10;

//按键标志

uchar k=0;

//数值有误

uchar FW=0;

//头函数

#include

#include

#include "BJ_Key.h"                    //报警按键

#include "display.h"                         //显示头函数

#include "ultrasonic_wave.h"//超声波头函数

#include "DS18B20.h"                    //温度传感器头函数


uchar ONE1[6]={0x7E,0x04,0x03,0x00,0X0D,0xEF};//现在距离为

uchar ONE2[6]={0x7E,0x04,0x03,0x00,0X0C,0xEF};//米

uchar ONE3[6]={0x7E,0x04,0x03,0x00,0X0B,0xEF};//点

uchar ONE4[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//百位

uchar ONE5[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//十位

uchar ONE6[6]={0x7E,0x04,0x03,0x00,0X00,0xEF};//个位


void delayms(uint ms)

{

        uchar i=100,j;

        for(;ms;ms--)

        {

                while(--i)

                {

                        j=10;

                        while(--j);

                }

        }

}


/******** UART初始化 波特率:9600 ******/

void UART_init(void)

{

    SCON = 0x50;        // 10位uart,允许串行接受

    TMOD = 0x20;       // 定时器1工作在方式2(自动重装)

    TH1 = 0xFD;

    TL1 = 0xFD;         //设置波特率为9600

    TR1 = 1;

}


/*

* UART 发送一字节

入口参数uint8的数据类型 即要发送的数据

*/

void UART_send_byte(uchar dat)

{

        SBUF = dat;

        while (TI == 0);

        TI = 0;

}


/*

* UART 发送字符串

  第一个参数要发送字符串或数据的首地址

  第二个参数是要发送的数据或字符串的长度

*/

void UART_send_string(uchar *buf,uchar len)

{  

    uchar i;

        for(i=0;i        UART_send_byte(*buf++);

}




//主函数

void main()

{

        UART_init();

        Init_ultrasonic_wave();

        //屏幕初始化

        Init1602();

        //温度初始化

        tmpchange();

        t_=tmp();

        tmpchange();

        t_=tmp();

        tmpchange();

        t_=tmp();


        //循环显示

        while(1)

        {

                Key();

                if(yuyin_flag==1)

                {

                   yuyin_flag=0;


                   ONE4[4]=L_/100;

                   ONE5[4]=L_/10%10;

                   ONE6[4]=L_%10;

                   if(ONE4[4]==0)ONE4[4]=0x0A;

                   if(ONE5[4]==0)ONE5[4]=0x0A;

                   if(ONE6[4]==0)ONE6[4]=0x0A;

                  

                   UART_send_string(ONE1,6);

                   delayms(1);

                   UART_send_string(ONE4,6);

                   delayms(1);

                   UART_send_string(ONE3,6);

                   delayms(1);

                   UART_send_string(ONE5,6);

                   delayms(1);

                   UART_send_string(ONE6,6);

                   delayms(1);

                   UART_send_string(ONE2,6);

                   delayms(1);

                }

                //正常显示

                if(mode==0)

                {

                        StartModule();//启动超声波

                        while(!RX);          //当RX为零时等待

                        TR0=1;                  //开启计数

                        while(RX);          //当RX为1计数并等待

                        TR0=0;                  //关闭计数

       

                        delayms(20);  //20MS

                        tmpchange();  //温度转换

                        t_=tmp();     //度温度

                        Conut(t_/10); //计算距离

                        if(L_>Max||L_                        {

                                Feng_Start();

                        }

                        else

                        {

                                if(FW!=1)

                                Feng_Stop();

                        }

                        Display_1602(t_/10,L_);

                }

                //调整显示

                else if(mode!=0)

                {

                        //最大最小值

                        Init_MaxMin();

                        while(mode!=0)

                        {

                               

                                Key();

                                if(k==1&&mode==1)

                                {

                                        Init_MaxMin();       

                                   write_com(0x8d);//设置位置                                       

                                }

                                else if(k==1&&mode==2)

                                {

                                        Init_MaxMin();       

                                   write_com(0x8d+0x40);//设置位置       

                                }

                                k=0;

                        }

[1] [2]
关键字:51单片机  超声波测距  语音播报  JQ6500 引用地址:基于51单片机超声波测距带语音播报JQ6500

上一篇:利用压栈sp自增复制数据
下一篇:基于单片机的烟雾报警器

推荐阅读最新更新时间:2024-11-05 20:19

AT89C2051单片机倒车防撞系统设计方案
  本方案所设计的倒车防撞报警系统采用软、硬件结合的方法,具有模块化和多用化的特点。设计中介绍了超声波检测的发展及基本原理,阐述了超声波传感器的原理及特性。对于系统的一些主要参数进行了讨论,并且在介绍超声波测距系统功能的基础上,提出了系统设计的总体构成,本方案的提出将对汽车主动防撞乃至自动驾驶产生,给驾驶者提供一个倒车的操作指令。   1.引言   众所周知,要检测两头之间是否有障碍物,一般的做法是一头发射一个信号,在接收处判断是否有信号接收到,若有信号接收到,说明中间没有障碍物;若接收不到,则说明有障碍物。然而在汽车倒车防撞报警系统的设计中,由于汽车是一个移动的物体,不可能在某一具体的位置上安装接收或发射装置,这就决定了系统的发
[单片机]
AT89C20<font color='red'>51单片机</font>倒车防撞系统设计方案
51单片机对无线模块nRF24L01简单的控制收发程序
它的一些物理特性如工作频段、供电电压、数据传输速率就不详细介绍了,直接上代码。 1.首先是发送端: // Define SPI pins #include reg51.h #define uchar unsigned char /***************************************************/ #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度 sbit LED = P2^1; sbit KEY1 = P3^1; sbit KEY2 = P3^2; uchar code TX_AD
[单片机]
AT89C51单片机扩展高速串行同步移位输出口的方法
AT89C51(与MCS-51兼容)单片机的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展多个8位并行I/O口。在LED点阵显示屏应用系统中,一般都采用数据同步移位输出方式,并使用移位寄存器芯片(如74LS595)扩展并行I/O口驱动LED点阵显示。LED 点阵显示采用扫描方式,为不产生闪烁感,每秒需要传送50屏点阵显示数据,因此有大量的数据要通过同步移位的方式送到显示驱动电路部分,这就要求单片机能够快速地输出数据。AT89C51单片机的串行口在方式0工作状态下,数据以fosc/12的波特率输出,1个字节数据写入SBUF后,需检查中断标志位 TI是否为“1”并清“0”TI或延时几个机器周期后才能继续写入了一个数据,输出速度慢
[单片机]
AT89C<font color='red'>51单片机</font>扩展高速串行同步移位输出口的方法
51单片机汇编语言带进位加法指令(4条)
算术运算 指令 共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。 . 加法指令(4条) 这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。 ADD A,#data ;(A)+#data→(A) 累加器
[单片机]
51单片机外部中断的问题
前几天在网上看到的一个程序问题。 #include reg51.h unsigned char code a ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char i=0; void delay() { unsigned int i,j; for(i=200;i 0;i--) for(j=200; j 0;j--); } void main() { EA=1; EX0=1; IT0=1; while(1) { if(i==10) i=0; P2=~a ; delay(); i++; } } vo
[单片机]
51单片机4位数码管电子钟源程序
/*************************************************************************** 标题: 定时器中断 24小时时钟程序 效果: 数码管显示24小时制时钟(具有调时功能) 说明: 使用12M晶振 ,key1=P3^7; key2=P3^6; key3=P3^5;key4=P3^4; 数码管位选P1.0~P1.3 ,段选P0 ******************************************************************************/ #include reg52.h #de
[单片机]
基于51单片机的贪吃蛇小程序(8*8LED点阵实现)
一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 void main() { x_s = 2; //初始化三个点 y_s = 3; x_s = 3; y_s = 3; x_s = 4; y_s = 3; Timer0Init(); suijishu(); while(1) { appear(); if(flag_a) //蛇身移动位 { if(!flag_s) //蛇身死亡位 { auto_move(); HC_595(0x00); //消隐 P0 = 0xFF; //消隐
[单片机]
基于80C51单片机的智能小车设计
O 引言 在现有玩具电动车的基础上,加装光电检测器,实现对电动小汽车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。 1 直流调速系统采用PWM调速 直流调速系统采用晶闸管的直流斩波器与整流电路。晶闸管不受相位控制,而是工作在开关状态。当晶闸管被触发导通时,电源电压加到电动机上,当晶闸管关断时,直流电源与电动机断开,电动机经二极管续流,两端电压接近于零。脉冲宽度调制(Pulse Width Modulat-ion),简称PWM。脉冲周期不变。只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速。 脉宽调速也可通过单片机控制继电器的闭
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved