找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4129|回复: 7
打印 上一主题 下一主题
收起左侧

单片机超声波测距+温度补偿+报警Proteus仿真源程序

  [复制链接]
跳转到指定楼层
楼主
AT89C51超声波测距系统(SRF04)+温度补偿+报警电路+LCD1602显示(带详尽程序注释)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:

  1. #include "config.h"
  2. #include "delay.h"
  3. #include "lcd1602.h"
  4. #include "ds18b20.h"
  5. #include "chaoshengbo.h"


  6. /******************************************************************************/
  7. // 数组定义
  8. /******************************************************************************/
  9. uint8 lcd1602Table1[8]={0x00,0x06,0x09,0x09,0x06,0x00,0x00,0x00};//构造温度符号
  10. uint8 lcd1602Table2[7]={'0','0','0','.','0','0','\0'};   //存放需要显示的温度信息
  11. uint8 disbuff[4]={'0','0','0','\0'};//存放需要显示的距离数字
  12. uint16 max,min,average=0;//最大值、最小值变量定义
  13. uint16 S[10]; //存放每次计算的距离信息
  14. uint16 time=0;        //存放时间差
  15. uint8 tempflag;//温度正负标志位
  16. float temp1;//存放每次测量的温度信息
  17. bit flag1=0;//定时器时间溢出标志位


  18. /******************************************************************************/
  19. // main函数
  20. /******************************************************************************/
  21. int main(void){       
  22.     beep=0;                  //扬声器初始化
  23.         Lcd1602_Init();          //液晶初始化
  24.         while(Ds18b20_Init())       
  25.         Lcd1602_Show_String(1,1,"NO SENSOR!");//初始化检测总线上是否有DS18B20
  26.         Lcd1602_Show_String(1,1,"Initial OK");
  27.         Lcd1602_Write_Cmd(0x01);                 //清屏LCD1602
  28.         Lcd1602_Custom_Char(1,10,0,lcd1602Table1);//构造温度符号,位置为第1行第10列
  29.         Lcd1602_Show_String(1,11,"C");
  30.         Lcd1602_Show_String(1,1,"T:");//温度字母“T”
  31.         Lcd1602_Show_String(2,1,"h:");//距离字母“h”
  32.         Lcd1602_Show_String(2,6,"cm");//单位cm

  33.        
  34.         while(1){
  35.                 Ds18b20_Get_Temp(lcd1602Table2);       //读取温度
  36.                 if(tempflag==0)
  37.                 {
  38.                 Lcd1602_Show_String(1,3,"+");                 //显示正号
  39.                 Lcd1602_Show_String(1,4,lcd1602Table2);//显示温度
  40.                 }
  41.                 else
  42.                 {
  43.                 Lcd1602_Show_String(1,3,"-");           //显示负号
  44.                 Lcd1602_Show_String(1,4,lcd1602Table2);//显示温度
  45.                 }
  46.                 super_distance(disbuff); //超声波测距
  47.                 Lcd1602_Show_String(2,3,disbuff);//显示距离
  48.         }
  49. }
复制代码

所有资料51hei提供下载:
超声波测距.zip (94.61 KB, 下载次数: 200)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

来自 2#
ID:383061 发表于 2020-6-25 08:08 | 只看该作者

proteus8.6版本
回复

使用道具 举报

板凳
ID:785709 发表于 2020-6-23 08:52 | 只看该作者
打不开
回复

使用道具 举报

地板
ID:44037 发表于 2020-6-23 11:57 | 只看该作者
谢谢分享   学习一下!!!
回复

使用道具 举报

5#
ID:438586 发表于 2021-2-28 10:43 | 只看该作者
调节温度的时候lcd不同步,并且不显示距离[img][/img]
回复

使用道具 举报

6#
ID:383061 发表于 2021-4-16 23:13 | 只看该作者
robin2625889149 发表于 2021-2-28 10:43
调节温度的时候lcd不同步,并且不显示距离[/img]

不会吧 我之前用的时候都好使
回复

使用道具 举报

7#
ID:897091 发表于 2021-4-17 21:30 | 只看该作者
这个是用keil4打开是吧?
回复

使用道具 举报

8#
ID:897091 发表于 2021-4-18 08:38 | 只看该作者
我用proteus打开可以仿真,但是keil4开打源码就几乎卡死,倒是keil5能打开也不卡,所以大佬是用的keil4还是5 ?我电脑是4代i7,内存也8g,难道是我该换电脑了。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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