机动车智能远光灯系统设计基于单片机技术

目 录

摘 要 I
Abstract II
引 言 1
1 主要研究内容及总体设计方案 3
1.1 主要研究内容 3
1.2 系统总体方案选择 3
1.3 系统功能的确定 4
2 硬件电路的设计 5
2.1 单片机控制模块设计 5
2.2 液晶显示模块电路设计 7
2.3 远近灯光电路设计 9
2.4 按键电路设计 9
2.5 超声波电路设计 10
2.6 蜂鸣器报警设计 10
2.7 光线检测模块设计 11
3 系统软件的设计 12
3.1 软件开发环境 12
3.2 系统工作流程 13
4 焊接与调试 15
4.1 元器件清单 15
4.2 电路焊接 15
4.3 系统调试 16
结 论 18
参考文献 19
附录1 原理图 21
附录2 源程序代码 22
致 谢 34

摘 要

车辆在夜间高速行驶时为了看清楚远方的路面状况常常会使用远光灯,但如果会车时没有及时切换到近光灯,远光灯剧烈的光线会导致对面的车辆没有办法清楚地看到路面,这便产生了交通隐患的可能,交通事故因而更容易发生。细想一下我国的交通事故中,在夜晚发生的事故里,与远近光灯不及时切换等相关的比比皆是。现在人们生活水平也越来越好,大部分家庭都可以支付得起车,这导致每年新增车辆越来越多。近、远灯转换不正确导致的事故比例呈直线升高趋势。在了解了国内外研究现状的基础上,发现大多数远光灯切换问题解决方案并不完善,不能完全解决高光束刺眼的危害。为了充分改善交通问题,本次设计智能远光灯切换系统。利用单片机为基础,加以距离过近时蜂鸣器报警、超声波测距等构成机动车智能灯光系统。机动车在夜间行驶时,如果检测到对面有车辆,将自动关闭远光灯,打开近光灯,从而完成远、近光灯切换,从而简化了驾驶员手动切换,同时减少了刺眼的光束导致驾驶员看不见路面,因此大大降低了事故发生的风险。
本次设计制造成本低,性能优良。通过软件和硬件的调试以及仿真实验,结果表明本次设计在技术上完全可行,预期功能可以实现,这将会更好地保障人民的生活安全。随着我国机动车的不断发展,交通安全问题也越来越被大家关注到,解决这一问题迫在眉睫。在这样的背景下,本次设计将在未来的发展中得到良好的推广。

关键词:单片机;液晶显示;蜂鸣器报警;超声波测距

Abstract

Vehicles at night to see the distance at high speed road conditions often use high beam, but there is no switch in a timely manner to assume when passing across the dipped headlights, high beam of intense light will cause the other side of the vehicle can’t see clearly the road, the possibility of it, the traffic, traffic accidents and thus are more likely to happen. Think about the traffic accidents in our country, in the night of the accident, and near and far light does not switch in time and so on related everywhere. Now people’s living standard is getting better and better, most families can afford a car, which leads to more and more new cars every year, and the proportion of accidents caused by the incorrect conversion of near and far lights is increasing linearly. It is found that most high beam switching solutions are not perfect, can not completely solve the high beam dazzling harm. In order to fully improve the traffic problem, the design of intelligent high beam switching system. Based on the single chip microcomputer, the intelligent light system of motor vehicle is composed of buzzer alarm and ultrasonic ranging when the distance is too close. When a motor vehicle is driving at night, if it detects a vehicle on the opposite side, it will automatically turn off the high beam and turn on the near light, so as to switch the distant and near light, which simplifies the driver’s manual switching and reduces the dazzling light beam which causes the driver to be unable to see the road surface, thus greatly reducing the risk of accidents.
The design and manufacturing cost is low. Excellent performance. Through software and hardware debugging and simulation experiments, the results show that the design is technically feasible and the expected functions can be realized, which will better protect people’s life security. With the continuous development of motor vehicles in China, the traffic safety problem has been more and more concerned by everyone, so it is urgent to solve this problem. In this context, the design will be well promoted in the future development.

Keywords: single chip microcomputer;liquid crystal display;the buzzer sounded the alarm;ultrasonic ranging

引 言

