打印
[STC单片机]

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

[复制链接]
1304|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,原理图等,代码等;代码有点乱,提供一部分看看,源代码在附件--------杰杰制作。





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

主函数部分
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");
//               
//         }

原理图 pcb.zip

210 Bytes

相关帖子

沙发
caijie001|  楼主 | 2017-2-1 11:42 | 只看该作者
代码

超声波测距代码.zip

111.84 KB

使用特权

评论回复
板凳
robter| | 2017-2-1 16:07 | 只看该作者
很好的资料,测距距离是多少?

使用特权

评论回复
地板
joy07wang| | 2017-2-2 08:07 | 只看该作者
感谢分享

使用特权

评论回复
5
caijie001|  楼主 | 2017-2-2 11:55 | 只看该作者
robter 发表于 2017-2-1 16:07
很好的资料,测距距离是多少?

4m左右

使用特权

评论回复
6
Kowalski| | 2017-2-2 13:34 | 只看该作者
感谢楼主分享~~~

使用特权

评论回复
7
zhoukaiyue| | 2017-2-13 21:04 | 只看该作者
感谢楼主分享

使用特权

评论回复
8
噻箩箩箩哩噻| | 2017-5-4 16:25 | 只看该作者
不错的代码!感谢楼主!

使用特权

评论回复
9
xumch| | 2017-5-6 23:33 | 只看该作者
感谢

使用特权

评论回复
10
hzyee| | 2021-2-24 11:50 | 只看该作者
楼主分享的资源已被取消···可否重发 邮箱452330550@qq.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

3790

帖子

63

粉丝