找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小白AT89C51超声波模块测距求助,求大佬指点

[复制链接]
跳转到指定楼层
楼主
ID:470469 发表于 2019-1-19 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下,求大佬能够指点一下我,跪谢啊啊啊啊啊啊!


  1. #include<reg52.h>
  2. sbit trig=P3^1;
  3. sbit echo=P3^2;
  4. sbit test=P1^0;
  5. sbit DU=P2^6;
  6. sbit WE=P2^7;
  7. sbit A=P3^4;
  8. bit succeed_flag;
  9. char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};     //12òõêyÂë1ü±í
  10. char wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  11. int H,L;
  12. int x;
  13. void delay(int xms)                                      //Ñóê±oˉêy
  14. {
  15.         int i,j;
  16.         for(i=xms;i>0;i--)
  17.                 for(j=125;j>0;j--);
  18.         
  19. }
  20. void delay20()                                    //Ñóê±20
  21. {  
  22.    int i;      
  23.    for(i=0;i<100;i++);
  24. }
  25. void ZHSC(int i)                                //½«¾ààëi×a»»3éêyÂë1üÏÔê¾
  26. {
  27.         int g,s,b,q,w,sw,bw,qw;
  28.         qw=i/10000000;
  29.         i%=10000000;
  30.         bw=i/1000000;
  31.         i%=1000000;
  32.         sw=i/100000;
  33.         i%=100000;
  34.         w=i/10000;
  35.         i%=10000;
  36.         w=i/10000;
  37.         i%=10000;
  38.         q=i/1000;
  39.         i%=1000;
  40.         b=i/100;
  41.         i%=100;
  42.         s=i/10;
  43.         i%=10;
  44.         g=i;
  45.         
  46.         P0=duan[g];
  47.         DU=1;
  48.         DU=0;
  49.         P0=wei[0];
  50.         WE=1;
  51.         WE=0;
  52.         P0=duan[s];
  53.         DU=1;
  54.         DU=0;
  55.         P0=wei[1];
  56.         WE=1;
  57.         WE=0;
  58.         P0=duan[b];
  59.         DU=1;
  60.         DU=0;
  61.         P0=wei[2];
  62.         WE=1;
  63.         WE=0;
  64.         P0=duan[q];
  65.         DU=1;
  66.         DU=0;
  67.         P0=wei[3];
  68.         WE=1;
  69.         WE=0;
  70.         P0=duan[w];
  71.         DU=1;
  72.         DU=0;
  73.         P0=wei[4];
  74.         WE=1;
  75.         WE=0;
  76.         P0=duan[sw];
  77.         DU=1;
  78.         DU=0;
  79.         P0=wei[5];
  80.         WE=1;
  81.         WE=0;
  82.         P0=duan[bw];
  83.         DU=1;
  84.         DU=0;
  85.         P0=wei[6];
  86.         WE=1;
  87.         WE=0;
  88.         P0=duan[qw];
  89.         DU=1;
  90.         DU=0;
  91.         P0=wei[0];
  92.         WE=1;
  93.         WE=0;        
  94.         P0=duan[7];
  95. }
  96. int start()
  97. {
  98.                 test=0;
  99.                 succeed_flag=0;
  100.                 echo=0;
  101.                 trig=0;
  102.                 TMOD=0x11;          //¼Æê±Æ÷1¤×÷·½ê½      
  103.                 IT0=0;              //μíμçÆ½′¥·¢            
  104.                 EX0=0;                                                        //INTO2»ÔêDíÖD¶Ï
  105.                 ET0=0;                                                        //¼Æê±Æ÷02»ÔêDíÖD¶Ï
  106.                 TR0=0;                                                        //¼Æê±Æ÷02»1¤×÷        
  107.                 EA=0;                                                          //×ü¿a1Ø1رÕ
  108.                 trig=1;                                                        //¸ßμçÆ½
  109.                 delay20();
  110.                 trig=0;
  111.                 while(echo==0);
  112.                 EX0=1;
  113.                 EA=1;
  114.                 TH0=0;           
  115.                 TL0=0;
  116.                 ET0=1;
  117.                 TR0=1;
  118.                 while(TH0<30);
  119.                 EA=0;
  120.                 if(succeed_flag==1)
  121.                 {
  122.                         x=H*256+L;   
  123.                         x=(x*1.87)/100;
  124.                 }
  125.                 if(succeed_flag==0)
  126.                 {
  127.                         x=0;                    
  128.                   test=!test;                     
  129.     }
  130.                 return x;
  131. }
  132. void main()
  133. {
  134.         while(1)
  135.         {
  136.                 if(A==0)
  137.                 {
  138.                         delay(20);
  139.                         if(A==0)
  140.                         {
  141.                                 start();
  142.                                 ZHSC(x);
  143.                         }
  144.                 }

  145.         }
  146. }

  147. void zd()interrupt 0   //INT0中断函数
  148. {           
  149.         H=TH0;         
  150.         L=TL0;         
  151.         succeed_flag=1;      
  152.         EX0=0;           
  153. }
复制代码

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

使用道具 举报

沙发
ID:1 发表于 2019-1-19 13:36 | 只看该作者
您这个问题给的信息不全,估计是没人能回答得了的,先转移到冷门区了,自行点击编辑按钮补充一下吧,审核员会帮你重新转到热门问答区的
回复

使用道具 举报

板凳
ID:470469 发表于 2019-1-19 21:15 | 只看该作者
admin 发表于 2019-1-19 13:36
您这个问题给的信息不全,估计是没人能回答得了的,先转移到冷门区了,自行点击编辑按钮补充一下吧,审核员 ...

在哪里编辑啊,找了半天......没找到
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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