传统车辆的前照明是由近光灯、远光灯、行驶灯和前雾灯共同组成。在城市日常行驶并且道路限速的情况下,司机通常打开近光灯。在高速公路或乡村公路上行驶,路上很少有汽车,所以人们通常打开远光灯。遇到有雾天气时,应打开雾灯。在正常的白天开车时,应该打开日光灯。但尽管如此,传统前照明系统仍存在着许多问题,因为车灯的质量参差不齐,所以造成有些司机因照明亮度不够等原因经常在车况比较复杂的地区同时开启远近光等以及雾灯,在转弯时便会有较暗的照明区域,导致视线盲区,严重妨碍司机对路况现状的判断。此外,在雨天开车时,路面上的水会反射前灯的光等等。除此之外,切换远近灯光还是取决于司机的主观意识,为了解决这一问题,对灯具也提出了新的要求。
远光车灯是为了看清楚远处的路况,使驾驶员提早了解即将行驶的路段,更好地规避风险,但远光灯的缺点是过于刺眼,会导致对面车辆无法看清道路,影响对面车辆看清路况,从而容易导致事故产生。我们经常会在新闻中看到因远、近光灯的缘故造成的本不必要的事故,统计表示与灯光有关的事故占三四成,且有上升可能。故本次设计油然而生。本次设计选用单片机为核心,加以其他模块设计,组成整个智能的系统。
大部分驾驶员在夜间行驶时会选择打开远光灯,但没有意识当会车时切换到近光灯。这便需要一些智能的系统来解决这一问题。本次设计通过光检测输入模块检测到前方是否有相对运动的车辆。假如有,则关闭远光,打开近光[1]。减少了驾驶员手动切换,降低了驾驶员分心,大大改善了交通安全。为了解决这些问题,政府部门也相应颁布了一系列政策。
政府部门从灯具的角度来更好的改善远光灯,来解决远光灯刺眼的问题。但随之而来的是车的成本变高。除了少数豪华车外,目前在路上行驶的大部分车辆都没有智能控制功能,这主要是汽车行业的生产特点,每一个微小的成本增加都会改变汽车的销量,甚至影响汽车的市场定位。为了效果好,系统必须具有低成本的特点,容易推广。简而言之,确保安全性、简单性、效率、低成本和易于集成是这些产品的未来趋势。这也是本次设计时需要重点考虑的因素之一。
本次设计的系统可实现夜晚时远、近光灯的自动切换。设计一个光检测模块,用其来检测光线强弱,以此来检测对面是否有车辆。倘若检测为有,它会自动切换到近光灯,从而不会影响对面机动车行驶和看清晰路况。当车辆周围环境光源较弱时,将自动切换为远光灯[2]。
所以本次设计的智能远光灯系统在传统的基础上,代替驾驶员手动切换近灯和远灯的麻烦,减少驾驶员精力的分散,从而减少了事故的发生。更好地做好机动车智能远近光灯的切换。本次设计预实现三个功能,首先是根据外界光强是否开灯,其次是根据会车检测距离是否切换灯光,最后是距离报警,防止碰撞。选择好合适的单片机和各个元器件,进行好硬件和软件的设计,最终实现所有功能。
本次设计是为了解决因远近光切换不及时带来的交通隐患,主要功能是在夜幕降临时检测外界环境光强,当低于所设定的值时实现自动开启远光灯;当机动车在夜晚高速行驶时,若检测到对面有车会入,且距离小于所设定的值时,自动从远光灯切换到近光灯;当机动车行驶时距前方车过近自动报警,提醒驾驶员,防止发生撞车事件。
本次的设计是基于STC89C52单片机为核心设计的机动车智能远近光灯切换系统设计,在本篇论文撰写时,共分为四部分,主要内容如下:
第一部分:总体设计方案。阐述说明系统的选题背景、研究目的、发展趋势,主要解决问题等。应多方面考虑多重因素,最后选择好可行的设计方案;
第二部分:硬件电路设计。根据预实现的功能选择合适的单片机等。设计液晶显示模块、远近光灯模块、按键模块、超声波模块、蜂鸣器模块、光线检测模块等。选择好各个模块的元器件,和单片机引脚连接好;
第三部分:系统软件设计。程序软件的开发环境和程序设计,以及系统工作流程;
第四部分:焊接与调试。对实物的电路焊接和软件调试以及硬件测试。从而实现预设的功能。

1 主要研究内容及总体设计方案

