为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

毕业设计(论文)-基于单片机控制的车速控制语音报警系统

2017-10-19 39页 doc 266KB 33阅读

用户头像

is_215732

暂无简介

举报
毕业设计(论文)-基于单片机控制的车速控制语音报警系统毕业设计(论文)-基于单片机控制的车速控制语音报警系统 沈阳工学院 题 目: 基于单片机的车速控制 语音报警系统的设计与实现 院 系: 信息与控制学院 专 业: 班级学号: 学生姓名: 指导教师: 成 绩: 2014 年 06 月 25日 摘 要 本文通过对近年来因车速过快而引起各种交通事故的分析与研究,设计了一种基于单片机的车速控制语音报警系统。 本系统主要研究并设计了基于STC89C52单片机的车速控制电路、语音报警电路、按键电路、电源电路和LCD1602显示电路,编写了相应的车速控制语音报警系统程序。本文详...
毕业设计(论文)-基于单片机控制的车速控制语音报警系统
毕业设计(论文)-基于单片机控制的车速控制语音报警系统 沈阳工学院 题 目: 基于单片机的车速控制 语音报警系统的设计与实现 院 系: 信息与控制学院 专 业: 班级学号: 学生姓名: 指导教师: 成 绩: 2014 年 06 月 25日 摘 要 本文通过对近年来因车速过快而引起各种交通事故的与研究,设计了一种基于单片机的车速控制语音报警系统。 本系统主要研究并设计了基于STC89C52单片机的车速控制电路、语音报警电路、按键电路、电源电路和LCD1602显示电路,编写了相应的车速控制语音报警系统程序。本文详细阐述了基于单片机STC89C52的车速控制电路、语音芯片ISD1820、 LCD1602、按键电路和电源电路的原理及应用,介绍了车速控制语音报警系统程序的编写思想,并最终达到车速控制语音报警的目的。 本文提出的基于单片机的车速控制语音报警系统和以往单纯的车速控制或语音报警系统相比具有结构简单、可靠性高和成本低廉等优点,使本系统不但可以车速控制语音报警系统单独使用,还可以与其他电路配合组成车辆自动驾驶系统使用,应用前景广泛。 关键词:单片机;车速控制;语音报警 I Abstract This article design a speed control voice alarm system which is based on a single chip and the analysis and research in recent years. This system was account on the control circuit speed of the STC89C52 microcontroller, voice alarm circuit , key circuit, power supply circuit and LCD1602 display circuit , and then designed produce of the corresponding speed control voice alarm system program . This paper describes STC89C52 microcontroller which based on speed control circuit , principle and application of voice chip ISD1820, LCD1602, the principle and practice of the key circuit and power supply circuit,introduce the voice alarm of the speed control procedures for the preparation of systems thinking . At last it will achieve the purpose of controlling the speed throughthe voice larms. a This article presents a microcontroller that based on speed control of voice alarm systems and past simple speed control or voice alarm system compared with the simple structure is higher reliability and lower cost, and so on .so that this system not only control the speed of the voice alarm system alone , but also composition of the vehicle and used with other circuits autopilot systems , ultimately it must has a application prospect. Keywords: microcontroller ; cruise control ; voice alarm II 目录 1 硬件部分设计............................................................................................................ 1 1.1 硬件结构设计..................................................................................................... 2 1.2 硬件电路设计..................................................................................................... 3 1.2.1 硬件模块选择.............................................................................................. 3 1.2.2 硬件模块设计.............................................................................................. 3 1.2.3 控制公式计算.............................................................................................. 7 2 软件部分设计............................................................................................................ 8 2.1 开发环境............................................................................................................. 8 2.2 软件设计............................................................................................................. 8 2.2.1 主程序设计.................................................................................................. 8 2.2.2 按键子程序设计.......................................................................................... 9 2.2.3 中断程序设计............................................................................................ 10 2.2.4 车速控制语音报警子程序设计................................................................ 11 2.2.5 显示子程序设计........................................................................................ 12 3 系统测试.................................................................................................................. 13 3.1 软件测试........................................................................................................... 13 3.2 硬件测试........................................................................................................... 13 3.2.1 语音模块测试............................................................................................ 13 3.2.2 显示模块测试............................................................................................ 14 3.2.3 测速模块测试............................................................................................ 15 3.2.4 整体电路测试............................................................................................ 15 3.3 测试结果........................................................................................................... 15 结论.............................................................................................................................. 17 参考文献...................................................................................................................... 18 附录 A......................................................................................................................... 19 附录 B ......................................................................................................................... 32 附录 C......................................................................................................................... 33 III 沈阳工学院学士报告 1 硬件部分设计 近年来,随着现代汽车控制技术和高速公路的飞速发展,在世界各国特别是发达国家,无论是运输业还是个人,汽车都已成为长距离运输的主要交通工具。在高速公路上长时间高速行驶时,驾驶员长时间操纵加速踏板而得不到活动,容易造成疲劳。在限速路段总会出现超速现象,对他人和自己都造成安全隐患。本设计从驾驶员自身安全角度出发,设计了一种检测车辆超速的超速控制语音报警系统。该报警系统允许驾驶员通过自带键盘设置本车辆安全行驶的最高速度,当车辆处于行驶状态中,该系统通过速度传感器时刻监测机动车辆速度。当发现车辆速度超过驾驶员设置的最高值时,语音模块报警模块开始报警,提醒驾驶员减速,同时控制车辆减速。 目前,车辆的速度控制语音报警的主要有以下几种: 1(车速测量控制技术 车速测量控制技术是指通过一定的手段或措施对被控制车辆的速度进行实时的监视。包括模拟电路技术、GPS检测以及嵌入式车载限速装置。 (1)采用模拟电路技术,通过积分电路得到电压,之后用比较器来控制报警输出,这种方法原理简单。易于实现。因电路复杂,采用模拟电路就不可避免的使用大量的电子元件,而结果就是使得系统的精确度较低,不能达到很好的测量精度与控制要求,且维修困难。 (2)采用车载GPS系统,能够提供车辆的速度信息,也提供车辆定位和限速路段等其他信息,但价格昂贵。 (3)采用嵌入式车速控制语音报警装置,在设计汽车时就考虑并在制造时潜入整车电子控制系统中。传感器将车速转换为脉冲信号送入单片机,单片机将输入的一定值的脉冲转换为相应的速度值并做出速度控制或其它指令。且嵌入式车速控制语音报警系统成本较低、易于维护以及可靠性和精确度可以均达到要求。 综上所述,采用嵌入式车速控制语音报警系统是可行的。 2(车速控制语音报警系统控制图 本设计的主要任务就是研究车速控制语音报警的工作过程。主要是在车轮端进行速度数据采集,然后速度数据经过单片机的处理,处理后由单片机判断后发出相应指令。经验证,系统工作符合任务的具体要求。车速控制语音报警系统控制图如图1.1所示。 1 沈阳工学院学士报告 未超速正常行驶 STC89C52单片机 速度采集超速车速控制 超速语音报警 图1.1 车速控制语音报警系统控制图 1.1 硬件结构设计 系统的工作过程是:驾驶者根据当前天气、路况、交通规则以及自己的驾车状态等因素设定本系统的安全速度。例如:设定此路段限速60km/h。当车辆进入行驶状态的同时,本系统同时启动。本系统采用霍尔传感器来实时测定车辆当前的行驶速度,车轮每滚动一周,霍尔传感器输出两个高低电平,并将数据实时传送给单片机处理,单片机计算出汽车当前速度。在LCD1602实时显示当前车速时,单片机将车辆当前速度与驾驶人员设定的最高速度进行比对。当车速低于或等于设定的速度时,正常行驶;车速高于设定的最大速度时,单片机向语音报警模块发出指令,语音模块启动语音报警,同时单片机控制车速降低至设定速度值以下。降低了意外状况发生的几率,保障了驾驶人员和乘员的安全。车速控制语音报警硬件框图如图1.2所示。 车速控制电电源电路路 STC89C52单片机 速度采集电语音报警电 路路 控制按键电LCD1602显路示 图1.2 车速控制语音报警系统硬件框图 2 沈阳工学院学士报告 车速控制语音报警系统的硬件部分由电源电路、单片机电路、车速监控电路、控制按键选择电路、语音报警电路、车速控制电路以及LCD1602显示电路组成。 1.2 硬件电路设计 车速控制语音报警系统可能随时检测到车辆超速的信息,当车速过快经语音报警提示后,如果仍然没有人为因素降低车速,则由系统强制控制车辆刹车或采取其它措施。为了使车速控制语音报警系统的设计思路更为清晰,本设计采用了这种模块的思想进行设计,根据各部分所要实现功能的不同,将硬件部分划分为六个小部分:第一部分是单片最小系统,该部分负责为系统提供处理和控制功能;第二部分是速度采集部分,该部分负责采集实时车速数据;第三部分是显示部分,该部分负责显示经过单片机处理过的温度数据;第四部分是语音告警部分,该部分是负责语音告警车速过快;第五部分是车速控制部分,该部分是负责控制车辆减速或刹车;第六部分是键盘设置部分,该部分负责设置车辆的最高速度以及手动减速或加速等功能。 1.2.1 硬件模块选择 根据具体的要求,本设计主要需要实现的功能是基于单片机的车速控制语音报警系统的设计。主要是在设计上要求完成车辆超速后的车速控制和语音报警,再到显示数据这一过程的设计任务。此外设计的元器件也是很重要的。经过不同的设想和仿真结果。最终的结果是,使用到的元器件应包括:测速传感器、ISD1820(带喇叭)、单片机芯片、显示器件、直流电机、微触开关、电源转换模块等几部分。 1.2.2 硬件模块设计 1(电源电路 电源电路的作用是将车载蓄电池提供的12V电压转换为系统正常工作需要的+5V电压。在本系统电源电路中使用的元件是固定式三端稳压器芯片LM7805。 在LM7805的输入端和输出端通过电容接地,并在输出端电容上并联一个电阻,这样就构成了一个固定输出的稳压器。即,将汽车电瓶提供的12V直流电压接入LM7805的输入端,12V直流电压经过LM7805的稳压和C3的滤波就在LM7805的输出端产生了一个精度高,稳定度好的+5V电压,供系统工作使用。电源电路图如图1.3所示。 3 沈阳工学院学士报告 U1D1 LM7805+5 1312VVinVout LED C1R1G N100UFC2C32.2k D100UF0.1uF2 GND 图1.3 系统电源电路 2(单片机电路 因为单片机芯片内部集成了许多电路,虽然本身仍不能独立工作,需要协同一些外 围电路才能使单片机正常工作或者提供一些控制功能等,但是这种能够让单片机独立工 [1]作的最简单电路,即单片机最小系统。单片机最小系统主要由:单片机芯片、复位电 路、时钟电路、电源组成。单片机最小系统原理图如图1.4所示。 图1.4 单片机最小系统 4 沈阳工学院学士报告 3(速度采集电路 速度采集电路主要由霍尔传感器及外围电路构成。霍尔传感器的1脚接5V,2脚接地,为霍尔传感器提供5V电源,3脚的输出送入单片机。当磁场B从小到大到达18MT,3脚由5V跳变为0V。当磁场B从大到小到达12.5MT,3脚由0V跳变为5V。速度采集电路如图1.5所示。 +5 霍尔传感器1R3 10K1INT03 2 GNDCON4 图1.5 速度采集电路 4(速度设定电路 速度设定电路采用微触按键设定,S2、S3分别设定速度上限的增加与减小,S3、S4分别设定车速的增加与减小。速度设定电路如图1.6所示。 图1.6 速度设定电路 5(语音报警电路 语音报警电路的主要芯片是ISD1820,ISD1820是一款8~20秒单段语音录放电路,内含振荡器、话筒前置放大、自动增益控制、防混淆滤波器、扬声器驱动和Flash电路。只要按照固定模式的电路连接好即可,使用前按住S5录入所需语音,可以使用S6放音 5 沈阳工学院学士报告 或者单片机控制放音。在本系统中,ISD1820的2脚与单片机的P3.5连接。语音报警电路如图1.7所示。 图1.7 语音报警电路 6(LCD1602显示电路 LCD1602模块的第4~6引脚分别与单片机的第21~23引脚连接,主要通过这三个引脚来控制液晶模块使用状态等,而该模块的第7~14引脚与单片机的P0口连接,进行 [2]数据的输入和输出。LCD1602引脚图如图1.8所示。 U2 LCD1602 VSSVVRREDDDDDDDDDOSW01234567D12345678911111RSRWED0D1D2D3D4D5D6D701234 +5GNDGND 图1.8 LCD1602引脚图 6 沈阳工学院学士报告 1.2.3 控制公式计算 直流电机转速计算公式见式(1.1)。 (1.1) 式中n—直流电机转速,N—栅格数,—T0中断次数,m—在规定时间内测得INT0 的脉冲数,T—定时器T0定时溢出时间。 当直流电机通过传动部分带圆盘(模拟车轮)旋转时,霍尔传感器根据圆盘上得磁 INT0片获得一系列脉冲信号。这些脉冲信号通过单片机系统定时/计数器计数,定时器 INT0T0工作于定时方式。每到1s读一次外部中断计数值,此值即为脉冲信号的频率。定时器T0完成100次溢出中断的时间T除以测得的脉冲数m,经过单位换算,就可以算得直流电机旋转的速度。 根据式(1.1)计算出直流电机转速,主CPU将该值数据处理换算后,即可在LCD液晶显示器上显示出来。 7 沈阳工学院学士报告 2 软件部分设计 本系统使用STC89C52单片机作为控制的单片机芯片,整个系统的任务是车辆超速后的车速控制和语音报警功能。软件设计主要分为系统初始化、键盘检测、速度检测、控制语音报警、控制车速、LCD1602显示等部分,每个功能模块对于整体设计都是非常重要的,单片机STC89C52通过软件程序才能很好的对外部的信息进行采集、分析和决策。 因C语言具有语言简洁、运算符和类型丰富、结构化语句、可移植性强和适用范围广等诸多优点,故选用C语言作为本设计的编程语言。 2.1 开发环境 本设计采用Keil Software公司出品的集成开发环境进行编程,其版本为KeilμVision4。KeilμVision4是2009年2月发布的最新版本,是针对Windows桌面平台 [3]所研发的一套完整的集成开发环境,具有可视化、灵活的Windows窗口管理。 该软件不仅给用户提供了丰富的库函数,而且提供了功能强大的开发测试工具;既支持C语言编程,也支持汇编语言编程;可以完成编辑、编译、连接、测试、仿真等整个开发;此外,在程序被编译之后,即可生成相应的汇编语言代码,使用户可以切身感觉到该款软件的生成目标的代码效率是相当高的,并且多数语句生成的汇编代码更为紧凑和容易理解,进而使得编程效率更为高效。 2.2 软件设计 主程序主要完成硬件初始化、子程序调用以及显示、报警等功能。数据处理子程序主要完成监测车辆速度即主要是计算出车辆的时速,为报警子程序提供参考数据;按键中断子程序主要实现合法参数的输入;报警子程序主要实现在车辆超速行驶状态下发出报警信号和车速的控制。 因此将软件分为主程序、初始化程序、按键子程序、中断服务子程序、显示子程和车速控制语音报警子程序等。 2.2.1 主程序设计 1(设计流程 (1)先进行初始化设置各定时器初值,然后判断是否启动系统进行测量。 8 沈阳工学院学士报告 (2)启动系统,霍尔传感器检测脉冲到来后,启动外部中断,每来一个脉冲中断一次,记录脉冲个数。 (3)启动T0定时器工作,每1秒定时中断一次,读取记录的脉冲个数,即电机转速。 (4)再进行数值的判断,若数值高于设定速度则进行报警和车速控制,否则进行正常速度行驶及LCD1602的液晶显示,直至复位或者关闭电源。 从单片机程序的角度来看,主程序的流程应该为:在完成各部分初始化之后,便进入数据的接收处理、车速控制和语音告警的判断,以及数据显示。软件整体流程如图2.1所示。 开始 初始化 按键输入Vm 速度处理语音报 警子程序 车速显示子程序 图2.1 软件整体流程 2(初始化编程 初始化编程包括系统初始化、LCD1602初始化和定时器/计数器初始化等。详细程序见附录C中的void main()部分、void LCD_initial(void)部分和void TimerInitProc ()部分。 2.2.2 按键子程序设计 按键子程序的作用主要是实现各个参数的输入,按键子程序包括按键扫描、按键去 9 沈阳工学院学士报告 抖等部分组成。按键子程序的详细代码见附录A中的Void main()部分。 2.2.3 中断程序设计 INT0在处于中断服务程序阶段,首先进行关中断设置。其次进行对位进行的脉冲 INT0个数计数的数值读取。再次对、T0进行赋初值并且进行关中断设置。最后进行中断返回。 1(外部计数中断 由函数名为Exti0_interrupt函数可以知道外部计数中断的功能是INT0引脚下降沿进入中断。 由Pulsecnt++可知计数器接受一次外来中断,计数器加1,即车轮每转动一周,计数加1。外部计数中断流程如图2.2所示。 开始 初始化 关闭外部中断 0 计数器+1 开外部中断0 返回 图2.2 外部计数中断流程 2(定时器中断 定时器中断的作用是进行定时器的重新赋值,与每秒进行一次速度计算处理,得出转速。在附录C中的void Timer0IntProc() interrupt 1中断部分可知通过TH0=TIMER0_HIGHT设置定时器0高字节初值;通过TL0=TIMER0_LOW设置定时器0低字节初值。当1s计时结束时,通过Pulsenum=Pulsecnt保存测得脉冲值,再经过 10 沈阳工学院学士报告 Pulsenum=(Pulsenum*2)/3语句算得2个脉冲为1圈。定时器具体中断流程如图2.3所示。 开始 初始化 关T0中断 定时计数器+1 计时数是否为10(即1s) NY 速度处理 外部中断计数归零 定时器计数归零 开T0中断 返回 图2.3 定时器中断流程 2.2.4 车速控制语音报警子程序设计 车速控制语音报警子程序部分主要包括速度的实时检测,实时速度与设定速度的比对,以及车速控制语音报警模块的控制。详细程序请见附录C中Void main()部 分。车速控制语音报警子程序流程如图2.4所示。 11 沈阳工学院学士报告 开始 初始化 接收实时车速V0 V0>Vm YN 车速控制语音报警 返回 图2.4车速控制语音报警流程 2.2.5 显示子程序设计 显示部分主要包含了写命令函数,初始化函数、写数据函数和写字符串数据。显示 子程序如图2.5所示。 开始 初始化 写命令 写数据 写字符串 返回 图2.5 显示子程序流程 12 沈阳工学院学士报告 3 系统测试 系统测试是将已经构建好的硬件和编写好的程序及其他元素集合在一起,进行车速控制语音报警系统的组装测试和确认测试。目的是通过与设计要求及实用性需求进行比较,从而发现系统所欠缺的地方,提出改进的必要过程。 系统测试分为软件测试、硬件测试和整体测试三个部分。 3.1 软件测试 在软件测试前,也是需要检测设备是否是在正常运行的状态。 一般情况下是用一些常用的简单的程序来确认各个模块是否能在正常工作的条件下运行。例如对于告警电路,编写一个程序,只让发光二极管发光,如果电路中存在问题的情况下或者其他不明原因情况下,发光二极管可能不会发光,或者直接损坏。那么就告诉我们需要检查电路,待确定无误后,在进行软件测试,一直到你所测试的部分不再存在问题的时候为止。就可以开始运行自己设计中的各个模块的程序,来观察并记录相关数据。 在测试初期,在LCD1602上面显示速度的这段程序写的不够理想,导致在显示最大限定速度时会有残余显示。最后,改写了显示方式,达到理想的效果。另外,在保证正常的功能的前提下,对程序做了优化,去冗余的语句。 3.2 硬件测试 测试之前应检查好电路各部分是否正确连接,首先要检查电路板是否有断路,元器件的管脚是否有虚焊,电源正极与负极之间是否存在短路。 其次上电检查,用万用测试各点电压,无误之后,再测量各芯片电压准确性,在此处值得注意的是单片机的供电是近似5V电压。要用万用表测量准确,否则有可能损坏模块芯片或影响测试结果。 电路的检查遵循由部分到整体的原则。 3.2.1 语音模块测试 首先要给系统上电,看看ISD1602电源指示是否亮了,其次通过按键检测语音模块通过模块上的按键测试录音和放音工作是够正常。 通常会有录音或者放音指示灯常亮的问题,那我们就要检查短路塞是否有插错的情 13 沈阳工学院学士报告 况。测试图示如图3.1所示 图3.1 语音模块测试 3.2.2 显示模块测试 首先要给系统上电,看看LCD1602模块是否正常显示。 其次在首次使用的时候,可能会发现这样的情况:LCD1602模块虽然亮,但是屏幕却没有任何显示或者显示内容不够清晰,那么此时就要慢慢调整电路板上电位器,屏幕上便会逐渐显示出内容或者内容变得清晰,当调节到适当的清晰度,即可停止。以后使用中,无论重新给单片机加电,还是重新给单片机烧录程序,LCD1602模块都会保持已经测试好的状态。LCD1602测试如图3.2所示。 图3.2 LCD1602测试 14 沈阳工学院学士报告 3.2.3 测速模块测试 将测速传感器放在在单片机开发板上进行测试,系统上电后,在霍尔传感器进行采集速度信息时,用示波器测量霍尔传感器第3脚,观察是否输出方波波形。 3.2.4 整体电路测试 完成各个部分的电路检测后,最后我们进行整体的电路测试。首先,将电路各个部分正确连接。 其次通过相应的按键来模拟设定实时车速和限定车速,进行模拟车速控制语音报警系统的整体测试。 本次测试中,我们选择了60km/h、70km/h、80km/h和90km/h为限定速度分别做了测试,测试结果跑基本达到设计要求。系统整体测试过程如图3.3所示。 图3.3系统整体测试 3.3 测试结果 经过整体测试,系统各个模块均可以正常工作,整体工作状态良好,达到了最初的设计要求。当实时车速超过限定速度以后,单片机控制车速,并触发语音模块的语音报 15 沈阳工学院学士报告 警功能。测试对应状况见表3.1。 表3.1测试结果 测试序号 限定速度 未超速 超速 1 60Km/h 正常行驶 语音报警、控制车速 2 70Km/h 正常行驶 语音报警、控制车速 3 80Km/h 正常行驶 语音报警、控制车速 4 90Km/h 正常行驶 语音报警、控制车速 16 沈阳工学院学士报告 结论 本课题的研究工作已经基本达到预期的要求,着手解决了基于单片机的车速控制和语音报警的问题,并提供LCD1602液晶显示实时车速,实时车速监控的测量范围是0~240km/h,精度达到了?0.5km/h。: (1)本课题实现了基于STC89C52单片机的车速控制语音报警功能,具有电路简单、可靠性高和成本低等特点。 (2)系统硬件设计重点使用的芯片有STC89C52、ISD1820、LM7805和IRF540等。设计并制作了包括电源电路、单片机电路、车速检测及控制电路、语音报警电路,按键电路和电子开关电路等一系列电路。 (3)系统软件设计包括程序初始化、速度检测、速度比较和语音报警等模块程序采用C语言模块化编写,不但易于以后的扩展和维护,也提高了程序的稳定性。 本毕业设计具有可靠性高、成本低廉、操作维护简单和可扩展性强的优点,也还存在着些许不足之处。系统若将ISD1820语音录放芯片换成数字语音合成电路,不仅仅可以实现车辆的超速报警,也可以实现车辆其他信息的语音报警。还可以将本系统与车载GPS结合在一起,就能够实现车辆的分路段车速自动控制和语音报警功能,以满足不同消费人群的不同需求。 17 沈阳工学院学士报告 参考文献 [1] 张义和,王敏男,许宏昌(例说51单片机(C语言版)[M](北京:人民邮电出版社(2010年:367-378( [2] 范力芠(单片机原理及应用技术[M](北京:电子工业出版社,2009:190-198( [3]张毅刚(新编MCS-51单片机应用设计[M](北京:哈尔滨工业大学出版社(1990年:376-381( 18 沈阳工学院学士报告 附录 A 系统程序源代码: ******************************STC89C52**************************** ******************************12MHz晶振************************** #include "reg51.h" #define uint8 unsigned char #define uint16 unsigned int #define uchar unsigned char #define uint unsigned int #define TIMER0_HIGHT 0xEC //设置定时器0工作方式1自动装载初值,定时5ms, Fosc=12MHZ #define TIMER0_LOW 0x78 uint8 keyin = 1; //按键输入 uint16 cnt10ms; //10ms计数器 uint16Pulsecnt; uint16Pulsenum; uint16 PulseTime; //10ms计数器 uint16 Pulse; //10ms计数器 //--------------------------PWM #define V_TH1 0xFF #define V_TL1 0xF6 #define V_TMOD 0x01 unsigned char SETSPEED=150; unsigned char ZKB1; unsigned char click=0; voidInit_Extint(void); voidTimerInitProc(); voidInit_System(void); void Display(uint8 chose_dat, uint8 dat); 19 沈阳工学院学士报告 voidShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s); voidDelayMs(uint8 Ms); uint8 Pulse_FLAG=0; #define LCD_Data P0 //LCD的数据口 sbit LCD_BF=LCD_Data^7; //LCD忙信号位 sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_EN=P2^2; sbit MOTOR_EN=P2^3;//电机 sbit BP_EN=P3^5;//喇叭 sbit SPEEDADD=P1^0; sbit SPEEDDEC=P1^1; sbit K1=P1^2; sbit K2=P1^3; sbit K3=P1^4; #define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位 //输入方式设置 #define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一 #define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一 #define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移 #define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动 //设置显示、光标及闪烁开、关 #define LCD_DISPLAY_ON 0x0C //显示开 #define LCD_DISPLAY_OFF 0x08 //显示关 #define LCD_CURSOR_ON 0x0A //光标显示 #define LCD_CURSOR_OFF 0x08 //光标不显示 #define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁 20 沈阳工学院学士报告 #define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁 //光标、画面移动,不影响DDRAM #define LCD_LEFT_MOVE 0x18 //LCD显示左移一位 #define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位 #define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位 #define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位 //工作方式设置 #define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示 #define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示 /*定义子程序*/ void LCD_ClrAll(void); //清屏 void Judge_LCD_busy(void); //检测是否忙碌 void LCD_Write(ucharWriteData); //写控制字 void LCD_write_data(ucharLCD_data); //写数据显示 void LCD_cursor(uchar x); //光标起始地址 void LCD_printc(unsigned char lcd_data) ; //输出一个字符 void LCD_prints(unsigned char *lcd_string);//输出字符串 /*LCD1602忙碌判断子程序*/ void Judge_LCD_busy(void) //判断LCD1602是否忙状态 { while(1) { LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_Data=0xff; LCD_EN=1; //EN 是 1—0 使能 if(!LCD_BF)break; //LCD_BF=1表示忙碌,需要等待。 } LCD_EN=0; 21 沈阳工学院学士报告 } /******LCD清屏***************/ voidLCD_ClrAll(void) { Judge_LCD_busy(); //判断是否忙碌 LCD_RS=0; LCD_RW=0; LCD_Data=0x01; LCD_EN=1; LCD_EN=0; } /*******LCD写数据定义各种模式*********/ void LCD_Write(ucharWriteData) //写指令到LCD { Judge_LCD_busy(); LCD_RS=0; LCD_RW=0; LCD_Data=WriteData; //把WriteData的数据送到数据口 LCD_EN=1; LCD_EN=0; } /********LCD显示数据***********/ void LCD_write_data(ucharLCD_data) //输出一个字节数据到LCD { Judge_LCD_busy(); LCD_RS=1; LCD_RW=0; LCD_Data=LCD_data; LCD_EN=1; LCD_EN=0; 22 沈阳工学院学士报告 } /****光标位置的确定***/ void LCD_cursor(uchar x) //LCD光标定位到x处 { LCD_Write(0x80+x); //第一行地址是0x80 } /*输出一个字符*/ voidLCD_printc(unsigned char lcd_data) { LCD_write_data(lcd_data); } /*输出字符串*/ voidLCD_prints(unsigned char *lcd_string) { unsigned char i=0; while(lcd_string[i]!=0x00) { LCD_write_data(lcd_string[i]); i++; } } /*初始化程序*/ void LCD_initial(void) //初始化LCD { LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE); LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); LCD_Write(LCD_DISPLAY_DOUBLE_LINE); LCD_ClrAll(); } 23 沈阳工学院学士报告 void Value_to_ASCII2(unsigned intvalue,uchar add) { unsigned char temp[] = "00"; temp[0] = value/10 + 0x30; value = value%10; temp[1] = value + 0x30; LCD_cursor(add); //光标起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f LCD_prints(temp); } void Value_to_ASCII(unsigned intvalue,uchar add) { unsigned char temp[] = "000KM/H"; temp[0] = value/100 + 0x30; value = value%100; temp[1] = value/10 + 0x30; value = value%10; temp[2] = value + 0x30; LCD_cursor(add); //光标起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f LCD_prints(temp); } void Value_to_ASCII3(unsigned intvalue,uchar add) { unsigned char temp[] = "SET:000KM/H"; temp[4] = value/100 + 0x30; value = value%100; temp[5] = value/10 + 0x30; value = value%10; temp[6] = value + 0x30; LCD_cursor(add); //光标起始地址,第一行地址是0x00~0x0F,第二行地址是0x40~0x4f LCD_prints(temp); 24 沈阳工学院学士报告 } //--------------------主程序-------------------------------- void main() { MOTOR_EN=0; BP_EN=1;ZKB1=0; Init_System(); //初始化 LCD_initial(); LCD_cursor(0x00);//写地址 LCD_prints("CAR:");//写内容 Value_to_ASCII(Pulsenum,0X04); Value_to_ASCII2(ZKB1,0X4c); Value_to_ASCII3(SETSPEED,0X40); while(1) { //按键处理 if(SPEEDADD==0){//加速 DelayMs(1); if(SPEEDADD==0) { if(SETSPEED<250)SETSPEED=SETSPEED+10; Value_to_ASCII3(SETSPEED,0X40); while(SPEEDADD==0){} } } if(SPEEDDEC==0){//减速 DelayMs(1); if(SPEEDDEC==0){ if(SETSPEED>10)SETSPEED=SETSPEED-10; Value_to_ASCII3(SETSPEED,0X40); 25 沈阳工学院学士报告 while(SPEEDDEC==0){} } } if(K1==0){//设定超速报警速度 DelayMs(1); if(K1==0){ if(ZKB1)ZKB1--; Value_to_ASCII2(ZKB1,0X4c); while(K1==0){} } } if(K2==0){//设定超速报警速度 DelayMs(1); if(K2==0){ if(ZKB1<50)ZKB1++; Value_to_ASCII2(ZKB1,0X4c); while(K2==0){} } } if(K3==0){//设定超速报警速度 DelayMs(1); if(K3==0) { ZKB1=0; Value_to_ASCII2(ZKB1,0X4c); while(K3==0) } } if(Pulse_FLAG==1) 26 沈阳工学院学士报告 { Pulse_FLAG=0; Value_to_ASCII(Pulsenum,0X04); if(Pulsenum>SETSPEED) { BP_EN=0; //ZKB1 = 2;调试代码 } else { BP_EN=1; } } } } ********************************************************************* * 函数名: Exti0_interrupt * 函数功能: /INT0引脚下降沿进入中断 * 入口参数: 无 * 返回: 无 ***************************************************************** void Ext0_interrupt(void) interrupt 0 { Pulsecnt++; //来一次中断计数器加1 } /******************************************************************** 函数功能:定时器/计数器0中断处理 27 沈阳工学院学士报告 入口参数:null 返回:null 备注:null ********************************************************************/ void Timer0IntProc() interrupt 1 { TH0 = TIMER0_HIGHT; //设置定时器0高字节初值 TL0 = TIMER0_LOW; //设置定时器0低字节初值 if(++cnt10ms == 200) //1s计时到 { cnt10ms = 0; Pulsenum = Pulsecnt; //保存测得脉冲值 Pulsecnt=0; Pulsenum=(Pulsenum*2)/3; //2个脉冲为1圈 Pulse_FLAG=1; } } **************************************************************** 函数功能:定时器/计数器1中断处理 入口参数:null 返回:null 备注:null ***************************************************************** void Timer1IntProc() interrupt 3 { TH1 = V_TH1; //设置定时器1高字节初值 TL1 = V_TL1; //设置定时器1低字节初值 ++click; if(click>=50)click=0; 28 沈阳工学院学士报告 if(click<=ZKB1){ MOTOR_EN=1; }else{ MOTOR_EN=0; } } /////////////////////////End of Timer0IntProc//////////////////////// voidInit_Extint(void) { IT0 = 1; //外部中断1设置为下降沿触发 IE0 = 0; //标志位清0 EX0 = 1; //允许外部中断1 } /******************************************************************** 函数功能:定时器/计数器初始化 入口参数:null 返回:null 备注:null ********************************************************************/ voidTimerInitProc() { TMOD &= 0xF0; TMOD |= 0x11; //设置定时器0,1,方式1:16位定时器 TH0 = TIMER0_HIGHT; //设置定时器0高字节初值 TL0 = TIMER0_LOW; //设置定时器0低字节初值 TR0 = 1; //启动定时器0 ET0 = 1; //开定时器0中断 TH1 = V_TH1; //设置定时器1高字节初值 29 沈阳工学院学士报告 TL1 = V_TL1; //设置定时器1低字节初值 TR1 = 1; //启动定时器1 ET1 = 1; //开定时器1中断 EA = 1; //开总中断 } /////////////////////////End of TimerInitProc//////////////////////// voidinitvar() { cnt10ms = 0; Pulsecnt = 0; Pulsenum = 0; } voidInit_System(void) { Init_Extint(); TimerInitProc(); initvar(); } /******************************************************************** 函数功能:延时ms 入口参数:MS 返回:null 备注:null ********************************************************************/ voidDelayMs(uint8 Ms) { unsigned char i,j; do { 30 沈阳工学院学士报告 for(i=5;i>0;i--) for(j=98;j>0;j--); }while(--Ms); //Test for 12M } ///////////////////////////End of DelayMs//////////////////////////// 31 沈阳工学院学士报告 附录 B 电路原理图: 32 沈阳工学院学士报告 附录 C 系统实物图: 33
/
本文档为【毕业设计(论文)-基于单片机控制的车速控制语音报警系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索