基于51单片机超声波视力保护仪距离检测设计(毕设课设)

硬件构成:单片机+最小系统+LCD1602液晶显示模块+超声波模块+DS18B20温度采集模块+光线检测模块+ADC0832模块+蜂鸣器模块+LED指示灯模块+按键模块

本设计基于STC89C51/52

  • 1.LCD1602液晶显示测量的距离(头部与探头)、温度和看书时间(默认开机是45分钟);
  • 2.带有温度补偿功能(DS18B20传感器);
  • 3.采用超声波模块测距,测量范围0.02m~4m,精度为0.01m;
  • 4.距离小于30cm,蜂鸣器和LED灯报警提示;
  • 5.四个按键功能:按键1复位按键、按键2设置、按键3加键、按键4减键;
  • 6.附加功能:采用光敏电阻检测光线强弱,AD0832模数转换芯片将模拟量转换成数字量给单片机。光线过强、过弱也会报警提示,按键可以设置光线报警值。
  • 【资源下载】下载地址如下(916):https://docs.qq.com/doc/DTlRSd01BZXNpRUxl

//头函数
#include <reg52.h>
#include <intrins.h>
//宏定义
#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;

char min=45;
char sec=0;
char Mini=30;
char HG=70;
char LG=30;
//按键标志
uchar k=0;
//数值有误
uchar FW=0;
uint light=0;

/*********************************端口定义**********************************/
sbit CS   = P2^3;
sbit Clk = P2^0;
sbit DATI = P2^1;
sbit DATO = P2^1;

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于51单片机超声波测距设计如下: 1. 硬件设计超声波测距模块HC-SR04通过4个引脚与51单片机相连,其中VCC接5V电源,GND接地,Trig接P1.0,Echo接P1.1。1602液晶通过16个引脚与51单片机相连,其中VSS接地,VDD接5V电源,VO接电位器,RS接P2.0,RW接P2.1,E接P2.2,D0-D7接P0口。 2. 软件设计: (1) 初始化1602液晶,设置超声波模块的Trig引脚为输出,Echo引脚为输入。 (2) 定义计时器,用于计算超声波从发射到接收的时间。 (3) 发送一个10us的高电平脉冲到Trig引脚,触发超声波模块开始测距。 (4) 等待Echo引脚变为高电平,开始计时。 (5) 等待Echo引脚变为低电平,停止计时。 (6) 根据计时器的值计算出距离,并将距离显示在1602液晶上。 以下是基于51单片机超声波测距设计的部分代码: ```c #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit Trig = P1^0; sbit Echo = P1^1; sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; void delay(uint i) { while(i--); } void write_com(uchar com) { RS = 0; RW = 0; P0 = com; delay(100); E = 1; _nop_(); _nop_(); E = 0; } void write_data(uchar dat) { RS = 1; RW = 0; P0 = dat; delay(100); E = 1; _nop_(); _nop_(); E = 0; } void init() { write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void main() { uint distance; uchar str[16]; TMOD = 0x01; TH0 = 0; TL0 = 0; TR0 = 1; while(1) { Trig = 1; delay(10); Trig = 0; while(!Echo); TH0 = 0; TL0 = 0; while(Echo); TR0 = 0; distance = TH0 * 256 + TL0; distance = distance / 58; sprintf(str, "Distance: %d cm", distance); init(); write_data(str[0]); write_data(str[1]); //... write_data(str[15]); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值