找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HC-RS04超声波测距程序

[复制链接]
ID:420736 发表于 2018-11-4 21:20 | 显示全部楼层 |阅读模式


单片机源程序如下:
  1. #include <reg52.h>
  2. unsigned char code digit[10]={"0123456789"};
  3. sbit BF = P0^7;
  4. sbit EN = P2^5;
  5. sbit RS = P1^0;
  6. sbit RW = P1^1;
  7. sbit DU = P2^6;
  8. sbit Ec = P3^2;
  9. sbit Tr = P1^5;
  10. unsigned char  JL=0,ge,shi,bai,FD;
  11. bit TimeUp=0;
  12. void delay1ms()
  13. {
  14.    unsigned char i,j;      
  15.          for(i=0;i<4;i++)
  16.           for(j=0;j<33;j++)
  17.            ;                 
  18. }
  19. void delaynms(unsigned char n)
  20. {
  21.    unsigned char i;
  22.         for(i=0;i<n;i++)
  23.            delay1ms();
  24. }
  25. void wait(void)  //读数据
  26. {
  27. P0 = 0xFF;
  28.     do
  29.         {
  30.                 RS = 0;
  31.                 RW = 1;
  32.                 EN = 0;
  33.                 EN = 1;
  34.         }while (BF== 1);
  35.         EN = 0;         
  36. }


  37. void w_dat(unsigned char dat)//写数据函数(写行动结果)
  38. {
  39.         wait();
  40.         EN=0;      
  41.         P0=dat;
  42.         RS=1;
  43.         RW=0;
  44.         EN=1;
  45.         EN=0;
  46. }
  47. void w_cmd(unsigned char cmd)
  48. {
  49.         wait();
  50.         EN=0;
  51.         P0=cmd;
  52.         RS=0;
  53.         RW=0;
  54.         EN=1;
  55.         EN=0;
  56. }
  57. void Init_LCD1602(void)
  58. {
  59.         w_cmd(0x38);
  60.         w_cmd(0x0c);
  61.         w_cmd(0x06);
  62.         w_cmd(0x01);
  63. }
  64. void main()
  65. {
  66. Init_LCD1602();
  67. TMOD=0X01;
  68. //Tr=0;
  69. //TH0=0;
  70. //TL0=0;
  71. //TR0=0;
  72. TH0=0;
  73. TL0=0;
  74. EA=1;
  75. ET0=1;
  76. TR0=1;
  77. FD=TH0*256+TL0;
  78. TH0=0;
  79. TL0=0;
  80. JL=(1.87*FD)/100;
  81. bai=JL/100;
  82. shi=(JL/10)%10;
  83. ge=JL%10;
  84. //Tr=1;
  85. //for(i=0;i<20;i++);
  86. //Tr=0;
  87. //while(Ec==0);
  88. //TH0=0;
  89. //TL0=0;


  90. /*while(RxBack)
  91. {
  92.         if(Ec==0||TimeUp==1)
  93.         {
  94.                 TR0=0;
  95.                 TH0=0;
  96.                 TL0=0;
  97.                 TR0=1;
  98.                 RxBack=0;
  99.         }
  100. }
  101. while(!TimeUp);
  102. fd=((TH0*256+TL0)*1.87)/100;*/


  103.         while(1)
  104.         {
  105.         w_cmd(0x80);
  106.         w_dat(digit[bai]);
  107.            w_dat(digit[shi]);
  108.         w_dat(digit[ge]);
  109.         w_dat('c');
  110.         w_dat('m');
  111.         delaynms(2);
  112.         }         
  113. }


  114. void int0_0() interrupt        1
  115. {
  116. int i,RxBack=1;
  117. Tr=0;
  118. EA=1;
  119. ET0=1;
  120. TMOD=0X01;
  121. TR0=0;
  122. TH0=0;
  123. TL0=0;
  124. Tr=1;
  125. for(i=0;i<20;i++);
  126. Tr=0;
  127. while(Ec==0);
  128. TR0=1;
  129. TH0=0;
  130. TL0=0;
  131. while(RxBack)
  132. {
  133.         if(Ec==0||TimeUp==1)
  134.         {
  135.                 TR0=0;
  136.                 //TH0=0;
  137.                 //TL0=0;
  138.                 //TR0=1;
  139.                 RxBack=0;
  140.         }
  141. }
  142. //while(!TimeUp);
  143. FD=TH0*256+TL0;
  144. JL=(1.87*FD)/100;
  145. bai=JL/100;
  146. shi=JL%100/10;
  147. ge=JL%100%10;
  148. }
复制代码



回复

使用道具 举报

ID:407566 发表于 2018-11-8 10:20 | 显示全部楼层
那电路怎么接呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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