1.1 主要研究内容
当夜晚行车时,司机一般会打开远光灯。当前方有车辆即将交汇的时候,对面车容易被强光晃到眼睛造成无法判断道路的情况,所以在两车交会的时候司机一般会将远光灯切换为近光灯。但是传统手动切换远近光灯存在着司机换灯延迟、时间较长等问题。此外,由于频繁的换灯,司机很容易分心和疲劳,这很容易导致交通事故,所以在此背景下我设计构思了一款远近光灯控制系统。
1.2 系统总体方案选择
随着城市化的到来,人们的生活水平逐渐提高,私家车也越来越普遍,人民对交通的安全关的注度也越来越高,交通事故在夜晚的高频发生急需解决,这便需要更安全的机动车远光灯系统,以此来减少交通事故的发生。针对以上,我提出了以下几种方案:
(1)方案一
在机动车上安装液晶显示,实时显示与前方车辆的距离,当距离低于设定值报警提醒驾驶员切换近光灯。同时在机动车上安装一款App,可观看到周围车辆图像,从而防止事故发生。
(2)方案二
在机动车上安装光检测系统检测外界光强,当夜幕降临,外界光强低于设定值时自动开启远光灯照明。在汽车上安装了超声波测量距离模块,当在夜晚时检测到对面会车时,距离小于设定值,自动切换为近光灯[3]。在机动车上安装蜂鸣器报警模块,当距离前方车辆过近时,自动报警提示驾驶员,防止碰撞。
若选用方案一,App实时反馈图像所需一定经费,不仅增加了成本,并且没有连接时或连接不稳定时则不起作用,液晶显示报警后依旧需要驾驶员手动切换,而方案二更稳定,安全性更高,且不需要驾驶员手动切换,从而不需要分散驾驶员的精力,并且成本低,易推广,更容易被大众所接受,故选择方案二。

本次总体框图如图1.1所示。

图1.1 系统总体框图
1.3 系统功能的确定
通过对方案二的进一步研究,确定实现功能如下:
(1)当在夜晚时行驶的机动车,光检测外界光强小于设定值时,自动开启灯光照明路况;
(2)当在夜晚时行驶的机动车,检测到对面有会车时,远光灯自动切换到近光灯;
(3)当在夜晚时行驶的机动车,检测与前方车辆或道路的距离,距离过近报警,防止碰撞发生;
(4)选用LCD1602液晶显示实时显示远近和光强,辅助驾驶员更好的切换远近光灯。
为实现以上功能,本次设计采用了89C52单片机[3]。其中包含了光检测技术、LED设计、按键技术、超声波技术、LCD液晶显示技术、蜂鸣器报警等。使用单片机技术去设计灯光自动控制系统。单片机连接着传感器和控制电路设备。当光强达到传感器识别的值时,传感器将测量到的物理量作为输入参数,转换为输入的电量(电流、电压、电阻等)。经过单片机的处理来控制我们的控制电路,从而达到自动控制的目的。

2 硬件电路的设计

2.1 单片机控制模块设计
2.1.1 主控芯片
STC89C52一共有32个I/O口,本次设计使用24个, LCD1602显示屏模块需要11个,蜂鸣器报警模块需要1个,按键模块需要4个,超声波模块需要2个,LED模块需要3个,AD模块需要3个。该芯片具有传统52单片机所没有的特点,STC单片机的运行速度是其他公司52单片机[4]的两倍。作为一个单芯片、智能8位CPU的单片机,它可以系统内编程Flash,可用于嵌入式控制应用,同时为其提供了一个高度灵活和高效的解决方案。
主要特性如下:
(1)工作电压:5.5V~3.3V(5V SCM)/3.8V~2.0V(3V SCM);
(2) 工作频率范围:0~40MHz,等同于普通STC89C52的0~80MHz,实际工作频率可达48MHz;
(3)8K字节空间可用;
(4)集成512字节RAM;
(5)外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒[6]。
单片机所有引脚图如图2.1所示。

图2.1 STC89C52引脚图
单片机引脚的功能如下表2.1所示。
表2.1 STC89C52引脚功能表
引脚号0 复用功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 (外部中断0)
P3.3 (外部中断1)
P3.4 T0(定时器0的外部输入)
P3.5 T1(定时器1的外部输入)
P3.6 (外部数据存储器写选通)
P3.7 (外部数据存储器读选通)
STC89C52单片机VCC口接入+5V电压即可正常工作[7],PST为复位端,P1.3和P1.4接远光灯,P1.5接近光灯,VCC(40引脚)接电源电压,VSS(20引脚)接地。
2.1.2 时钟电路设计
单片机中一个重要部分就是时钟电路,处理任何事情都要有时钟。本次单片机的时钟控制电路主要是由两个部分组成的,包括一个晶振和两个电容[8]。其中晶振为12MHz,电容为20pF,电容的作用是帮助晶振进行起振。时钟电路与单片机的XTAL1、XTAL2以及GND相连。时钟电路原理图如图2.2所示。

