基于单片机的车辆防碰撞及自动刹车系统

发布者:素心悠远最新更新时间:2022-04-02 来源: eefocus关键字:单片机  自动刹车系统 手机看文章 扫描二维码
随时随地手机看文章

本系统的目的是设计一个基于单片机的车辆防碰撞及自动刹车系统,系统通过对汽车行进过程中前后车距离的实时检测与过近声光报警功能有效的解决当前汽车行驶过程中由于驾驶员反应不及时导致跟车距离过近引发汽车追尾的问题;系统的基本任务如下:

 

(1)通过系统的设计与实现,能够解决汽车行进过程中由于驾驶员分心导致汽车碰撞的问题;

(2)构建型号为STC89C52RC的单片机最小工作电路,作为系统的中心处理单元,负责对超声传感器测得的距离值的接收,对液晶屏显示内容的控制,对声光报警电路及继电器电路的控制等;

(3)设置超声波传感器HC-SR04实现对在汽车行进过程中前后车之间的距离的实时采集;

(4)当采集的距离值小于设定的最小报警距离值时,声光报警电路工作,进行报警和提示;

(5)应用液晶屏1602实现对实时距离和设定的最小报警距离值的显示,对当前汽车继续行进的状态即安全与危险进行指示;

(6)系统设置独立按键电路,实现对系统设定的最小报警距离值进行设置,对系统的模式正常工作模式及休眠模式进行切换;

(7)构建1路继电器电路,通过继电器的吸合来实现对刹车装置自动开启动作的模拟;

(8)构建电源供电电路,满足系统的供电需求。

 

#include

 

#include    

 

#include"lcd.h"

 

sbit Trig = P2^1;

 

sbit Echo = P2^0;

 

sbit led_0 = P1^0;

 

sbit led_1 = P1^1;

 

sbit beep = P1^3;

 

sbit jdq = P1^4;


///按键模块//

 

sbit k1=P3^2;       //加法按键

 

sbit k2=P3^3;       //减法按键

 

sbit k3=P3^1;       //休眠按键

 

sbit k4=P3^0;      //复位按键

 


/

 

unsigned char PuZh[]="CM shi juli";

 

unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};

 

 

static unsigned char DisNum = 0; //显示用指针                  

 

       unsigned int  time=0;

 

       unsigned long S=0;

 

       bit      flag =0;

 

       unsigned char disbuff[4]       ={ 0,0,0,0,};

 

/*******************************************************************************

* 函 数 名         : main

* 函数功能           : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

 

void Conut(unsigned char q)

 

    {

 

     unsigned int anquanjuli = q;

 

     time=TH0*256+TL0;

 

     TH0=0;

 

     TL0=0;    

 

     S=(time*1.7)/100;     //算出来是CM

 

     if((S>=700)||flag==1) //超出测量范围显示“-”

 

     {     

 

      flag=0;

 

     

      DisplayOneChar(0, 1, ASCII[11]);

 

      DisplayOneChar(1, 1, ASCII[10]);    //显示点

 

      DisplayOneChar(2, 1, ASCII[11]);

 

      DisplayOneChar(3, 1, ASCII[11]);

 

      DisplayOneChar(4, 1, ASCII[12]);    //显示M

 

     }

 

     else

 

     {

 

      disbuff[0]=S%1000/100;

 

      disbuff[1]=S%1000%100/10;

 

      disbuff[2]=S%1000%10 %10;

 

      DisplayOneChar(0, 1, ASCII[disbuff[0]]);

 

      DisplayOneChar(1, 1, ASCII[10]);    //显示点

 

      DisplayOneChar(2, 1, ASCII[disbuff[1]]);

 

      DisplayOneChar(3, 1, ASCII[disbuff[2]]);

 

      DisplayOneChar(4, 1, ASCII[12]);    //显示M

 

     }

 

    if(S<=anquanjuli)  //小于安全距离就亮红灯且蜂鸣器响继电器工作

 

    {

 

         led_0=0;

 

         led_1=1;

 

         beep=0;

 

          jdq=0;

 

    }

 

    else if(S>anquanjuli&&S<=700) //处于安全范围内就亮绿灯蜂鸣器不响

 

    {

 

           led_0=1;

 

        led_1=0;

 

        beep=1;

 

        jdq=1;    

 

    }

 

 }

 

 

void Conut2(unsigned char q)

 

{

 

     unsigned int anquanjuli = q;

 

     time=TH0*256+TL0;

 

     TH0=0;

 

     TL0=0;

 

    

 

     S=(time*1.7)/100;     //算出来是CM

 

     if((S>=700)||flag==1) //超出测量范围显示“-”

 

     {     

 

      flag=0;

 

     

 

      DisplayOneChar(0, 1, ASCII[11]);

 

      DisplayOneChar(1, 1, ASCII[10]);    //显示点

 

      DisplayOneChar(2, 1, ASCII[11]);

 

      DisplayOneChar(3, 1, ASCII[11]);

 

      DisplayOneChar(4, 1, ASCII[12]);    //显示M

 

     }

 

     else

 

     {

 

      disbuff[0]=S%1000/100;

 

      disbuff[1]=S%1000%100/10;

 

      disbuff[2]=S%1000%10 %10;

 

      DisplayOneChar(0, 1, ASCII[disbuff[0]]);

 

      DisplayOneChar(1, 1, ASCII[10]);    //显示点

 

      DisplayOneChar(2, 1, ASCII[disbuff[1]]);

 

      DisplayOneChar(3, 1, ASCII[disbuff[2]]);

 

      DisplayOneChar(4, 1, ASCII[12]);    //显示M

 

     }

 

 

 

}

 

 

 

void zd0() interrupt 1          //T0中断用来计数器溢出,超过测距范围

 

  {

 

    flag=1;                             //中断溢出标志

 

  }

 

 

 

 void  StartModule()                  //启动模块

 

  {

 

      Trig=1;                                 //启动一次模块

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_();

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_(); 

 

      _nop_();

 

      Trig=0;

 

  }

 

 

 

 

 

 

 

void delayms(unsigned int ms)

 

{

 

    unsigned char i=100,j;

 

    for(;ms;ms--)

 

    {

 

        while(--i)

 

        {

 

            j=10;

 

            while(--j);

 

        }

 

    }

 

}

 

 

 

 

 

///

 

 

 

 

 

/*

字符串转十进制整形

*/

 

 

 

int atoi(char s[]) 

 

 

    int i; 

 

    int n = 0; 

 

    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) 

 

    { 

 

        n = 10 * n + (s[i] - '0'); 

 

    } 

 

    return n; 

 

 

///

 

void main(void)

 

{

    unsigned char safe[]={"10"};

 

//     unsigned char safe3[1]=0;

 

//     unsigned char safe4[1]=0;

 

//     unsigned char safe5[2]    = 0;

 

     unsigned char safe6[3]    = 0;

 

//

 

//     unsigned char safe2[]={'C','M'};

 

      unsigned int getdata= atoi(safe);

 

    unsigned int    a=0; ///个位

 

    unsigned int    b=0; 十位

 

    unsigned int    c=0; ///百位

 

 

//     unsigned char  *p=PuZh;

 

//   unsigned char *q=&safe[0];

 

//     unsigned char  *t=safe2;

 

 

     TMOD=0x01;           //设T0为方式1,GATE=1;

 

     TH0=0;

 

     TL0=0;          

 

     ET0=1;      //允许T0中断

 

     EA=1;               //开启总中断    

 

 

 

       InitLcd1602();

 

 

 

       /第一次显示//

 

                        a=getdata;

 

                      c=a/100;

 

                      b=a/10%10;

 

                      a=a%10;

 

                      safe6[0]=c+0x30;

 

                      safe6[1]=    b+0x30;

 

                      safe6[2]=a+0x30;

 

                      DisplayOneChar(0,0,safe6[0]);

 

                      DisplayOneChar(1,0,safe6[1]);

[1] [2] [3]
关键字:单片机  自动刹车系统 引用地址:基于单片机的车辆防碰撞及自动刹车系统

上一篇:基于单片机的智能照明控制系统设计
下一篇:基于单片机的LCD1602电子时钟设计

推荐阅读最新更新时间:2024-11-16 20:58

22-基于单片机的LED点阵滚动显示系统
具体实现功能 具体功能: (1)能根据汉字和英文的内码不同显示不同的汉字和英文字符,初始显示“电子工程师成长日记”; (2)可以多样化显示:从左到右,从右到左,从下到上,从上到下; (3)可以键盘控制显示花样; (4)可以利用“点阵LED字模生成工具”生成自己想要显示的字符。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4
[单片机]
22-基于<font color='red'>单片机</font>的LED点阵滚动显示<font color='red'>系统</font>
基于单片机和FPGA的多功能计数器的设计
1 引言 频率、周期、相位是交流信号的3大要素。一般情况下,分析交流信号需研究其频率与相位,而周期可直接由频率计算。对于正弦信号的频率、相位测量准确度的要求不断提高,而随着电子技术的发展,对其测量方法仍不断改进完善。较早采用直接频率测量的测频法,为了保证测试精度,一般低频信号采用测周期法,而高频信号采用测频法,测量很不方便。而相位测量最初采用测量信号一个周期参数的方法,该方法精度适用于低频,而高频时误差变大。该多功能计数器采用等精度测量法来测量信号频率,同时采用基于单片机和FPGA的计数相位测量方法完成精确相位测量,并能在液晶显示器实时显示当前信号的频率、周期和相位差。该计数器将正弦信号频率和相位的测量于一体,精度高,实用性强
[单片机]
基于<font color='red'>单片机</font>和FPGA的多功能计数器的设计
瑞萨MCU这几年的崛起之路
经常阅读我公公众号文章的小伙伴,应该看到了我今年分享关于瑞萨MCU的内容比较多。 再次,你会发现瑞萨电子这几年发展的比较迅猛,不管是线上还是线下的活动都特别多,还有不断涌现出新的MCU产品。 瑞萨MCU 我们先来说说我们接触最多的MCU,瑞萨MCU在这几年之中增加了多个系列、N个型号,可以说涵盖了低功耗、高性能、车规级、性价比等目前几乎市面上都有的各个领域的MCU。 我们先来看下官网目前在售的MCU情况: https://www.renesas.cn/zh/products/microcontrollers-microprocessors 目前有7大系列,包括: Cortex-M内核32位
[汽车电子]
51单片机外接ADC0808制作简易电压表
main.c #include reg52.h #define uchar unsigned char #define uint unsigned int sbit Start = P3^0; sbit EOC=P3^1; // sbit OE=P3^2 ; // uchar code table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段选 uchar code table_SMG = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选 //------------
[单片机]
51<font color='red'>单片机</font>外接ADC0808制作简易电压表
单片机(AT89C51)中断系统详解和中断系统应用实验
什么叫做单片机的中断? CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。 为什么要设置中断? ⑴ 提高CPU工作效率 ⑵ 具有实时处理功能 ⑶ 具有故障处理功能 ⑷ 实现分时操作 中断源 中断源是指能发出中断请求,引起中断的装置或事件。 80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源: ⑴ INT0:外部中断0,中断请求信号由P3.2输入。 ⑵ INT1:外部中断1,中断请求信号由P3.3输入。 ⑶ T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。 ⑷ T1:定时/计数器1
[单片机]
<font color='red'>单片机</font>(AT89C51)中断<font color='red'>系统</font>详解和中断<font color='red'>系统</font>应用实验
联电将为英飞凌生产高性能汽车微控制器:采用 40nm 工艺
据外媒报道,英飞凌周二在官网公布的消息显示,他们和联华电子已达成了长期战略合作协议,扩大了在汽车微控制器业务方面的合作。 从英飞凌在官网公布的消息来看,两家公司的合作,还是在英飞凌微控制器的生产上。在同联华电子达成长期战略合作协议之后,他们的产能就将成倍增加,更好地满足日益增长的市场需求。 根据新的长期战略合作协议,联华电子将在他们位于新加坡的晶圆厂,采用 40nm 制程工艺,为英飞凌代工高性能的微控制器产品。英飞凌的高性能微控制器,利用了他们专有的 eNVM (嵌入式非易失性存储器) 技术。 微控制器是控制汽车多种功能的关键部件,随着汽车更环保、安全和智能,对微控制器的需求也在大幅增加。今年,英飞凌已经将汽车微控制器的
[汽车电子]
0802LCD 4位显示程序 PIC单片机C语言程序
#include xc.h #include pic.h //#include head.h #define uchar unsigned char #define uint unsigned int #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT ena
[单片机]
自制单片机之十……AT89S51的上拉电阻问题
很多网友都问我AT89S51的P0口为什么要接一个上拉电阻。我就用一个篇幅来说一说 P0口和其它三个口的内部电路是不同的,如下图 iframe id="iframe_0.31248925160616636" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/txz01/pic/item/3beae37ecfda14230dd7da0b.jpg?_=3264199%22%20style=%22border:none;max-width:1333px%22%3E%3Cscript%3Ewindow.onl
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved