找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 999|回复: 1
收起左侧

51单片机水位水箱控制全套资料 Proteus仿真程序调试文档

[复制链接]
ID:321563 发表于 2023-4-18 10:49 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif 1.png

Altium Designer画的单片机水位控制箱原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png 51hei.png

第5章 系统调试
5.1 软件调试
其过程分为以下几个步骤:
第一步,建立源程序。通过计算机开发系统的编辑软件,按照所要求的格式、语法规定、源程序输入到开发系统中,并存在磁盘上。
第二步,在计算机上,利用KEIL软件对第一步输入的源程序进行编译,变为可执行的目标代码。如果源程序有语法错误,则其错误将显示出来,然后返回到第一步进行修改,再进行编译,直到语法错误全部纠正为止。
第三步,动态在线调试。对于与系统、硬件无联系的程序,可以借助动态在线调试手段,如单步运行、设置断点等,发现逻辑错误,然后返回到第一步修改,直到逻辑错误纠正为止。对于与系统硬件紧密相关的程序,则需软件,硬件同时进行调试,将程序烧入单片机,然后将CPU 插入系统,发现硬件故障排除故障,发现逻辑错误,修改程序,消除逻辑错误。
5.2 硬件调试
硬件调试分两步:
第一步:系统上电之前,先用万用表等工具,根据硬件逻辑设计图,仔细检查线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,应特别注意电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线是否存在相互之间短路或与其它信号线的短路。
第二步:第一步的调试,只是对系统进行初步调试,可以排除一些明显的故障,而硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠软件和硬件联调来排除。
硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。
5.2.1 发光二极管及蜂鸣器调试
1. 发光二极管调试
LED在本设计中代表的阀门可以说是很重要的部分。最开始的时候单片机供电发现LED不亮,首先看电路的焊接是否有掉线的情况,发现没有掉线。然后用万用表检查个点之间有没有短路的情况,没有发现有短路的情况。最后看焊接的是否正确,经过对照电路图检查发现,LED的正负极接发错误。通过最后的改正。重新给单片机供电LED正常显示。调试成功。
2. 蜂鸣器调试
蜂鸣器本文的报警设施,液位超过所设置的最高值系统就会发出报警。经过反复检查最后发现三极管的引脚接法有错误。把9012引脚当成了9013引脚焊接而9012和9013发射极和集电极在电路中的接法不同,经过改正最后蜂鸣器正常工作。
image036.jpg
图5-1  LED、蜂鸣器调试
5.2.2 1602液晶显示屏调试
超声波测量的距离如果不能把距离正确显示在液晶屏上本设计将是徒劳,所以液晶屏的正确显示是本文的重中之重。开始的时候启动整个系统,液晶屏只是亮起来而不显示距离,首先检查电路焊接是否有错误,发现没有错误。然后用万用表检查是否有短接,也没发现问题。最后结合软件检查发现软件编程时液晶显示的赋值部分有错误。最后经过仔细修改,液晶屏正常的显示了测量距离。
  图5-2 1602液晶屏的调试
5.2.3 初始值调试
本文设计首先是设定一个物位初始值。分别由两个按键控制,加值按键和减值按键。确定初始值之后按下确定按键及超声波开始对物位检测。初值同时也是报警电路的参数,因此整个系统设定初值就很重要。开始的时候按键按下时,屏幕的初始值没有任何反应,最开始的时候检查有没有掉线情况发现没有。经过仔细检查发现原来按键的四个引脚上下两个是同一引脚,在焊接的时候把两个相同的引脚连接到了电路中,最后经过改正按键能正常使用了。
    image037.jpg image038.jpg
图5-3 初始值调试
5.2.4 超声波测液位调试
整个系统上电以后,首先确定初始值,然后按确定键,超声波开始对液位
进行检测,测定的距离显示在液晶屏幕上。调试成功以后,设计才算最终完成。
      image039.jpg image040.jpg image041.jpg image042.jpg
