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

標題: 超聲波測距單片機源碼 [打印本頁]

作者: jlqiu    時間: 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. }
復制代碼



作者: jlqiu    時間: 2017-6-2 13:35
歡迎大家來討論




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩一 | 日韩精品久久久 | 精品一二区 | 成人精品一区亚洲午夜久久久 | 日日摸夜夜添夜夜添精品视频 | 亚洲欧美中文日韩在线v日本 | 91在线视频播放 | 久久成人在线视频 | 国产一区二区精品自拍 | 免费99精品国产自在在线 | 国产精品99久久久久久久久久久久 | 免费一区二区 | 一级全黄视频 | 午夜影院免费体验区 | 毛片黄 | 精品久久电影 | 国产h视频 | 亚洲精品一二区 | 午夜av电影 | 人人插人人 | 一级免费毛片 | 在线日韩欧美 | 精品久久久久久久久久久久久久久久久 | 拍戏被cao翻了h承欢 | 久久久久久999 | 成人一区av | 久久久久久久久久久一区二区 | 一级毛片网 | 毛片综合 | 不卡一区 | 天天干,夜夜操 | 亚洲欧美在线观看 | 亚洲一区二区三区四区av | 精精国产xxxx视频在线播放7 | 精品久 | 鸡毛片 | 欧美日韩亚洲国产 | 日本中文字幕一区 | 日韩中文字幕在线观看 | 色婷婷精品久久二区二区蜜臂av | 久久9999久久 |