找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1858|回复: 0
收起左侧

超声波测距模块的单片机源码

[复制链接]
ID:308567 发表于 2018-4-15 14:40 | 显示全部楼层 |阅读模式
超声波测距模块

单片机源程序如下:
  1. /*******************************************************************************
  2. * 日期           : 2015.7.29
  3. * 实 验 名                 : 1602 显示 超声波 返回距离值         
  4. * 实验说明       : 1.基于22.1184MHz晶振
  5. * 注    意                 : 用本程序扫描得出最大距离为 60 厘米  最小为 2 厘米
  6.                                    扫描周期60ms以上 并将 扫描标志位        设置在 u_speed()函数 后面
  7. -----------------------------------------------------------------------------------
  8. * 修改内容       :
  9. *******************************************************************************/

  10. #include <reg52.h>
  11. #include "Ultrasonic.h"
  12. #include "1602.h"
  13. #define LED P0
  14. #define LED_SEL P2


  15. static char flag = 0;
  16. unsigned char code LED_num []={                            //共阴                          
  17.                                 0x3f,0x06,0x5b,0x4f,0x66,
  18.                                 0x6d,0x7d,0x07,0x7f,0x6f} ;

  19. unsigned char code place[]={0x00,0x01,0x02,0x03} ;

  20. void t_init();                                                            //中断初始化

  21. int main()
  22. {
  23.         unsigned int re_1 = 0, re_2 = 0;
  24.     unsigned char time = 0;
  25.     unsigned char index = 0;
  26.     unsigned int length = 0;
  27.         t_init();                                                          

  28. //    Lcd1602_Int ();                                                          

  29. //        writecom(0x80 + 3);
  30. //        writedata('0');
  31. //        writedata('0');
  32. //        writedata('0');
  33. //    writedata('0');
  34. //        writedata(' ');
  35. //        writedata('M');
  36. //        writedata('M');
  37.    
  38.         while(1)
  39.         {
  40.                 if(flag == 1)                                          //80ms 为一次超声波扫描周期
  41.                 {       
  42.             time++;
  43.             flag = 0;
  44.             
  45. //            writecom(0x80 + 3);
  46. //            writedata('0' + re_1%10000/1000);
  47. //                        writedata('0' + re_1%1000/100);
  48. //                        writedata('0' + re_1%100/10);
  49. //                        writedata('0' + re_1%10/1);       
  50.             
  51.             
  52.             switch(index)
  53.             {
  54.                 case 0:LED_SEL = place[0] ; LED = LED_num[length%10000/1000];break;
  55.                 case 1:LED_SEL = place[1] ; LED = LED_num[length%1000/100];break;
  56.                 case 2:LED_SEL = place[2] ; LED = LED_num[length%100/10];break;
  57.                 case 3:LED_SEL = place[3] ; LED = LED_num[length%10/1];break;
  58.                 default : ;
  59.             }
  60.             if(index<3)
  61.             {
  62.                 index++;
  63.             }
  64.             else
  65.             {
  66.                 index = 0;
  67.             }
  68.                        
  69.                 }
  70.         
  71.         if(time == 7)
  72.         {
  73.             time = 0;
  74.             TR1 = 0;
  75.             //length = u_range();             //扫描标志位要放在返回值后面, u_range()函数 执行有点长 影响测量周期
  76.             re_1 = length;
  77.             TR1 = 1;
  78.         }

  79.         }

  80.         return 0;
  81. }

  82. void t_init()
  83. {               
  84.         TMOD = 0X11;
  85.        
  86.     TH1 = 0x0B8;        //定时10ms   
  87. ……………………

  88. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
超声波测距.rar (54.72 KB, 下载次数: 6)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表