图2.2 时钟电路
2.1.3 复位电路设计
单片机中的引脚中RST脚为复位端。本设计的单片机复位由外部复位电路来完成。复位就是从头开始。假设单片机运行程序时发生复位,其将停止当前运行,重新开始执行。STC89C52的复位是由外部的复位电路来完成的[9]。复位电路如图2.3所示。

图2.3 复位电路
2.2 液晶显示模块电路设计
2.2.1 显示模块的选择
根据上述功能描述,对于显示模块需要能够显示足够的字符,分两行显示,每一行16个字符。针对显示模块设计如下几种方案。
(1)方案一
采用LED数码管进行数据显示块,LED数码管适用于对数字的显示。
(2)方案二
点阵数码管是采用点阵数码管设计的显示模块,点阵数码管适用于显示文字,它由八行八列的发光二极管显示器组成。
(3)方案三
使用LCD设计显示模块,液晶显示器是由单片机进行驱动,它可以显示包括数据、文字、图形等信息,整体结构美观。
方案一可以显示数据较少,不能完全实现显示功能。方案二可以显示数据较多,价格相对较高,若采用在显示数字会造成资源浪费。经比较发现,LCD液晶显示成本低、易开发且能大量显示文字符合本设计要求,并且具有功率消耗小、寿命长。故选用方案三。
2.2.2 显示模块的电路设计
本设计采用的字符型显示,以LCD1602作为显示器进行信息显示[9]。和传统的LED数码管显示器件相比,它的体积相对较小、功耗较低,并且可以显示2行16个汉字,LCD显示器已然成为了单片机应用设计中最常用的显示器件。LCD1602主要技术参数如下:
①显示容量为16×2个字符;
②芯片工作电压为4.5~5.5V;
③工作电流为2.0mA(5.0V);
④模块最佳工作电压为5.0V;
⑤字符尺寸为2.95×4.35(W×H)mm。
其具体电路原理图如图2.4所示。

图2. 4 LCD1602液晶显示电路原理图
其实物图如图2.5所示。

图2.5 LCD1602显示器实物图
2.3 远近灯光电路设计
本设计共使用了四个LED指示灯,其中D1、D2代表远光灯,D3、D4代表近光灯。LED灯实际上是一个发光二极管,其工作原理是将电能转化为光能。和普通二极管一样,LED也有一个PN结,具有单向导电性。在电路中,电阻的作用是限制电流和保护LED灯。远近光灯模块从上至下分别与单片机P1.3、P1.4、P1.5相连。其电路图如图2.6所示。

图2.6 LED远近灯光电路设计
2.4 按键电路设计
常见的设计中的按键有三种形式,导电橡胶式、触摸式键盘、机械触点式按键。导电橡胶式是将板上所有的按键制成一块,它成品体积小,不占空间,缺点是寿命较短。触摸屏键盘有美观和方便的优点,但它的价格更高。机械触控按钮采用机械弹性复位,具有体积小的优点,缺点是容易出现接触不良。结合本次设计考虑,最终选择的是机械触点式按键[11]。
在本系统中,按键与单片机引脚P3.5、P3.6、P3.7相连,按键可以设置光强切换的值和自动开启灯光的数值,可以根据实际情况、不同地区、个人习惯自行设定。其电路原理图如图2.7所示。
S2为进入设置模块,可以设置光线值,低于此值时将自动由近光灯转到远光灯。S3为加大光线切换值,S4为减小光线切换值。

图2.7 按键电路
2.5 超声波电路设计
本次设计需要一个检测距离的模块,选择了HC-SR04超声波模块[12]。超声波模块共有四个引脚,VCC为5V电源,GND接地线。在本设计中与单片机引脚P2.7和P2.6相连。其电路图如图2.8所示。

图2.8 超声波电路设计
2.6 蜂鸣器报警设计
本次设计需要一个近距离报警提醒的模块,不需要优美动听的音乐,仅仅需要声音足够清晰的报警提醒即可。报警电路通过蜂鸣器实现,声音清晰响亮,电路简单,性能可靠、稳定、成本低廉等优点。
蜂鸣器电路设计采用5V蜂鸣器模块和一个9012三极管。三极管按极性划分为两种:NPN型和PNP型三极管,本次设计选用的是PNP型三极管[13]。当检测到前方物体距离较近时,给单片机一个反馈,蜂鸣器就会报警,提醒驾驶员防止碰撞,距离较远或没有物体时则不报警,本设计中与单片机引脚P2.1相连。原理图如图2.9所示。

