51单片机超声波测距,求大神解救

[复制链接]
491|9
 楼主 | 2018-2-7 19:35 | 显示全部楼层 |阅读模式
调试了一下午
  1. #include<reg51.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;


  4. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  5. u8 time,distance;
  6. bit flag=0;                  //中断溢出标志
  7. u8 pros[3];
  8. void delay(u16 i)
  9. {
  10.   while(i--);
  11. }

  12. void delay20us(void)   //误差 -0.46875us
  13. {
  14.     unsigned char a,b;
  15.     for(b=3;b>0;b--)
  16.         for(a=1;a>0;a--);
  17. }

  18. sbit LSA=P2^2;
  19. sbit LSB=P2^3;
  20. sbit LSC=P2^4;

  21. sbit TRIG=P2^5;
  22. sbit ECHO=P2^6;
  23. void Usair()                 //中断
  24. {
  25.   TMOD=0X01;                 //定时器0
  26.   TH0=0;
  27.   TL0=1;
  28.   EA=1;
  29.   TR0=1;

  30. }



  31. void Count()                           //计算距离
  32. {
  33.    time=TH0*256+TL0;
  34.    TH0=0;
  35.    TL0=0;
  36.    distance=(time*1.87)/100;


  37. }


  38. void Digplay()                                                                  //数码管动态扫描
  39. {
  40.     u8 i;
  41.         for(i=0;i<8;i++)
  42.         {
  43.           switch(i)
  44.         {
  45.            case(0):LSA=0;LSB=0;LSC=0;break;
  46.            case(1):LSA=1;LSB=0;LSC=0;break;
  47.          

  48.         }
  49.      P1=pros[i];
  50.          delay(100);
  51.          P1=0X00;
  52.         }
  53. }

  54. void KeyDown()                                                                  //数码管显示
  55. {
  56.   if(flag==1)
  57.   {
  58.     flag=0;
  59.     pros[0]=0x40;
  60.         pros[1]=0x40;
  61.   }
  62.   pros[0]=smgduan[distance/10];
  63.   pros[1]=smgduan[distance%10];

  64. }



  65. void star_Ch()                                                                //打开超声波测距模块
  66. {
  67.     TRIG=1;
  68.         delay20us();
  69.         TRIG=0;

  70. }
  71. void main()
  72. {
  73.    Usair();
  74.    while(1)
  75.    {
  76.     star_Ch();
  77.         while(!ECHO);
  78.         TR0=1;
  79.         while(ECHO)
  80.         TR0=0;
  81.     delay(1000);
  82.         Digplay();  
  83.           KeyDown();
  84.    }

  85. }
  86. void Init() interrupt 1
  87. {
  88.     TH0=0;
  89.         TL0=0;
  90.           flag=1;
  91. }
复制代码

不知道那里出现了问题,大神解救一下

本帖子中包含更多资源

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

x
| 2018-2-8 08:18 | 显示全部楼层
网上有很多例子可以参考啊,
https://wenku.baidu.com/view/935fe87a9e314332396893be.html 最后有代码
| 2018-2-9 15:10 | 显示全部楼层
【教程】超声波测距
http://bbs.21ic.com/icview-2408582-1-1.html?fromuid=1875788
(出处: 21ic电子技术论坛)
| 2018-2-9 15:10 | 显示全部楼层
你应该描述一下你的情况,,,,一大堆代码没人愿意看的
| 2018-2-9 15:42 | 显示全部楼层
都不知道你说谁说什么?
| 2018-2-10 10:44 | 显示全部楼层
先来支持一下新人
不过改代码的事情不要问了. 你的设计方案和思路可以讲讲. 看看方案有没有问题
再描述一下调试中有遇到问题吧
| 2018-2-10 12:36 | 显示全部楼层
airwill 发表于 2018-2-10 10:44
先来支持一下新人
不过改代码的事情不要问了. 你的设计方案和思路可以讲讲. 看看方案有没有问题
再描述一下 ...

| 2018-2-10 13:31 | 显示全部楼层
本帖最后由 jrcsh 于 2018-2-10 13:33 编辑

首先先要看懂源代码的工作原理。

搞清楚源代码的工作流程。

然后在一些节点上去检验数据结果是否正确。
要明白在这个点上的数据应该为多少范围是多少?


| 2018-2-14 14:39 | 显示全部楼层
电路原理图都没有,问题也描述不清楚,给出一堆代码无法解决问题啊。
| 2018-3-1 21:52 | 显示全部楼层
代码应该很少会有人帮你看,这个你可以借鉴借鉴

本帖子中包含更多资源

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

x
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /1 下一条

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