OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8246|回复: 5

基于60s2的超声波测距系统/倒车测距系统

[复制链接]

10

主题

71

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
金钱
1839
注册时间
2017-1-17
在线时间
37 小时
发表于 2017-1-31 23:46:35 | 显示全部楼层 |阅读模式
本帖最后由 caijie0513 于 2017-2-1 11:51 编辑

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



下载请回复下,祝大家身体健康学习进步,么么哒
[mw_shl_code=applescript,true]主函数部分
void main()
{
        
  gg=0;
        UartInit();
        OLED_Init();
        TMOD=0x11;                   //设T0为方式1,GATE=1;
        TH0=0;
        TL0=0;         
        TH1=0xf8;                   //2MS定时
        TL1=0x30;
        ET0=1;             //允许T0中断
        ET1=1;                           //允许T1中断
        TR1=1;                           //开启定时器
        EA=1;                           //开启总中断

        while(1)
        {
         while(!RX);                //当RX为零时等待
         TR0=1;                            //开启计数
         while(RX);                        //当RX为1计数并等待
         TR0=0;                                //关闭计数
   Conut();
   display();                //计算
        }

}
void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;                                                         //中断溢出标志
  }
/********************************************************/
   void  zd3()  interrupt 3                  //T1中断用来扫描数码管和计800MS启动模块
  {
         TH1=0xf8;
         TL1=0x30;
//        display();
         timer++;
         if(timer>=400)
         {
          timer=0;
          TX=1;            
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
                _nop_();
          _nop_();
        _nop_();
          _nop_();
                        _nop_();
          _nop_();

          TX=0;
         }
  }

/*****************************************************************************
函 数 名  : LED_Init
功能描述  : OLED初始化
输入参数  : VOID  
输出参数  : NONE
返 回 值  : NONE
备    注  :详细请参考0.96inch_LDR128064B2B201 9.5 Recommanded Software Initialization
*****************************************************************************/
void OLED_Init(void)        
{
    unsigned char i;

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

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

}



/*oled显示*/
void display()
{
        
        WriteChinese16x16(0,0,"杰杰号超声波测距");
   PrintNum_8x16(2,60,qian);
         PrintNum_8x16(2,70,bai);
         PrintNum_8x16(2,80,shi);
//         PrintNum_8x16(2,90,ge);
        WriteMixStrXx16(2,10,"距离:");
        WriteMixStrXx16(2,97,"CM");
        bee=1;
  d1=0;
        d2=1;
if(S<5)
{
        delay(5);
        if(S<5)
{
        d1=1;
        bee=0;//蜂鸣器暴警红灯亮
        d2=0;
}
}
//if(S>50)
//{
//        bee=1;
//  d1=0;
//        d2=1;
//}
//        if((S>700)||flag==1) //超出测量范围显示“-”
//         {        
//                flag=0;
//          bee=0;
//         WriteMixStrXx16(2,60,"xxxx");
//                 
//         }


[/mw_shl_code]

捕获.PNG
捕获1.PNG
捕获3.PNG
捕获4.PNG

代码.zip

111.84 KB, 下载次数: 707

原理图.zip

16.51 MB, 下载次数: 1584

看帖回复是一种美德
http://openedv.com/?fromuser=caijie0513
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

310

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
495
金钱
495
注册时间
2016-12-31
在线时间
63 小时
发表于 2017-3-12 13:49:24 | 显示全部楼层
最近也在看这个测距的传感器
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-2-27
在线时间
26 小时
发表于 2017-5-10 11:02:09 来自手机 | 显示全部楼层
距离多远?
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-3-21
在线时间
8 小时
发表于 2018-5-19 02:51:22 来自手机 | 显示全部楼层
距离有多少远?
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-9-9
在线时间
1 小时
发表于 2018-9-9 13:12:30 | 显示全部楼层
谢谢!
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2018-10-30
在线时间
22 小时
发表于 2018-11-18 09:05:26 | 显示全部楼层
附件里的代码不全啊。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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