图2.9 蜂鸣器设计
2.7 光线检测模块设计
本次设计需要一个检测光线的模块,选择了光敏电阻。其工作原理基于内部光电效应。有光的时候,光越强,阻值就越小。电阻值迅速降低时,电阻值可小至1KΩ以下[14]。当光照射低时,呈高阻状态,电阻值为1.5MΩ。在设计中,使用光线检测模块检测外界光强,来实现外界光线弱时,自动开启机动车车灯。其原理图如图2.10所示。

图2.10 光线检测模块

3 系统软件的设计

3.1 软件开发环境
本设计中单片机开发环境是Keil ,Keil C51是由美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,其提供了完整的Windows开发环境界面。其中兼容C语言[15]。对于汇编来说,C语言具备可移植、易于维护和修改、方便调用模块、简单易学。Keil提供了一个完整的开发计划,包括一个C编译器、库管理、宏程序集、连接器和一个非常强大的模拟器调试器,以将这些组件组装到集成开发环境(Vision)中,而采用它是因为它的集成环境非常方便,并适用于STC89C52单片机。它能实现在线的运行、仿真,方便初学者用来调试。假设书写有误时,它会显示“error”,方便修改。

图3.1 软件开发界面图
新开始一个工程时,首先要创建新的“Project”工程,选择新工程后为新建的工程进行命名并保存操作;然后选择与本设计符合的单片机型号即“STC89C52”,成功建立工程文件后,添加.c文件开始写入程序。执行流程图如下所示。

图3.2 Keil软件开发流程图
3.2 系统工作流程
首先,当在夜晚时,检测到光强很低,自动开启远光灯。当汽车进入时,它会自动切换到近灯。当结束时,自动从近灯切换到远光灯[16];
其次,要求液晶显示屏显示外界光强和检测距离,从而实现机动车远近光自动切换;
最后,当检测到距离前方车辆太近时,蜂鸣器报警。
在夜幕降临时,光线强度低对驾驶员看清路况有影响,这时便需要辅助的自动切换的远近光灯系统。
系统程序总体流程图如图3.3所示。

图3.3 Keil 4程序总流程图

4 焊接与调试

4.1 元器件清单
本次设计以STC89C52单片机为核心[17]完成机动车智能远光灯系统设计,具体元器件如表4.1所示。
表4.1 元器件清单
元件型号 元件名称 元件标号 数量
10uF 电容 C1 1
20pf 电容 C2, C3 2
远光灯 灯 D1, D2 2
近光灯 灯 D3, D4 2
光敏电阻 光敏电阻 GR1 1
LCD1602 液晶 LCD1 1
Header 4 超声波 P1 1
1K 电阻 R1, R2 2
2K 电阻 R3 1
10K 电阻 R4, R5, R6 3
2k 电阻 R7 1
SW-PB 按键 S1, S2, S3, S4 4
sw-灰色 电源开关 SW1 1
STC89C52 单片机 U1 1
ADC0832 AD采集芯片 U2 1
12M 晶振 Y1 1

4.2 电路焊接
本次设计我们采用的是手工焊接。手工焊接是最原始的方式,与机械大批量生产相比更加精细。由于本次设计布线比较密,所以在焊接前,应仔细对比电路图,确定各元件的位置,以避免焊接位置误差。在焊接过程中还应注意焊锡的使用量[18]。由于各元器件位置较近,这对焊接的技术有一定要求,若焊锡过多会导致短路的出现。这时候可以用电烙铁放在焊接处来回滑动,使用电烙铁去除多余的焊料,或使用焊料吸收器去除焊料。最终成品如图4.1图4.2所示。

图4.1 焊接背面实物图

图4.2 焊接正面实物图
4.3 系统调试
经过所有设计后,最后来到了调试阶段。在给整体上电之前,先观察下是否还存在焊接问题。例如:明显的焊接不稳定、断裂,正负极是否接反,是否有虚接,所有焊点是否遗漏等。检查无误后使用万用表进行二次检查测量,更加仔细的检查,是否存在电路问题,观察是否出现了严重的电源问题,如短路、断路等。一切正确无误后,开始软件部分的调试。
本次设计程序是Keil书写。首先要调试代码是否有误,若提示的信息中显示“error”,就要根据提示找到错误程序并改正,直到错误消失。没有问题后写入单片机中,上电,观察是否实现设计的功能。首先设定好了光检测值,低于此值后将自动开启远光灯。接下来设定好距离值,检测小于此距离将自动切换为近光灯。最后测试近距离有物体时是否报警提醒。如果功能没有实现或实现不完全、不正确,需要重新调试程序,反复进行以上操作,直到所有功能都实现为止。最终实物图如下所示。

