找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 1593|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

超聲波測(cè)距單片機(jī)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:207004 發(fā)表于 2017-6-2 10:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
超聲波測(cè)距源碼
超聲波測(cè)距源碼.docx (12.91 KB, 下載次數(shù): 4)

  1. /**************************************************************************/
  2. *********采用IO口TRIG觸發(fā)測(cè)距,給至少10us的高電平信號(hào); (2)模塊自動(dòng)發(fā)送8個(gè)40khz
  3. 的方波,自動(dòng)檢測(cè)是否有信號(hào)返回; (3)有信號(hào)返回,通過(guò)IO口ECHO輸出一個(gè)高電平,
  4. 高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。*****************************/
  5. #include"reg52.h"
  6. #include"intrins.h"
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};// 顯示段碼值0123456789
  10. sbit lcden=P3^4; //定義LCD使能端
  11. sbit lcdrs=P3^5; //定義LCD讀寫端
  12. sbit dula=P2^6;  //數(shù)碼管段先端
  13. sbit wela=P2^7;  //數(shù)碼管位先端
  14. /***********************************************/
  15. /**********超聲波檢測(cè)引腳和變量定義*******************************/
  16. sbit Trig=P2^4;//  定義HC-SR04發(fā)送端
  17. sbit Echo=P2^5;//定義HC-SR04接收端
  18. uint gewei='0';  //測(cè)量距離的個(gè)位
  19. uint shiwei='0';  // 測(cè)量距離的十位
  20. uint baiwei='0';  //測(cè)量距離的百位
  21. uint s,time,flag;
  22. /***********************************************/
  23. /**********延時(shí)MS函數(shù)*******************************/
  24. void delay(uint z)
  25. {
  26. uint x,y;
  27. for(x=z;x>0;x--)
  28.   for(y=110;y>0;y--);
  29. }
  30. /***********************************************/
  31. /**********延時(shí)uS函數(shù)*******************************/
  32. void delay_uS(uint z)
  33. {
  34. while(z--);
  35. }
  36. /***********************************************/
  37. /**********寫命令*******************************/
  38. void write_com(uchar com)
  39. {
  40. lcdrs=0;    //寫命令信號(hào)
  41. P0=com;     //寫命令字
  42. delay(5);    //延時(shí)
  43. lcden=1;    //開(kāi)使能端
  44. delay(5);
  45. lcden=0;
  46. }
  47. /***********************************************/
  48. /**********寫數(shù)據(jù)*******************************/
  49. void write_data(uchar date)
  50. {
  51. lcdrs=1;    //寫數(shù)據(jù)信號(hào)
  52. P0=date;    //寫數(shù)據(jù)
  53. delay(5);    //延時(shí)
  54. lcden=1;  //開(kāi)使能端
  55. delay(5);
  56. lcden=0;
  57. }
  58. /**********************************************/
  59. /***********************************************/
  60. /**********LCD1602初始化函數(shù)*******************************/
  61. void init()
  62. {
  63. dula=0;
  64. wela=0;
  65. lcden=0;
  66. write_com(0x38); //設(shè)置16X2顯示,5X7點(diǎn)陣顯示
  67. write_com(0x0c);  //開(kāi)顯示,不顯光標(biāo)
  68. write_com(0x06);  //顯示一個(gè)字符后,地址指針加1且光標(biāo)加1
  69. write_com(0x01);  //清屏
  70. write_com(0x80+0x01); //從第一行0X10地址位開(kāi)始顯示
  71. }
  72. /***********************************************/
  73. /**********計(jì)算距離函數(shù)*******************************/
  74. void count(void)
  75. {
  76. time=TH0*256+TL0;   //檢測(cè)所需時(shí)間
  77. TH0=0;
  78. TL0=0;
  79. s=time/58;//  計(jì)算距離,算出來(lái)的單位是CM
  80.   gewei=table[s%1000];
  81. shiwei=table[s%1000/100];
  82. baiwei=table[s%1000%100%10];
  83. }
  84. /***********************************************/
  85. /**********T0中斷函數(shù)*******************************/
  86. void Time0() interrupt 1 //T0中斷用作計(jì)數(shù)器溢出,超出測(cè)距范圍
  87. {
  88. flag=1; //中斷溢出標(biāo)志
  89. }
  90. /***********************************************/
  91. /**********啟動(dòng)模塊函數(shù)*******************************/
  92. void startmodle(void)  //啟動(dòng)檢測(cè)模塊
  93. {
  94. Trig=1;     //啟動(dòng)一次檢測(cè)模塊
  95. delay_uS(20);
  96. Trig=0; //停止向檢測(cè)模塊Trig端發(fā)送高電平
  97. }
  98. /***********************************************/
  99. /**********中斷初始化函數(shù)*******************************/
  100. void InterruptInit(void)  //中斷初始化
  101. {
  102. TMOD=0x01;  //高T0工作方式為方式1,GATE=1
  103. TH0=0;
  104. TL0=0;
  105. ET0=1;      //允許T0中斷
  106. EA=1;       // 開(kāi)啟總中斷
  107. }
  108. /***********************************************/
  109. /**********顯示函數(shù)*******************************/
  110. void Display(void)
  111. {
  112.   write_com(0x80+0x02);
  113.   write_data(baiwei);
  114.   write_com(0x80+0x03);
  115.   write_data('.');
  116.   write_com(0x80+0x04);
  117.   write_data(shiwei);
  118.   write_com(0x80+0x05);
  119.   write_data(gewei);
  120.   write_com(0x80+0x06);
  121.   write_data('M');
  122. }
  123. /***********************************************/
  124. /**********主函數(shù)*******************************/
  125. void main(void)
  126. {
  127. init();     //初始化LCD1602
  128. while(1)
  129. {
  130.   InterruptInit();   //中斷初始化
  131.   startmodle();      // 啟動(dòng)檢測(cè)模塊
  132.   while(!Echo);      //當(dāng)接收為零時(shí)等待
  133.   TR0=1;             //開(kāi)啟計(jì)數(shù)
  134.   while(Echo);       //當(dāng)接收為1計(jì)數(shù)并等待
  135.   TR0=0;             //關(guān)閉計(jì)數(shù)
  136.   count();           //計(jì)算距離
  137.   Display();         // 顯示距離,以M為單位
  138.   delay(500);       //延時(shí)80MS
  139. }
  140. }
復(fù)制代碼


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:207004 發(fā)表于 2017-6-2 13:35 | 只看該作者
歡迎大家來(lái)討論
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表