树莓派论坛

 找回密码
 立即注册

HC-SR04测距程序(调试通过)

树老大 发表于 2014-1-2 17:21:28 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. #include<string.h>
  3. #include <intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit shizhong=P0^1; //164 时钟线
  7. sbit shuju=P0^0; //164 数据线
  8. sbit chufa=P2^0; //触发信号输入端
  9. unsigned int PWMBJ,i,m,j,k,juli,juli1,juli2;
  10. unsigned char code szi[]={0XEE,0X82,0XDC,0XD6,0XB2,0X76,0X7E,0XC2,0XFE,0XF6};//控 制字 0~9
  11. uint T;
  12. void delay(uint z)//延时子程序 { uint x,y; for(x=10;x>0;x--) for(y=z;y>0;y--); }
  13. void xianshi(uint x,uint y) //显示子程序
  14. { char aa; int c; m=y%10;//个位
  15. k=y/10;//十位
  16. j=x%10;//次高位
  17. i=x/10;//最高位
  18. for (c=0;c<4;c++)//送四个数
  19. { if(c==0) aa=szi[i];
  20. else if(c==1) aa=szi[j];
  21. else if(c==2)
  22. aa=szi[k]&0xFE;
  23. else aa=szi[m];
  24. for(i=0;i<8;i++) //每个数送八位
  25. { shizhong=0; //产生下降沿
  26. shuju=aa&1;
  27. aa=aa>>1; //右移一位
  28. shizhong=1; }
  29. }
  30. delay(2000); }
  31. void main()
  32. {
  33. TMOD=0x19;
  34. EA=1; //开总中断
  35. TR0=1;//启动定时器 0
  36. EX0=1; //开外部中断 0
  37. IT0=1; //下降沿中断
  38. while(1)
  39. { chufa=1;
  40. _nop_();
  41. _nop_(); _
  42. nop_();
  43. _nop_(); _
  44. nop_();
  45. _nop_();
  46. _nop_();
  47. _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); chufa=0;
  48. juli=0.17*T;//计算距离()
  49. juli1=juli/100;//高二位
  50. juli2=juli%100;//第二位
  51. xianshi(juli1,juli2);//调用现实函数
  52. }
  53. }
  54. void int0()interrupt 0 //回响输出端高电平宽度测量 (上升沿到来时候开始计时, 下降沿到来 进入外部中断,关闭计时器,停止计时) { T=(TH0*256+TL0);//计算定时器内的测量值 TH0=0; //定时器清 0 TL0=0; }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )