[STC单片机] 基于60s2的超声波测距系统/倒车测距系统

[复制链接]
1975|9
 楼主| caijie001 发表于 2017-2-1 11:40 | 显示全部楼层 |阅读模式
本帖最后由 caijie001 于 2017-2-1 11:47 编辑

在学校做的超声波测距,刚刚接触一年的51,起码得做点什么东西出来,所以自行设计了超声波测距系统/倒车系统测距系统,也来分享一下给大家,本系统以STC12C5A60S2作为核心板,以某宝上买的超声波模块作为检测模块,以oled屏幕作为显示文字、数字、英文、等等、用有源蜂鸣器作为报警器,红色直插LED顺便作为提示,兼容5——12V供电,引出io口,方便以后当做最小系统使用,方便兼容多个其他模块,(自行脑补)。。。。带复位,下载口,,正常工作时候oled显示:“xxx超声波测距,距离xxxCM”,蜂鸣器不响,绿色LED亮,红色灭,当距离小于xxxCM时,蜂鸣器象棋警报,红色LED亮起,绿色灭,大致就是这样。系统为本人亲自制作,单层板,上图。还有pcb,原理图等,代码等;代码有点乱,提供一部分看看,源代码在附件--------杰杰制作。





下载请回复下,祝大家身体健康学习进步,么么哒

  1. 主函数部分
  2. void main()
  3. {
  4.          
  5.   gg=0;
  6.         UartInit();
  7.         OLED_Init();
  8.         TMOD=0x11;                   //设T0为方式1,GATE=1;
  9.         TH0=0;
  10.         TL0=0;         
  11.         TH1=0xf8;                   //2MS定时
  12.         TL1=0x30;
  13.         ET0=1;             //允许T0中断
  14.         ET1=1;                           //允许T1中断
  15.         TR1=1;                           //开启定时器
  16.         EA=1;                           //开启总中断

  17.         while(1)
  18.         {
  19.          while(!RX);                //当RX为零时等待
  20.          TR0=1;                            //开启计数
  21.          while(RX);                        //当RX为1计数并等待
  22.          TR0=0;                                //关闭计数
  23.    Conut();
  24.    display();                //计算
  25.         }

  26. }
  27. void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  28.   {
  29.     flag=1;                                                         //中断溢出标志
  30.   }
  31. /********************************************************/
  32.    void  zd3()  interrupt 3                  //T1中断用来扫描数码管和计800MS启动模块
  33.   {
  34.          TH1=0xf8;
  35.          TL1=0x30;
  36. //        display();
  37.          timer++;
  38.          if(timer>=400)
  39.          {
  40.           timer=0;
  41.           TX=1;            
  42.           _nop_();
  43.           _nop_();
  44.           _nop_();
  45.           _nop_();
  46.           _nop_();
  47.           _nop_();
  48.           _nop_();
  49.           _nop_();
  50.           _nop_();
  51.           _nop_();
  52.           _nop_();
  53.           _nop_();
  54.           _nop_();
  55.           _nop_();
  56.           _nop_();
  57.           _nop_();
  58.           _nop_();
  59.           _nop_();
  60.           _nop_();
  61.           _nop_();
  62.           _nop_();
  63.                 _nop_();
  64.           _nop_();
  65.         _nop_();
  66.           _nop_();
  67.                         _nop_();
  68.           _nop_();

  69.           TX=0;
  70.          }
  71.   }

  72. /*****************************************************************************
  73. 函 数 名  : LED_Init
  74. 功能描述  : OLED初始化
  75. 输入参数  : VOID  
  76. 输出参数  : NONE
  77. 返 回 值  : NONE
  78. 备    注  :详细请参考0.96inch_LDR128064B2B201 9.5 Recommanded Software Initialization
  79. *****************************************************************************/
  80. void OLED_Init(void)      
  81. {
  82.     unsigned char i;

  83.     SCL_OLED = 1;      
  84.     RST = 0;
  85.     for(i = 0; i < 100; i++)
  86.         {
  87.                 ;                      //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕   
  88.     }     
  89.     RST = 1;

  90.     SetDisplayOnOff(0);        // 关显示 (0:关显示/1:开显示)
  91.     SetDisplayClock(0x80);     // 设置时钟为100Frames/Sec ,0x80为缺省值
  92.     SetMultiplexRatio(0x3F);   // 1/64 Duty (0x0F~0x3F)
  93.     SetDisplayOffset(0x00);    // 垂直显示无偏移 (0x00~0x3F)
  94.     SetStartLine(0x00);        // 设置映射内容显示的起始行(0x00~0x3F)
  95.     SetChargePump(1);          // 使能内部DC/DC转换(0x00/0x04)
  96.     SetAddressMode(0x02);      // 设置为页地址模式 (0x00/0x01/0x02)
  97.     SetSegmentRemap(0x01);     // Segment重映射;  0x00左右反置 0x01正常
  98.     SetCommonRemap(0x01);      // 设置COM扫描方向  0x00上下反置 0x08正常
  99.     SetCommonConfig(0x10);     // 设置com序列的配置 (0x00/0x10)
  100.     SetContrast(0x7F);         // 设置对比度
  101.     SetPrechargePeriod(0xF1);  // 设置预充电周期为15个时钟,放电周期为1个时钟周期
  102.     SetVCOMH(0x40);            // 设置COM端电平等级
  103.     SetEntireDisplay(0);       // 正常显示(0:正常显示/1:忽略显示)
  104.     SetInverseDisplay(0);      // 反白设置 (0:正常显示/1:反白显示)
  105.     SetDisplayOnOff(1);        // 开显示 (0:关显示/1:开显示)
  106.     FillScreen(0x00);            // 初始清屏,填充空白
  107. ///    SetPos(0,0);                   //并将位置设置在0页,0列

  108. }
  109.   


  110. /*oled显示*/
  111. void display()
  112. {
  113.          
  114.         WriteChinese16x16(0,0,"杰杰号超声波测距");
  115.    PrintNum_8x16(2,60,qian);
  116.          PrintNum_8x16(2,70,bai);
  117.          PrintNum_8x16(2,80,shi);
  118. //         PrintNum_8x16(2,90,ge);
  119.         WriteMixStrXx16(2,10,"距离:");
  120.         WriteMixStrXx16(2,97,"CM");
  121.         bee=1;
  122.   d1=0;
  123.         d2=1;
  124. if(S<5)
  125. {
  126.         delay(5);
  127.         if(S<5)
  128. {
  129.         d1=1;
  130.         bee=0;//蜂鸣器暴警红灯亮
  131.         d2=0;
  132. }
  133. }
  134. //if(S>50)
  135. //{
  136. //        bee=1;
  137. //  d1=0;
  138. //        d2=1;
  139. //}
  140. //        if((S>700)||flag==1) //超出测量范围显示“-”
  141. //         {      
  142. //                flag=0;
  143. //          bee=0;
  144. //         WriteMixStrXx16(2,60,"xxxx");
  145. //               
  146. //         }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| caijie001 发表于 2017-2-1 11:42 | 显示全部楼层
代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
robter 发表于 2017-2-1 16:07 | 显示全部楼层
很好的资料,测距距离是多少?
joy07wang 发表于 2017-2-2 08:07 来自手机 | 显示全部楼层
感谢分享
 楼主| caijie001 发表于 2017-2-2 11:55 | 显示全部楼层
robter 发表于 2017-2-1 16:07
很好的资料,测距距离是多少?

4m左右
Kowalski 发表于 2017-2-2 13:34 | 显示全部楼层
感谢楼主分享~~~
zhoukaiyue 发表于 2017-2-13 21:04 | 显示全部楼层
感谢楼主分享
噻箩箩箩哩噻 发表于 2017-5-4 16:25 | 显示全部楼层
不错的代码!感谢楼主!
xumch 发表于 2017-5-6 23:33 | 显示全部楼层
hzyee 发表于 2021-2-24 11:50 | 显示全部楼层
楼主分享的资源已被取消···可否重发 邮箱452330550@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

3790

帖子

63

粉丝
快速回复 在线客服 返回列表 返回顶部
0