图4.3 机动车智能灯光系统设计实物图

结 论

通过以上分析,机动车智能远近光灯系统设计合理且可行,易于推广,可实用性高,预期设计功能也全部实现。能够很好的减少交通事故的发生。本次设计使用STC89C52单片机作为核心[22],加之超声波测距、光检测、蜂鸣器报警、液晶显示等模块共同实现了机动车智能远近光灯系统设计。在大量查询资料和导师的指导下,对系统的总体设计以及软、硬件进行了系统的研究和改正。在结合理论对设备进行相关调试之后,本系统实现了机动车智能远近光灯系统设计。在夜幕降临时检测外界环境光强,当低于设定值时实现自动开启车灯;当机动车在夜晚高速行驶时,若检测到对面有车汇入,自动从远光灯切换到近光灯;当距前方车近时自动报警,防止发生撞车事件[23]。此系统设计功能强大且具有一定的创新性,可以为人们的生活带来安全保障。
在本次设计中,我对超声波测距、程序书写、蜂鸣器报警、液晶显示等方面都有了更好的提升。把所学习的理论知识与实践相结合起来,不断地取得进步,更好的完成了本次设计。在设计途中难免会遇到大大小小的难题。在老师和同学的帮助下,最终都顺利解决。最终设计出了一个成本低廉,易于推广的机动车智能远光灯系统设计。这一系统可以更好地帮助驾驶员看清楚道路,同时会车时也不会影响到其他驾驶员,大大提高了我们的生活安全,避免了不必要的交通事故发生。

参考文献

[1]赵振德. 单片机原理及实验/实训[M]. 西安: 西安电子科技大学出版社, 2009.9:53-60
[2]李全利. 单片机原理及应用技术[J]. 北京: 高等教育出版社, 2009
[3]霍孟友. 单片机原理与应用[M]. 北京: 机械工业出版社, 2004:112-125
[4]李丽. 单片机最小系统的研究[J]. 数字技术与应用, 2016(10) : 26
[5]黄广林. 我国单片机技术的应用及发展趋势[J]. 电子技术与软件工程, 2017(19) : 254
[6]孙宝元, 杨宝清. 传感器及其应用手册[M]. 北京: 机械工业出版社, 2004:368-375
[7]何立民. 单片机高级教程[M]. 北京: 航空航天大学出版社, 2000:55-57
[8]张俊谟. 单片机中级教程原理与应用[M]. 北京航空航天大学出版社, 2002
[9]周兴华. 手把手教了你学单片机C程序设计[M]. 北京: 北京航空航天大学出版社, 2007
[10] 朱定华, 戴淑萍. 单片机微机原理与应用[M]. 清华大学出版社, 2003.3:105-120
[11] 吴宗汉, 林毓伦, 沈一伟. 实用蜂鸣器研制技术[M]. 东南大学出版社, 2017
[12] 郭晓科. “智能化”电子产品中单片机技术的应用[J]. 通信电源技术, 2018,35(01) : 177-178
[13] 刘丰年. 单片机技术在物联网电子产品中的应用分析[J]. 信息与电脑(理论版), 2018(08) : 169-170
[14] 闫展坤. 智能照明控制系统研究[D]. 浙江: 浙江大学. 2013.3:50-51
[15] 张军, 吴教育, 朱海兵. Proteus软件仿真与Keil的单片机系统设计[J]. 单片机与嵌入式系统应用[M]. 2009.8:18-18
[16] 李金利. 单片机原理及接口技术[M]. 高等教育出版社, 2009.14:102-105
[17] 陈堂敏, 刘焕平. 单片机原理与应用[M]. 北京理工大学出版社, 2007
[18] 杜洋. A/D转换芯片ADC0832的应用[J]. 电子制作, 2006(01) : 44-46
[19] 李桂平, 黄有全. 基于STC89C52RC汉字多方式显示屏的制作[J]. 长沙民政职业技术学院学报, 2010,3(2) : 2-7
[20] 官飞. 三极管的开关电路[D]. 河南科技, 2013
[21] 赵月静, 张永弟, 翟卫贺. Proteus和Keil C在开发单片机控制系统中的应用[J]. 实验科学与技术, 2013, 11(02) : 31-34
[22] Miller N J. Pitch detection by data reduction[J]. IEEE ASSP, 1975:72- 79
[23] 张毅刚. 单片机原理及应用[M]. 北京: 高等教育出版社, 2003:166-178

