久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5753|回復: 4
打印 上一主題 下一主題
收起左側

動手制作超聲波測距板,為避障小車作準備

[復制鏈接]
跳轉到指定樓層
樓主
ID:76686 發表于 2015-4-11 19:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 dzdiy 于 2015-4-11 20:33 編輯

    就是這個超聲波測距,我有元件,只是不齊全,所以就買了一個測距模塊,制作了一個超聲波測距板。一切都用洞洞板焊,自己搭建電路,那樣學得到更多東西,用套件的話,學到的只是編程,硬件原理就會有空缺。自己自學單片機也有一段時間了,看來還是要檢測一下自己的能力才行,想來想去,覺得小車很不錯,如果我可以一獨立制作出自己的小車,哪是一件不錯的事,所以從今天起,我開始制作和編寫自己的小車,還是一步一步來哈。超聲波測距只是第一步。下載超聲波測距程序包



超聲波測距源程序: 超聲波測距模塊程序包.zip (28.17 KB, 下載次數: 31)
  1. #include<reg52.h>

  2. #include <intrins.h>

  3. #define uint unsigned int

  4. #define uchar unsigned char


  5. sbit trig=P1^5;//超聲波測距模塊//

  6. sbit echo=P3^2;

  7. bit flag1;//觸發信號標志位//


  8. sbit EN=P2^5;  //1602相關端口定義//

  9. sbit RS=P1^0;

  10. sbit RW=P1^1;

  11. sbit STA7=P0^7;


  12. uchar count;

  13. long int distance;//距離變量//


  14. //………………………………延時函數…………………………//

  15. void delayt(uint x)

  16. {

  17.     uchar j;

  18.     while(x-- > 0)

  19.     {

  20.      for(j = 0;j < 125;j++)

  21.         {

  22.             ;

  23.         }

  24.     }

  25. }


  26. //……………………LCD1602相關函數…………………………//

  27. void panmang()//1602判忙//

  28. {

  29. P0=0xff;

  30. do

  31. {

  32. RS=0;

  33. RW=1;

  34. EN=0;

  35. EN=1;

  36. }

  37. while(STA7==1);

  38. EN=0;

  39. }

  40. void w_data(uchar dat)//1602寫數據//

  41. {

  42. panmang();

  43. EN=0;

  44. P0=dat;

  45. RS=1;

  46. RW=0;

  47. EN=1;

  48. EN=0;

  49. }

  50. void w_cmd(uchar cmd)//1602寫指令//

  51. {

  52. panmang();

  53. EN=0;

  54. P0=cmd;

  55. RS=0;

  56. RW=0;

  57. EN=1;

  58. EN=0;

  59. }

  60. void init_1602()//1602初始化//

  61. {

  62. w_cmd(0x38);//設置16x2顯示,5x7點陣,8位數據接口//

  63. w_cmd(0x0c);//設置開顯示,光標不顯示,光標不閃爍//

  64. w_cmd(0x06);//設置當讀或寫一個字符后地址指針加1,且光標加1,整屏不移動//

  65. w_cmd(0x01);//清屏//

  66. w_cmd(0x80+0x40);

  67. w_data('D');

  68. w_data('i');

  69. w_data('s');

  70. w_data('t');

  71. w_data('a');

  72. w_data('n');

  73. w_data('c');

  74. w_data('e');

  75. w_data(':');

  76. w_cmd(0x80+0x4c);

  77. w_data('.');

  78. w_cmd(0x80+0x4e);//單位是厘米//

  79. w_data('c');

  80. w_data('m');

  81. }

  82. //……………………………………………定時器1初始化,用于計算響應信號時間……………………………………………//

  83. void init_t0()

  84. {

  85. TMOD = 0x01;  

  86.   TL0 = 0x66;

  87. TH0 = 0xfc;      //1ms

  88.     ET0 = 1;     

  89. EA = 1;      

  90. }

  91. //………………………………………觸發信號………………………………………//

  92. void trigger()

  93. {

  94. trig=1;

  95. delayt(1);

  96. trig=0;

  97. }

  98. //……………………………………………………初始化相應端口及變量…………………………………………………………//

  99. void init_measuring()

  100. {

  101. trig=0;

  102. echo=0;

  103. count=0;

  104. }

  105. //…………………………………………………………測距相關函數……………………………………………………………………//

  106. void measuring()

  107. {

  108. uchar l;

  109. uint h,y;

  110. TR0 = 1;

  111. while(echo)

  112.     {

  113.         ;

  114.     }

  115. TR0 = 0;

  116. l = TL0;

  117. h = TH0;

  118. y = (h << 8) + l;

  119. y = y - 0xfc66;//us部分

  120. distance = y + 1000 * count;//計算總時間,單位是微秒

  121. TL0 = 0x66;

  122. TH0 = 0xfc;

  123. delayt(30);

  124. distance = 3453* distance / 20000;//原始為:(0.34毫米/us)*時間/2//

  125. }

  126. //……………………………………………顯示函數………………………………………………………//

  127. void display(uint x)

  128. {

  129. uchar qian,bai,shi,ge;

  130. qian=x/1000;

  131. bai=(x/100)%10;

  132. shi=(x/10)%10;

  133. ge=x%10;

  134. w_cmd(0x80+0x49);//單位是厘米//

  135. w_data(qian+0x30);

  136. w_data(bai+0x30);

  137. w_data(shi+0x30);

  138. w_cmd(0x80+0x4d);

  139. w_data(ge+0x30);

  140. }

  141. //……………………………………………………主函數……………………………………………………//

  142. void main()

  143. {

  144. init_1602();

  145. init_t0();

  146. init_measuring();

  147. while(1)

  148. {

  149. trigger();

  150. while(echo==0)          //等待回聲

  151.          {

  152.              ;

  153.          }

  154. measuring();

  155. display(distance);

  156. init_measuring();

  157. delayt(600);//每次測量間隔60ms//

  158. }

  159. }

  160. //……………………………………………中斷服務函數…………………………………………………//

  161. void T_0()interrupt 1

  162. {

  163. TF0 = 0;

  164. TL0 = 0x66;

  165. TH0 = 0xfc;

  166. count++;

  167. if(count==18)

  168. {

  169. TR0 =0;

  170. TL0 = 0x66;

  171. TH0 = 0xfc;

  172. count = 0;

  173. }

  174. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:68477 發表于 2015-4-12 14:33 | 只看該作者
不錯。
回復

使用道具 舉報

板凳
ID:180024 發表于 2017-3-22 21:38 | 只看該作者
電路和焊接能發下嗎,小白傷不起
回復

使用道具 舉報

地板
ID:197204 發表于 2017-7-28 20:08 | 只看該作者
Orz123 發表于 2017-3-22 21:38
電路和焊接能發下嗎,小白傷不起

同上
回復

使用道具 舉報

5#
ID:329997 發表于 2018-5-16 22:27 | 只看該作者
可以發張接線的圖片么?新手不是很懂
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色欧美综合| 久久99国产精一区二区三区 | 亚洲精品成人 | 国内精品免费久久久久软件老师 | www久久久 | 午夜免费视频 | 亚洲中午字幕 | 成人av免费网站 | 九九久久在线看 | 亚洲一区精品在线 | 久久久久久亚洲精品 | 久草在线中文888 | 中文字幕不卡一区 | 亚洲精品一区二区在线观看 | 国产精品大片 | 久久亚洲国产精品 | 国产黄色大片在线免费观看 | 亚洲第一色av | 日韩欧美在线观看 | av一级毛片 | 极品久久 | 99久热在线精品视频观看 | 亚洲电影在线播放 | 看片91| 91精品国产自产精品男人的天堂 | 全免费a级毛片免费看视频免费下 | 91亚洲精品在线观看 | 久久高清 | 99精品视频在线观看 | 欧美激情在线精品一区二区三区 | 国产成人精品一区二区三区在线观看 | 久久鲁视频 | 亚洲欧美日韩电影 | 国产精品久久欧美久久一区 | 特级黄一级播放 | 久久精品国产久精国产 | 欧美一二区| 99热视| 欧美一区二区大片 | 日韩欧美中文在线 | 综合网视频 |