标题: 超声波测距可设置LCD1602显示Proteus仿真代码,并带温度DS18B20补偿 [打印本页]

作者: wangfushou    时间: 2021-11-17 21:09
标题: 超声波测距可设置LCD1602显示Proteus仿真代码,并带温度DS18B20补偿
超声波测距可设置LCD1602显示,并带温度DS18B20补偿,超限制报警。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. //头函数
  2. #include <reg52.h>
  3. #include <intrins.h>
  4. //宏定义
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define ULint unsigned long int
  8. //温度零上与零下的标志位
  9. char flag=0;
  10. //超声波
  11. char flags=0;
  12. //超声波距离
  13. char flag1s=1;
  14. //计算定时间
  15. uint time=0;
  16. //计算距离
  17. ULint L_=0;

  18. ULint Mini=20;
  19. //温度
  20. uint t_=0;

  21. bit xsflag=1;




  22. //按键标志
  23. uchar k=0;
  24. //数值有误
  25. uchar FW=0;





  26. #include "BJ_Key.h"                    //报警按键
  27. #include "display.h"                         //显示头函数
  28. #include "ultrasonic_wave.h"//超声波头函数
  29. #include "DS18B20.h"                    //温度传感器头函数


  30. //函数声明
  31. void delayms(uint ms);



  32. //主函数
  33. void main()
  34. {
  35.         Init_ultrasonic_wave();
  36.         //屏幕初始化
  37.         Init1602();
  38.         //温度初始化
  39.         tmpchange();
  40.         t_=tmp();
  41.         tmpchange();
  42.         t_=tmp();
  43.         tmpchange();
  44.         t_=tmp();

  45.         //循环显示
  46.         while(1)
  47.         {
  48.                 Key();
  49.                
  50.                         StartModule();//启动超声波
  51.                         while(!RX);          //当RX为零时等待
  52.                         TR0=1;                  //开启计数
  53.                         while(RX);          //当RX为1计数并等待
  54.                         TR0=0;                  //关闭计数
  55.        
  56.                         delayms(20);  //20MS
  57.                         tmpchange();  //温度转换
  58.                         t_=tmp();     //度温度
  59.                         Conut(t_/10); //计算距离

  60.                         if(L_<Mini && xsflag==1)
  61.                         {
  62.                                 Feng_Start();
  63.                         }else{
  64.                                 Feng_Stop();
  65.                         }
  66.                         Display_1602(t_/10,L_,Mini);
  67.        
  68.         }
  69. }

  70. void delayms(uint ms)
  71. {
  72.         uchar i=100,j;
  73.         for(;ms;ms--)
  74.         {
  75.                 while(--i)
  76.                 {
  77.                         j=10;
  78.                         while(--j);
  79.                 }
  80.         }
  81. }
  82. //T0中断用来计数器溢出,超过测距范围
  83. void CJ_T0() interrupt 1
  84. {
  85.     flags=1;                                                         //中断溢出标志
  86. }
复制代码

仿真代码资料51hei附件下载:
超声波测距,可设置距离.7z (191.77 KB, 下载次数: 115)


作者: wgaopeng    时间: 2021-11-18 21:25
好资料,51黑有你更精彩!!!
作者: aide51    时间: 2022-2-24 07:43
这个跟上的差不多




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