附录1 原理图

附录2 源程序代码

#include <reg52.h> //调用单片机头文件
#define uchar unsigned char
#define uint unsigned int
#include <intrins.h>

sbit CS = P2^0; //CS定义
sbit SCL = P2^2; //SCL定义
sbit DO = P2^3; //DO定义

sbit rs=P1^0; //1602数据/命令选择引脚
sbit rw=P1^1; //1602读写引脚
sbit e =P1^2; //1602使能引脚

sbit c_send = P2^6; //超声波发射
sbit c_recive = P2^7; //超声波接收

long distance;
uint set_d=70;
bit flag_csb_juli;
uint flag_time0;
bit flag_200ms = 1 ;

sbit led_yuan1 = P1^3;
sbit led_yuan2 = P1^4;
sbit led_jin = P1^5;

sbit beep = P2^1; //蜂鸣器

uchar guangxian; //光线的显示变量
uchar ruo_gx=20; //设置
uchar value;

uchar menu_1; //菜单设置
uchar i;

uchar a_a;

void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}

void delay_uint(uint q)
{
while(q–);
}
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}

void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}

void write_sfm2(uchar hang,uchar add,uchar date)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(0x30+date/10%10);
write_data(0x30+date%10);
}

void write_sfm_csb(uchar hang,uchar add,uint date)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(0x30+date/100%10);
write_data(‘.’);
write_data(0x30+date/10%10);
write_data(0x30+date%10);
}

void init_1602()
{
write_com(0x38); //
write_com(0x0c);
write_com(0x06);
}

void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == ‘\0’) break;
write_data(*p);
p++;
}
}

uchar key_can;

void key()
{
static uchar key_new;
key_can = 20;
if((P3 & 0xf0) != 0xf0)
{
delay_uint(50);
if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
{
key_new = 0;
switch(P3 & 0xf0)
{
case 0xe0: key_can = 3; break; //左边第1个
case 0xb0: key_can = 2; break; //左边第2个
case 0xd0: key_can = 1; break; //左边第3个
}
}
}
else
key_new = 1;
}

unsigned char ad0832read(bit SGL,bit ODD)
{
unsigned char i=0,value=0,value1=0;
SCL=0;
DO=1;
SCL=1; //第一个上升沿
SCL=0;
DO=SGL;
SCL=1; //第二个上升沿
DO=ODD;
SCL=1; //第三个上升沿
SCL=0; //第三个下降沿
DO=1;
for(i=0;i<8;i++)
{
SCL=1;
SCL=0; //开始从第四个下降沿接收数据
value<<=1;
if(DO)
value++;
}
for(i=0;i<8;i++)
{ //接收校验数据
value1>>=1;
if(DO)
value1+=0x80;
SCL=1;
SCL=0;
}
CS=1;
SCL=1;
if(value==value1) //与校验数据比较,正确就返回数据,否则返回0
return value;
return 0;
}

void delay()
{
nop(); //执行一条_nop_()指令就是1us
nop();
nop();
nop();
nop();
nop();
nop();
}

void send_wave()
{
c_send = 1; //10us的高电平触发
delay();
c_send = 0;
TH0 = 0; //给定时器0清零
TL0 = 0;
TR0 = 0; //关定时器0定时
while(!c_recive); //当c_recive为零时等待
TR0=1;
while(c_recive) //当c_recive为1计数并等待
{
flag_time0 = TH0 * 256 + TL0;
if((flag_time0 > 40000)) //当超声波超过测量范围时,显示3个888
{
TR0 = 0;
flag_csb_juli = 2;
distance = 888;
break ;
}
else
{
flag_csb_juli = 1;
}
}
if(flag_csb_juli == 1)
{
TR0=0; //关定时器0定时
distance =flag_time0; //读出定时器0的时间
distance *= 0.017; // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米
if((distance > 500)) //距离 = 速度 * 时间
{
distance = 888; //如果大于3.8m就超出超声波的量程
}
}
}

void time_init()
{
EA = 1; //开总中断
TMOD = 0X11; //定时器0、定时器1工作方式1
ET0 = 1; //开定时器0中断
TR0 = 1; //允许定时器0定时
ET1 = 1; //开定时器1中断
TR1 = 1; //允许定时器1定时
}

void key_with()
{
if(key_can == 1)
{
if(menu_1 == 1)
{
write_string(1,0," csb:0.00m ");
write_string(2,0,"set gx:00% ");
write_sfm_csb(1,7,set_d);
write_sfm2(2,7,ruo_gx); //设置光线的参数
write_com(0x80+6); //将光标移动到
write_com(0x0f); //显示光标并且闪烁
}
if(menu_1 == 2)
{
write_sfm2(2,7,ruo_gx); //设置光线的参数
write_com(0x80+0x40+6); //将光标移动到
write_com(0x0f); //显示光标并且闪烁
}

	if(menu_1 >= 3)
	{
		menu_1 = 0;
		write_string(1,0,"   csb:0.00m  ");
		write_string(2,0,"    gx:00%    ");
		write_com(0x0c);     //关闭显示
	}				
}
if(menu_1 == 1)   //设置超声波参数
{
	if(key_can == 2)  //
	{
	 	set_d ++;				   //加超声波距离报警数据
		if(set_d >= 500)
			set_d = 500;

	}	
	if(key_can == 3)  //
	{
	 	set_d --;				   //减超声波距离报警数据
		if(set_d <= 10)
			set_d = 10;
	}
	write_sfm_csb(1,7,set_d);		 //	显示设置的距离
	write_com(0x86);              //将光标移动到
	write_com(0x0f);                //显示光标并且闪烁		
}
if(menu_1 == 2)						    //设置弱光报警
{
	if(key_can == 2)  //
	{
	 	ruo_gx ++;				    //加弱光报警数据
		if(ruo_gx >= 99)
			ruo_gx = 99;

	}	
	if(key_can == 3)  //
	{
	 	ruo_gx --;				   //减强光报警数据
		if(ruo_gx <= 1)
			ruo_gx = 1;
	}
	write_sfm2(2,7,ruo_gx);
	write_com(0x80+0x40+6);              //将光标移动到
	write_com(0x0f);                //显示光标并且闪烁		
}

}

void clock_l()
{
if(distance <= set_d)
{
beep = ~beep; //蜂鸣器报警
}
else
{
beep = 1; //取消报警
}
}

void Main()
{
delay_1ms(150);
P0 = P1 = P2 = P3 = 0xff; //初始化单片机IO口为高电平
init_1602();
time_init(); //定时器初始化程序
write_string(1,0," csb:0.00m “);
write_string(2,0,” gx:00% ");
while(1)
{
key();
if(key_can < 10)
key_with();
if(flag_200ms == 1)
{
flag_200ms = 0;

		if(menu_1 == 0)
		{
			send_wave();	  //超声波测距离
			write_sfm_csb(1,7,distance);
			guangxian = ad0832read(1,0); //采集光线
			guangxian = guangxian * 99 / 255;
			write_sfm2(2,7,guangxian);	 //值越大光线就越强 

		}
		if(guangxian < ruo_gx)  //光线变暗
		{
			if(distance < set_d)
			{
				led_yuan1 = led_yuan2 = 1;  //关远光
				led_jin = 0;  //开近光
			}else 
			{
				led_yuan1 = led_yuan2 = 0;  //开远光
				led_jin = 1;  //关近光
			}
		}else 
		{
			led_yuan1 = led_yuan2 = 1;  //关远光
			led_jin = 1;  //关近光
		}
		clock_l();    //报警函数
	}
}	

}

void time0_int() interrupt 1
{

}

void time1_int() interrupt 3
{
static uint value; //定时10ms中断一次
TH1 = 0x3c;
TL1 = 0xb0; //50ms
value++;
if(value % 6 == 0)
{
flag_200ms = 1;
}

}

致 谢

在本次毕业设计中,我不仅收获了大量的专业知识,同时也对自我的动手操作能力有一个提升,把所学习的理论知识与这次毕业设计充分结合。最终形成了机动车远光灯系统设计。
首先感谢李作纪和陈乃周老师对我的指导指教。在本次毕业设计中,指导老师从选题指导轮廓框架到细节修改,都给予了我细致的指导,提出了很多宝贵的意见与建议,老师以其严谨求实的治学态度、高度的敬业精神、兢兢业业、 孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。他渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。
其次感谢智能工程学院所有授我以业的老师,没有这些年知识的积淀,我没有这么大的动力和信心完成这篇论文。感恩之余,诚恳地请各位老师对我的论文多加批评指正,使我及时完善论文的不足之处。
四年的艰苦跋涉,四个月的精心准备,毕业设计终于到了划句号的时候,心头如释重负,在本论文即将完成之际,谨此向我的指导老师致以衷心的感谢和崇高的敬意!
衷心祝愿母校的明天更加美好!

作者:weixin_112233

物联沃分享整理
物联沃-IOTWORD物联网 » 机动车智能远光灯系统设计基于单片机技术

发表评论