[51单片机]HC-SR04超声波模块与1602液晶显示

  一,模块介绍

trig-使能引脚<输出超过10us高电平启动模块>

echo-接收引脚<模块启动后在此脚发出8个40khz脉冲并产生高电平,高电平开始到结束的时间就是探测时间>

vcc-电源

gnd-接地

二,使用

trig 与 echo 接单片机IO口;

vcc 与 gnd 接单片机VCC,GND;

代码:

#include<reg52.h>
#include<intrins.h>
void delay(unsigned char z)//延时 z 个毫秒
{
    unsigned char x,y;
    for(x=0;x<z;x++)
    {
        for(y=0;y<110;y--)
        {
            ;
        }
    }
}
/***********************LCD1602**************************/
sbit EN = P2^7;
sbit RS = P2^6;           //数据/命令选择        1/0
sbit RW = P2^5;        //读/写选择            1/0
void lcd_bus()        //检测忙
{
    unsigned char i;
    P0 = 0XFF;
    RS = 0;
    RW = 1;
    for(i=0;i<200;i++)
    {
        EN = 0;
        EN = 1;
        if(!(P0&0X80))
        {
            break;
        }    
    }
    EN = 0;
}
void lcd_date(unsigned char date)        //写数据
{
    lcd_bus();
    RS = 1;
    RW = 0;
    P0 = date;
    delay(5);
    EN = 1;
    delay(5);
    EN = 0;
}
void lcd_com(unsigned char com)            //写命令
{
    lcd_bus();
    RS = 0;
    RW = 0;
    P0 = com;
    delay(5);
    EN = 1;
    delay(5);
    EN = 0;
}
/***********************超声波**************************/
unsigned int distance[]={0,0,0,0};
sbit trig = P1^0;
sbit echo = P1^1;
void trigger();
void calculate();
void loop()
{
    trigger();
    while(!echo);
    TR0 = 1;
    while(echo);
    TR0 = 0;
    //TH0 = 0;                        错误!!!!
    //TL0 = 0;                        后面要用到!
    calculate();
    delay(5);        
}
void trigger()        //触发模块启动
{
    trig = 0;
    trig = 1;
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    trig = 0;    
}
void calculate()    //计算距离
{
    unsigned int x,y;
    x = TH0 * 256 +TL0;
    x *= 12/11.0592;
    y = x * 0.017;//此时 Y 就是距离    
    TH0 = 0;
    TL0 = 0;
    distance[3] = y / 1 % 10;             //个
    distance[2]    = y / 10 % 10;             //     十
    distance[1]    = y    / 100 % 10;             //       百
    distance[0]    = y    / 1000 % 10;         //         千
}
void lcd_display()    //显示距离
{
    unsigned char i;
    lcd_com(0x80+0x40);
    for(i=0;i<4;i++)
    {
        lcd_date(0x30+distance[i]);
        delay(5);
    }    
}
/***********************初始化**************************/
void init()
{
    EA = 1;
    ET0 = 1;
    TMOD = 0X01;
    TH0 = 0;
    TL0 = 0;
    lcd_com(0x38);
    lcd_com(0x0c);
    lcd_com(0x06);
    lcd_com(0x01);
}
/***********************主函数**************************/
void main()
{                          /*                */
    unsigned char yi[] = {"The Distace is :"};
    unsigned char er[] = {"cm"};
    unsigned int k = 0;
    init();
    lcd_com(0x80);
    for(k=0;k<16;k++)
    {
        lcd_date(yi[k]);
        delay(5);
    }
    lcd_com(0x80+0x44);
    for(k=0;k<2;k++)
    {
        lcd_date(er[k]);
        delay(5);
    }
    //lcd_com(0x80+0x40);
    while(1)
    {    
        loop();
        lcd_display();    
    }    
}

原文地址:https://www.cnblogs.com/xiejinxu/p/11675295.html

时间: 2024-10-08 05:06:22

[51单片机]HC-SR04超声波模块与1602液晶显示的相关文章

51单片机学习笔记【五】——1602液晶屏

一.1602液晶屏基础 1.LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母.数字.符号的点阵型液晶模块.它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片.本次使用型号为SMC1602A LCM的液晶屏. 2.LCD1602接口信号说明 3.控制接口说明 4.指令说明 二.实验例程 1.电路原理图 2.实验说明 本实验通

51单片机(STC89C52RC)读取DHT11模块温度湿度信号采集显示数码管

原文地址:https://www.cnblogs.com/JiYF/p/12555161.html

「51单片机」收发一体超声波测距模块分析+代码

我用的超声波型号是US-020,四个接口的超声波用法基本相同. 一.概述 US-020超声波模块测距范围:2cm~7m 供电电压5V,静态功耗低于3mA 二.实物图 尺寸:45mm*20mm*1.6mm 三.接口 1.VCC 电源,直流5V 2.Trig 向此管脚输入10us以上高电平,可触发模块测距 3.Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和 4.GND 接地 四.测距工作原理 只要在Trig管脚输入10us以上高电平,系统会自动发出8个40KHz的超声波脉冲,然后

[51单片机] HC-SR04超声波测距仪 基础代码

>_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: 1 /***********************************************************************************************************/ 2 //HC-SR04 超声波测距模块 DEMO 程序 3 //晶振:11.0592 4 //接线:模块TRIG接 P1.2

电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键

这次课程设计要完成的是制作一个基于51单片机的电子时钟的万年历(protues仿真),需要用到1602液晶屏+DS1302+DS18B20+按键等模块.各个的模块就不在一一介绍,直接讲解这个系统的功能,首先是四个按键,第一个按键是选中需要修改时间位置,在按一次选中下一个,依次类推,第二个按键是对数值进行加一,第三个按键对数值进行减一,第四个按键确认. 先放仿真图 然后是代码: main.c #include <REG52.H> #include <intrins.h> #defin

51单片机蓝牙模块

51单片机的蓝牙模块,是在蓝牙通讯的基础上,进行蓝牙51模块与外部蓝牙发射接收设备之间,相互收发数据.并且其引脚为VCC,GND,TXD,RXD,可以通过串口通信与外部上位机或单片机通信. 代码如下(注意蓝牙模块是5V供电) #include<reg52.h> void init();void delay(unsigned int ms); unsigned char input;void display(unsigned char num_decimal);unsigned char cod

[51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯. >_<!首先是发送模块: 1 void main() 2 { 3 uchar Tx_Buf1[]={1}; //发送的信息1 4 uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据 5 i

[51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯

>_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013.html),这里俺把按键发命令给去掉,然后加入一个串口通信的功能,PC通过串口给发送端发送命令,然后发送端通过无线将命令发给接收端来实现控制,这里接收端和上一个例程中的一样,只是在发送端的代码里去除了按键控制,变成了串口控制. >_<!发送端电路: >_<!接收电路图: >_&l

单片机教程.指针的基础与1602液晶的初步认识

指针的基础与1602液晶的初步认识 我们在上C语言课的时候,学到指针,每一位教C语言的老师都会告诉我们一句:指针是C语言的灵魂.由此可见,指针是否学会是判断一个人是否真正学会C语言的重要指标之一,但是很多同学只知道其重要性,却没学会其灵活性. 简单的程序,100来行代码,不需要指针我们可以轻松搞定,但是当代码写到几千上万行甚至更多的时候,利用指针就可以直接而快速的处理内存中的各种数据结构中的数据,特别是数组.字符串和内存的动态分配等,它为函数之间各类数据传递提供了简洁便利的方法.说了这么多作用估