图5-4 测液位调试


单片机源程序如下:
  1. /*
  2. 基于51单片机超声波测距及温度补偿
  3. */
  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=0;
  14. //计算定时间
  15. uint time=0;
  16. //计算距离
  17. ULint L_=0;
  18. //温度
  19. uint t_=0;
  20. //显示模式  0正常  1最大值调整  2最小值调整
  21. uchar mode=0;

  22. uint Max=220;
  23. uint Min=190;
  24. //按键标志
  25. uchar k=0;
  26. //数值有误
  27. uchar FW=0;
  28. //头函数
  29. #include <reg52.h>
  30. #include <intrins.h>
  31. #include "BJ_Key.h"                    //报警按键
  32. #include "display.h"                         //显示头函数
  33. #include "ultrasonic_wave.h"//超声波头函数
  34. #include "DS18B20.h"                    //温度传感器头函数


  35. //函数声明
  36. void delayms(uint ms);
  37. //主函数
  38. void main()
  39. {
  40.         Init_ultrasonic_wave();
  41.         //屏幕初始化
  42.         Init1602();
  43.         //温度初始化
  44.         tmpchange();
  45.         t_=tmp();
  46.         tmpchange();
  47.         t_=tmp();
  48.         tmpchange();
  49.         t_=tmp();

  50.         //循环显示
  51.         while(1)
  52.         {
  53.                 Key();
  54.                 //正常显示
  55.                 if(mode==0)
  56.                 {
  57.                         StartModule();//启动超声波
  58.                         while(!RX);          //当RX为零时等待
  59.                         TR0=1;                  //开启计数
  60.                         while(RX);          //当RX为1计数并等待
  61.                         TR0=0;                  //关闭计数
  62.         
  63.                         delayms(20);  //20MS
  64.                         tmpchange();  //温度转换
  65.                         t_=tmp();     //度温度
  66.                         Conut(t_/10); //计算距离
  67.                         if(L_<Min)
  68.                         {
  69.                                 Feng_Start();
  70.                                 Motor_Start();
  71.                         }
  72.                         else if(L_>Max)
  73.                         {
  74.                                 Feng_Start();
  75.                                 Motor_Stop();
  76.                         }
  77.                         else{
  78.                                 Feng_Stop();
  79.                                 Motor_Start();
  80.                         }
  81.                         Display_1602(t_/10,L_);
  82.                 }
  83.                 //调整显示
  84.                 else if(mode!=0)
  85.                 {
  86.                         //最大最小值
  87.                         Init_MaxMin();
  88.                         while(mode!=0)
  89.                         {
  90.                                 
  91.                                 Key();
  92.                                 if(k==1&&mode==1)
  93.                                 {
  94.                                         Init_MaxMin();        
  95.                                    write_com(0x8d);//设置位置                                       
  96.                                 }
  97.                                 else if(k==1&&mode==2)
  98.                                 {
  99.                                         Init_MaxMin();        
  100.                                    write_com(0x8d+0x40);//设置位置        
  101.                                 }
  102.                                 k=0;
  103.                         }
  104.                         //界面初始化
  105.                         Init1602();
  106.                 }
  107.         }
  108. }

  109. void delayms(uint ms)
  110. {
  111.         uchar i=100,j;
  112.         for(;ms;ms--)
  113.         {
  114.                 while(--i)
  115.                 {
  116.                         j=10;
  117.                         while(--j);
  118.                 }
  119.         }
  120. }


  121. //T0中断用来计数器溢出,超过测距范围
  122. void CJ_T0() interrupt 1
  123. {
  124.     flags=1;                                                         //中断溢出标志
  125. }
复制代码

Keil代码与Proteus仿真下载:
程序仿真.7z (1.13 MB, 下载次数: 36)

评分

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

查看全部评分

回复

使用道具 举报

ID:262 发表于 2023-4-19 00:39 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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