找回密码
 注册
关于网站域名变更的通知
查看: 719|回复: 4
打印 上一主题 下一主题

单片机超声波测距Proteus仿真 包含源程序 仿真 原理图

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-5-31 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器;.LCD1602液晶显示测量的距离和温度;.带有温度补偿功能(DS18B20传感器);.测量范围0.02m~4m,精度为0.01m;按键功能:按键1:加报警值按键2:减报警值按键3:设置按键(只有在设置的时候才可以加减报警值)
    ! _8 b+ m) y2 R. P7 t& X
    9 g6 m4 Y& F+ `7 T* R) q- d( r% |0 R5 n
    . r! A( b$ C# y5 B7 @
    ( v) t% T$ O3 W9 |

    - D# w. Y  W4 h( t) R% [# ~- |  q5 ~; ? & i) n$ M2 X/ ?  L4 c
    # v; e" e2 ~& A# Z, `
    单片机源程序如下:! Q) V/ {* X& w) h: r9 X+ ~
    • //宏定义
    • #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=30;
    • //按键标志
    • uchar k=0;
    • //数值有误
    • uchar FW=0;
    • //头函数
    • #include <reg52.h>
    • #include <intrins.h>
    • #include "BJ_Key.h"                    //报警按键
    • #include "display.h"                         //显示头函数
    • #include "ultrasonic_wave.h"//超声波头函数
    • #include "DS18B20.h"                    //温度传感器头函数
    • //函数声明
    • void delayms(uint ms);
    • //主函数
    • void main()
    • {
    •         Init_ultrasonic_wave();
    •         //屏幕初始化
    •         Init1602();
    •         //温度初始化
    •         tmpchange();
    •         t_=tmp();
    •         tmpchange();
    •         t_=tmp();
    •         tmpchange();
    •         t_=tmp();
    •         //循环显示
    •         while(1)
    •         {
    •                 Key();
    •                 //正常显示
    •                 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_<Min)
    •                         {
    •                                 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;
    •                         }
    •                         //界面初始化
    •                         Init1602();
    •                 }
    •         }
    • }
    • void delayms(uint ms)
    • {
    •         uchar i=100,j;
    •         for(;ms;ms--)
    •         {
    •                 while(--i)
    •                 {
    •                         j=10;
    •                         while(--j);
    •                 }
    •         }
    • }
    • //T0中断用来计数器溢出,超过测距范围
    • void CJ_T0() interrupt 1
    • {
    •     flags=1;                                                         //中断溢出标志
    • }

    • 3 s; n( r5 i- J" D
    ( S  m! [* C# v$ a: \
    4 C; [# H+ A7 M8 ]" N) x7 s( D0 I
    , |% q. l4 r0 O$ U  f
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2021-5-31 16:12 | 只看该作者
    + ?8 S; a0 D9 k7 d
    BJ_KEY.H(4): error C279: 'flag': multiple initialization/ d' s6 g7 Z7 C7 F# B2 L
    BJ_KEY.H(6): error C279: 'flags': multiple initialization- s5 x$ W( R$ |9 G5 t- U+ U4 C
    BJ_KEY.H(8): error C279: 'flag1s': multiple initialization: e+ Y; _4 C& z3 H/ s) T5 Q
    我运行后为啥会出现这种错误呢

    点评

    翻译一下,他这说是重复初始化,你看看是不是你配置问题或者什么的把,,反正我Proteus 8.11版本,重新导入了一下HEX文件,就可以正常运行了  详情 回复 发表于 2021-5-31 16:28
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2021-5-31 16:28 | 只看该作者
    Blah 发表于 2021-5-31 16:12
    6 w0 t, e+ A1 }. J( vBJ_KEY.H(4): error C279: 'flag': multiple initialization5 w/ y" n. o# q+ x7 J! R0 F
    BJ_KEY.H(6): error C279: 'flags': multip ...

    - g3 L9 N# N6 i9 i& K  B& |翻译一下,他这说是重复初始化,你看看是不是你配置问题或者什么的把,,反正我Proteus 8.11版本,重新导入了一下HEX文件,就可以正常运行了
    2 W" z, I7 R% z3 B! s. q
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2021-5-31 18:04 | 只看该作者

    & @" d6 }  |* Q8 j9 q/ x0 }有没有相应的流程图啊

    点评

    就是的,有流程图吗  详情 回复 发表于 2021-5-31 18:05

    该用户从未签到

    5#
    发表于 2021-5-31 18:05 | 只看该作者
    Blah 发表于 2021-5-31 18:04- V; Q/ k! L$ r. g6 Z( _4 N0 C
    有没有相应的流程图啊
    : I2 h7 ^  h8 ~8 U: M( n
    就是的,有流程图吗6 j" i" g4 S7 E* \2 N6 v
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-22 01:26 , Processed in 0.093750 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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