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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15536|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

HC-SR04超聲波測距模塊接線圖和程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:211103 發(fā)表于 2017-6-14 13:14 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
接線圖:


單片機程序:
  1. #include <AT89X52.h>       //調(diào)用51單片機的頭文件
  2. #include <intrins.h>
  3. #include <math.h>
  4. //---------------------------------------
  5. //1602液晶相關(guān)I/O設(shè)置
  6. sbit E=P2^3;               //1602液晶的E腳接在P2.3口上
  7. sbit RW=P2^4;              //1602液晶的RW腳接在P2.4口上
  8. sbit RS=P2^5;              //1602液晶的RS腳接在P2.5口上
  9. //---------------------------------------
  10. //---------------------------------------
  11. //HC-SR04相關(guān)I/O設(shè)置
  12. sbit TIRG=P3^4;                   //定義IO口,具體可以去查看原理圖
  13. sbit ECHO=P3^2;                   //定義IO口,具體可以去查看原理圖        
  14. //---------------------------------------         
  15. bit      flag =0;
  16. unsigned char k;
  17. //---------------------------------------
  18. //名稱:1602液晶用延時函數(shù)
  19. //---------------------------------------
  20. void Delay1602(unsigned int t)
  21. {
  22.      unsigned int k;      //定義一個16位寄存器用來做延時用
  23.      for(k=0;k<t;k++);    //延時
  24. }

  25. //---------------------------------------
  26. //名稱:1602液晶忙檢測函數(shù)
  27. //---------------------------------------
  28. void LCD1602_busy(void)
  29. {
  30.      P0_7=1;              //將P0.7置1,為讀狀態(tài)做準備
  31.      RS=0;                //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
  32.      RW=1;                //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
  33.      E=1;                 //RS=0、RW=1、E=1時,忙信號輸出到DB7,由P0.7讀入
  34.      while(P0_7==1);      //由P0.7讀入1,表示1602液晶忙,需要等待
  35.      E=0;                 //讀完以后,恢復(fù)E的電平
  36. }

  37. //---------------------------------------
  38. //名稱:1600寫命令函數(shù)
  39. //---------------------------------------
  40. void LCD1602_Write_com(unsigned char combuf)
  41. {
  42.      RS=0;                //選擇指令寄存器
  43.      RW=0;                //選擇寫狀態(tài)
  44.      P0=combuf;           //將命令字通過P0口送至DB
  45.      E=1;                 //E高電平將命令字寫入1602液晶
  46.      E=0;                 //寫完以后,恢復(fù)E的電平
  47. }

  48. //---------------------------------------
  49. //名稱:1602寫命令函數(shù)(帶忙檢測)
  50. //---------------------------------------
  51. void LCD1602_Write_com_busy(unsigned char combuf)
  52. {
  53.      LCD1602_busy();            //調(diào)用忙檢測函數(shù)
  54.      LCD1602_Write_com(combuf); //調(diào)用忙檢測函數(shù)
  55. }

  56. //---------------------------------------
  57. //名稱:1602寫數(shù)據(jù)函數(shù)(帶忙檢測)
  58. ------------------------
  59. void LCD1602_Write_data_busy(unsigned char databuf)
  60. {
  61.      LCD1602_busy();      //調(diào)用忙檢測函數(shù)
  62.      RS=1;                //選擇數(shù)據(jù)寄存器
  63.      RW=0;                //選擇寫狀態(tài)
  64.      P0=databuf;          //將命令字通過P0口送至DB
  65.      E=1;                 //E高電平將命令字寫入1602液晶
  66.      E=0;                 //寫完以后,恢復(fù)E的電平
  67. }

  68. //---------------------------------------
  69. //名稱:1602液晶顯示地址寫函數(shù)
  70. //---------------------------------------
  71. void LCD1602_Write_address(unsigned char x,unsigned char y)
  72. {
  73.      x&=0x0f;             //列地址限制在0-15間
  74.      y&=0x01;             //行地址限制在0-1間
  75.      if(y==0)             //如果是第一行
  76.          LCD1602_Write_com_busy(x|0x80);        //將列地址寫入
  77.      else                 //如果是第二行
  78.          LCD1602_Write_com_busy((x+0x40)|0x80); //將列地址寫入
  79. }

  80. //---------------------------------------
  81. //名稱:1602液晶初始化函數(shù)
  82. //---------------------------------------
  83. void LCD1602_init(void)
  84. {
  85.      Delay1602(1500);               //調(diào)用延時函數(shù)
  86.      LCD1602_Write_com(0x38);       //8位數(shù)據(jù)總線,兩行顯示模式,5*7點陣顯示
  87.      Delay1602(500);                //調(diào)用延時函數(shù)
  88.      LCD1602_Write_com(0x38);       //8位數(shù)據(jù)總線,兩行顯示模式,5*7點陣顯示
  89.      Delay1602(500);                //調(diào)用延時函數(shù)
  90.      LCD1602_Write_com(0x38);       //8位數(shù)據(jù)總線,兩行顯示模式,5*7點陣顯示
  91.      LCD1602_Write_com_busy(0x38);  //8位數(shù)據(jù)總線,兩行顯示模式,5*7點陣顯示
  92.      LCD1602_Write_com_busy(0x08);  //顯示功能關(guān),無光標
  93.      LCD1602_Write_com_busy(0x01);  //清屏
  94.      LCD1602_Write_com_busy(0x06);  //寫入新的數(shù)據(jù)后,光標右移,顯示屏不移動
  95.      LCD1602_Write_com_busy(0x0C);  //顯示功能開,無光標
  96. }

  97. //---------------------------------------
  98. //名稱:1602液晶指定地址顯示函數(shù)
  99. //---------------------------------------
  100. void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf)
  101. {
  102.      LCD1602_Write_address(x,y);    //先將地址信息寫入
  103.      LCD1602_Write_data_busy(buf);  //再寫入要顯示的數(shù)據(jù)
  104. }
  105. //---------------------------------------
  106. //名稱:定時器0中斷服務(wù)程序
  107. //---------------------------------------
  108. void Timer0(void) interrupt 1
  109. {                       
  110.    //***此處用戶自行添加定時器T0中斷處理程序***
  111.         flag=0;
  112.    //******************************************
  113. }
  114. //---------------------------------------
  115. //名稱: 主函數(shù)
  116. -----------------------
  117. void main(void)            //主函數(shù),單片機開機后就是從這個函數(shù)開始運行
  118. {
  119.         long S;
  120.         unsigned int i;
  121.         unsigned int  Timeout;
  122.    LCD1602_init();        //調(diào)用1602液晶初始化函數(shù)
  123.         //***定時器Timer0初始化***
  124.    TMOD&=0xF0;                    //將TMOD的低4位定時器0控制部分清零
  125.    TMOD|=0x01;                    //設(shè)置定時器0為方式1
  126.         TMOD=0x01;
  127.    TL0=0;                              //設(shè)置定時器0初值低8位
  128.    TH0=0;                              //設(shè)置定時器0初值高8位
  129.    TR0=0;                         //停止定時器0
  130.    ET0=1;                         //Timer0中斷允許
  131.    //**********************
  132.    //***開全局中斷設(shè)置****
  133.    //定時器Timer0設(shè)置了中斷允許,此處要開全局中斷
  134.    EA=1;                          //開全局中斷
  135.    //*********************
  136.         while(1)
  137.         {               
  138.                 TIRG=1;                                             //發(fā)一個脈沖觸發(fā)信號
  139.                   i=4;                                             //維持約17US,符合不低于10US的要求
  140.       while(i>0)                                  //維持約17US,符合不低于10US的要求
  141.               i--;                                     //維持約17US,符合不低于10US的要求               
  142.                   TIRG=0;                                             //撤銷觸發(fā)信號
  143.                 TR0=0;                                                //關(guān)閉定時器
  144.                 TL0=0;                             //設(shè)置定時器0初值低8位為0
  145.            TH0=0;                              //設(shè)置定時器0初值高8位為0
  146.                 k=0;                         //清除溢出標志
  147.                 flag=0;
  148.                 Timeout=0;
  149.            while((ECHO==0)&&((Timeout++)<50000));                                //等待回響高電平               
  150.            TR0=1;                                            //回響高電平來后啟動定時器
  151.                 Timeout=0;
  152.            while((ECHO==1)&&((Timeout++)<50000));                                //等待回響高電平結(jié)束后
  153.            TR0=0;                                                //關(guān)閉定時器
  154.       S=((TH0*256+TL0)*0.5425)/58;        
  155.                 if(flag==1||S>400)                //超出測量范圍顯示“-”
  156.                 {                                                         
  157.                            LCD1602_Disp(0, 0, '-');                                  //顯示百位-
  158.                            LCD1602_Disp(1, 0, '-');                                  //顯示十位-
  159.                            LCD1602_Disp(2, 0, '-');                                  //顯示個位-
  160.                            LCD1602_Disp(3, 0, 'C');                                  //顯示C
  161.                            LCD1602_Disp(4, 0, 'M');                                //顯示M
  162.                 }
  163.                 else                                                                  
  164.                 {                           
  165.                                 LCD1602_Disp(0, 0, S%1000/100+'0');                  //顯示百位
  166.                            LCD1602_Disp(1, 0, S%1000%100/10+'0');  //顯示十位
  167.                            LCD1602_Disp(2, 0, S%1000%100%10+'0');        //顯示個位
  168.                            LCD1602_Disp(3, 0, 'C');                                          //顯示C
  169.                            LCD1602_Disp(4, 0, 'M');                                        //顯示M
  170.                 }
  171.                 i=18000;                                          //維持約77400US,符合不低于60MS的要求
  172.       while(i>0)                                  //維持約77400US,符合不低于60MS的要求
  173.               i--;                                     //維持約77400US,符合不低于60MS的要求

  174.         }
  175. }



復(fù)制代碼



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

使用道具 舉報

沙發(fā)
ID:89286 發(fā)表于 2017-7-12 20:19 | 只看該作者
此帖僅作者可見

使用道具 舉報

板凳
ID:238009 發(fā)表于 2017-10-11 15:05 | 只看該作者
此帖僅作者可見

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va欧美va天堂v国产综合 | 久久亚洲综合 | 国产综合区| 日韩一区二区三区视频在线观看 | 欧美日韩亚洲国产 | 亚洲国产精品一区二区第一页 | 成人免费视频 | 亚洲免费在线播放 | 欧美高清成人 | 国产高清在线精品 | h视频免费在线观看 | 国产免费观看视频 | 亚洲精品一区二区三区四区高清 | 欧美精品1区2区3区 精品国产欧美一区二区 | 日日碰狠狠躁久久躁96avv | 成人精品视频在线观看 | 久久久精品一区二区三区 | 亚洲国产精品99久久久久久久久 | 国产成人精品午夜 | 2一3sex性hd | 国产精品国产三级国产aⅴ原创 | 免费国产视频在线观看 | 精品欧美乱码久久久久久 | 精品久久久久香蕉网 | 亚州精品成人 | 久草网站 | 精品一二区 | 狠狠干天天干 | 日韩国产高清在线观看 | 日韩欧美视频网站 | 久久久久久久一级 | 久久久久久国产 | 97精品国产97久久久久久免费 | 国产91av视频在线观看 | 日韩电影免费在线观看中文字幕 | а_天堂中文最新版地址 | 91高清视频| 岛国av免费看 | 黄色精品| 国产亚洲精品久久久优势 | 日本不卡视频 |