当前位置: 首页 > news >正文

基于单片机汽车驾驶防瞌睡防疲劳报警器自动熄火设计

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
  • 设计程序
  • 具体实现截图
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
一、STC89C52主要特性如下:
(1)8K字节程序存储空间;
(2)512字节数据存储空间;
(3)内带4K字节EEPROM存储空间;
(4)可直接使用串口下载。
二、STC89C52主要参数如下:
(1)增强型8051单片机,6时钟/机器周期和12 时钟/机器周期可以任意选择,指令代码完全兼容传统8051;
(2)工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机);
(3)工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作 频率可达48MHz;
(4)用户应用程序空间为8K字节;
(5)片上集成512 字节RAM;
(6)通用I/O 口(32个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O口用时,需加上拉电阻;
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片;
(8)具有EEPROM功能;
(9)共3个16 位定时器/计数器。即定时器T0、T1、T2;
(10)外部中断4路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒;
(11)通用异步串行口(UART),还可用定时器软件实现多个UART;
(12)工作温度范围:-40~+85℃(工业级)/0~75℃(商业级);
(13)PDIP封装。
三、STC89C52单片机相关引脚说明:
(1)VCC:供电电压。
(2)GND:接地。
(3)P3.0 RXD(串行输入口)
(4)P3.1 TXD(串行输出口)
(5)P3.2 /INT0(外部中断0)
(6)P3.3 /INT1(外部中断1)
(7)P3.4 T0(记时器0外部输入)
(8)P3.5 T1(记时器1外部输入)
(9)P3.6 /WR(外部数据存储器写选通)
(10)P3.7 /RD(外部数据存储器读选通)
(11)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(12)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
(13)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(14)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(15)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
(16)XTAL2:来自反向振荡器的输出。

功能介绍

51单片机汽车驾驶防疲劳防瞌睡报警器自动熄火15
本系统由STC89C52单片机、蜂鸣器、ADXL345重力加速度传感器、
继电器控制、按键、指示灯及电源组成。
1、通过按键点亮led灯,代表车辆启动和熄火。
2、车辆启动后,ADXL345采集方向变化,如果3s左右方向无任何
变化,表示司机疲惫没有动方向盘,此时报警并继电器动作。
3、报警后除非系统复位取消报警,否则持续报警,强制司机需要休息。
4、如果车辆没有启动,则不进行检测不会报警。

设计程序

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "delay.h"
#include "adxl345.h"
#include<intrins.h>sbit buzzer=P1^1;	//引脚定义
sbit relay=P1^4;
sbit led=P1^6;
sbit key =P1^5;unsigned char ReadAdxl345;	   //定时读取adxl345数据
xdata char dis0[16];		 //	 显示暂存 方便调试
xdata unsigned long time_20ms=0; 	//	系统定时计数
xdata float RemeY=0;		   //记录上一次加速度值
unsigned char Error0Num;	  //异常情况计数
unsigned char DirFlag=0;	//方向不变了
bit rekey =0;//防止重复按下
bit ledFlag =0	;//led状态标识
void Init_Timer0(void);
void UART_Init(void);
void SendByte(unsigned char dat);
void SendStr(unsigned char *s,unsigned char length);void main (void)
{     Init_Timer0();        //定时器0初始化UART_Init();Init_ADXL345();	  //初始化if(Single_Read_ADXL345(0X00)==0xe5)	//读出的数据为0XE5,表示正确{DelayMs(5);SendStr("ready ok!",9);//显示第二行}else{DelayMs(3);}ReadData_x();	//三轴检测函数RemeY=temp_Y;	//记录上次参数值buzzer=0; //打开led = 0;	relay = 0;		DelayMs(100);buzzer=1; //关闭蜂鸣器	relay = 1;	//关继电器	led = 1;	//关ledledFlag = 0;   //led标识清零while (1)         //主循环{if(key==0) //检测到按键按下{if(rekey == 0){DelayMs(20); if(key==0)	//确认按键按下{rekey =1;if(ledFlag==0)	//当前led为关闭状态{led=0;ledFlag=1;}	  //打开led 标志位置位if(ledFlag==0)	//当前led为关闭状态{led=1;ledFlag=0;}	 //关闭led 标志位清零}			}}else{rekey =0 ;}	//防止重复按下 if(ledFlag==1)	 //点火状态{if(ReadAdxl345==1)   //定时读取adxl345数据{ReadAdxl345=0;ReadData_x();  						//三轴检测函数if((temp_Y<(RemeY-60))||(RemeY>(RemeY+60)))	   //左右变化{Error0Num=0;	//错误次数清零}else{Error0Num++;if(Error0Num>=15) //异常情况超过10次报警{DirFlag=1;buzzer = 0;	//继电器蜂鸣器动作relay  = 0;}}RemeY=temp_Y;sprintf(dis0,"temp_Y:%4.1f",temp_Y);//打印数据SendStr(dis0,13);//串口发送SendStr("\n",1);//串口发送回车}}}
}void Init_Timer0(void)
{
//**All notes can be deleted and modified**//TMOD |= 0x10;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;EA=1;            //总中断打开ET0=1;           //定时器中断打开TR0=1;           //定时器开关打开
}void Timer0_isr(void) interrupt 1 
{TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;if(time_20ms%10==0)		 //定时读取adxl345模块{ReadAdxl345=1;}
}void UART_Init(void)
{//**All notes can be deleted and modified**//SCON  = 0x05;			        // SCON: 模式 1, 8-bit UART, 使能接收  TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1;  TR1   = 1;                  // TR1:  timer 1 打开                         EA    = 1;                  //打开总中断ES    = 1;                  //打开串口中断
}void SendByte(unsigned char dat)//串口发送单字节数据
{unsigned char time_out;time_out=0x00;SBUF = dat;			  //将数据放入SBUF中while((!TI)&&(time_out<100))  //检测是否发送出去{time_out++;DelayUs2x(10);}	//未发送出去 进行短暂延时TI = 0;						//清除ti标志
}void SendStr(unsigned char *s,unsigned char length)	   //发送定长度字符串
{unsigned char NUM;NUM=0x00;while(NUM<length)	//发送长度对比{SendByte(*s);  //放松单字节数据s++;		  //指针++NUM++;		  //下一个++}
}

具体实现截图

请添加图片描述
请添加图片描述

请添加图片描述
在这里插入图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟


http://www.mrgr.cn/news/31836.html

相关文章:

  • 浅谈Python之协程
  • 以STM32CubeMX创建DSP库工程方法二
  • 与姜妍同款冰箱,容声516WILL养鲜冰箱领“鲜”上市
  • Tomcat 乱码问题彻底解决
  • Go语言笔记
  • 计算机网络:物理层 --- 基本概念、编码与调制
  • mac新手入门(快捷键)
  • 电脑是否有问题?检测软件别再乱下载了,只要用这一款工具箱,就可以满足你的需求!
  • FLUX.1+ComfyUI部署与使用:图像合成技术的新高度
  • 大数据实验一: Linux系统安装和使用
  • JDK1.8的新特性
  • 计算机图形学 中心画圆算法 原理及matlab代码实现
  • 智慧医院人工智能应用场景 | 智能导诊系统源码
  • MySQL深入原理
  • A-C-E-F四题。2024华为杯建模解题思路:独家出版,思路解析+模型代码。
  • Redis面试真题总结(三)
  • AI入门系列 | 如何优雅地下载最前沿的模型?
  • Spring Cloud 与 Dubbo 的区别及选择指南
  • P1177 【模板】排序
  • 肖扬新书《微权力下的项目管理》读书笔记2