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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波測距單片機源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:207004 發表于 2017-6-2 10:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
超聲波測距源碼
超聲波測距源碼.docx (12.91 KB, 下載次數: 4)

  1. /**************************************************************************/
  2. *********采用IO口TRIG觸發測距,給至少10us的高電平信號; (2)模塊自動發送8個40khz
  3. 的方波,自動檢測是否有信號返回; (3)有信號返回,通過IO口ECHO輸出一個高電平,
  4. 高電平持續的時間就是超聲波從發射到返回的時間。*****************************/
  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;  //數碼管段先端
  13. sbit wela=P2^7;  //數碼管位先端
  14. /***********************************************/
  15. /**********超聲波檢測引腳和變量定義*******************************/
  16. sbit Trig=P2^4;//  定義HC-SR04發送端
  17. sbit Echo=P2^5;//定義HC-SR04接收端
  18. uint gewei='0';  //測量距離的個位
  19. uint shiwei='0';  // 測量距離的十位
  20. uint baiwei='0';  //測量距離的百位
  21. uint s,time,flag;
  22. /***********************************************/
  23. /**********延時MS函數*******************************/
  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. /**********延時uS函數*******************************/
  32. void delay_uS(uint z)
  33. {
  34. while(z--);
  35. }
  36. /***********************************************/
  37. /**********寫命令*******************************/
  38. void write_com(uchar com)
  39. {
  40. lcdrs=0;    //寫命令信號
  41. P0=com;     //寫命令字
  42. delay(5);    //延時
  43. lcden=1;    //開使能端
  44. delay(5);
  45. lcden=0;
  46. }
  47. /***********************************************/
  48. /**********寫數據*******************************/
  49. void write_data(uchar date)
  50. {
  51. lcdrs=1;    //寫數據信號
  52. P0=date;    //寫數據
  53. delay(5);    //延時
  54. lcden=1;  //開使能端
  55. delay(5);
  56. lcden=0;
  57. }
  58. /**********************************************/
  59. /***********************************************/
  60. /**********LCD1602初始化函數*******************************/
  61. void init()
  62. {
  63. dula=0;
  64. wela=0;
  65. lcden=0;
  66. write_com(0x38); //設置16X2顯示,5X7點陣顯示
  67. write_com(0x0c);  //開顯示,不顯光標
  68. write_com(0x06);  //顯示一個字符后,地址指針加1且光標加1
  69. write_com(0x01);  //清屏
  70. write_com(0x80+0x01); //從第一行0X10地址位開始顯示
  71. }
  72. /***********************************************/
  73. /**********計算距離函數*******************************/
  74. void count(void)
  75. {
  76. time=TH0*256+TL0;   //檢測所需時間
  77. TH0=0;
  78. TL0=0;
  79. s=time/58;//  計算距離,算出來的單位是CM
  80.   gewei=table[s%1000];
  81. shiwei=table[s%1000/100];
  82. baiwei=table[s%1000%100%10];
  83. }
  84. /***********************************************/
  85. /**********T0中斷函數*******************************/
  86. void Time0() interrupt 1 //T0中斷用作計數器溢出,超出測距范圍
  87. {
  88. flag=1; //中斷溢出標志
  89. }
  90. /***********************************************/
  91. /**********啟動模塊函數*******************************/
  92. void startmodle(void)  //啟動檢測模塊
  93. {
  94. Trig=1;     //啟動一次檢測模塊
  95. delay_uS(20);
  96. Trig=0; //停止向檢測模塊Trig端發送高電平
  97. }
  98. /***********************************************/
  99. /**********中斷初始化函數*******************************/
  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;       // 開啟總中斷
  107. }
  108. /***********************************************/
  109. /**********顯示函數*******************************/
  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. /**********主函數*******************************/
  125. void main(void)
  126. {
  127. init();     //初始化LCD1602
  128. while(1)
  129. {
  130.   InterruptInit();   //中斷初始化
  131.   startmodle();      // 啟動檢測模塊
  132.   while(!Echo);      //當接收為零時等待
  133.   TR0=1;             //開啟計數
  134.   while(Echo);       //當接收為1計數并等待
  135.   TR0=0;             //關閉計數
  136.   count();           //計算距離
  137.   Display();         // 顯示距離,以M為單位
  138.   delay(500);       //延時80MS
  139. }
  140. }
復制代碼


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

使用道具 舉報

沙發
ID:207004 發表于 2017-6-2 13:35 | 只看該作者
歡迎大家來討論
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费视频 | 国产一区二区三区四区hd | 色婷婷综合网 | 真人毛片 | 国产99久久| 国产一区二区高清在线 | 99久久久无码国产精品 | 韩日视频在线观看 | 中文字幕1区2区 | 超碰91在线 | 狠狠热视频 | 国产精品99精品久久免费 | 国产精品视频网站 | 欧美视频免费在线 | 国产一区二区观看 | 亚洲高清在线 | 婷婷久久网| 国产成人精品一区二区三区四区 | 一区二区在线不卡 | 国产网站在线播放 | 一区二区三区国产好的精 | 精品久草 | 精品一区二区三区在线观看 | 天天干天天爽 | 奇米在线| 久久久久国产一级毛片高清网站 | 国产精品美女久久久久久久网站 | 黑人巨大精品欧美黑白配亚洲 | 成年视频在线观看福利资源 | 成年人在线观看 | 在线观看中文字幕视频 | 亚洲一区视频在线 | 国产精品综合一区二区 | 欧美一区二区三区在线观看 | 欧美日韩精品一区二区三区四区 | 久热久 | 区一区二在线观看 | 中文字幕视频在线观看 | 超碰97av| 久久精品欧美一区二区三区不卡 | 亚洲狠狠丁香婷婷综合久久久 |