超速报警系统的设计与实现(本科毕业论文) - 图文

更新时间:2024-01-10 16:56:01 阅读量:1 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业设计 题目: 基于单片机的超速报警器的设计

学 院: 专 业: 学 号: 学生姓名:

信息科学与工程学院

自动化 201004134143

樊迪 宋玉阶 二〇一四年六月

指导教师: 日 期:

武汉科技大学本科毕业设计

摘 要

随着汽车工业和高速公路建设的发展,每年由各种交通事故造成的人员伤亡数目惊人,造成了巨大的经济损失。据统计,造成各种交通事故的主要原因是车辆的超载和超速行驶,而后者随机性很大,纠章困难,并且由于中国公路条件复杂,不同等级的公路允许的最高速度不同,现有的限速装置难以适应这种情况。针对这种情形,开发具有智能超速报警功能的车载系统具有重要意义。

本文从驾驶员自身安全角度出发,设计了一种可设定阈值的汽车超速报警系统。该系统采用16位单片机MC9S12XS128为控制核心,可通过按键在液晶屏上设定报警阈值和显示汽车实际速度,利用8位A/D转换芯片和霍尔传感器采集车轮转速,通过IIC总线实现与单片机的双向通信,具有灯光闪烁报警和语音提示报警这两种预警机制,对可能的突发事件做到防患于未然。

根据目的和要求,本次设计利用万用板搭建了各个模块的硬件电路,并且通过编写代码实现了系统的具体功能,该系统能够长时间稳定的运行,达到了设计要求。

该系统结构简单,可靠性高,操作方便,可广泛应用于摩托车、汽车等各种机动车辆,为人们的安全出行提供有力保障。

关键词: 单片机; 液晶屏; IIC总线; 语音; 超速报警

I

武汉科技大学本科毕业设计

Abstract

With the development of auto industry and highway construction, each year the number of casualties caused by all kinds of traffic accidents is amazing, caused a great economic loss. According to statistics, the main causes of traffic accidents is the vehicle overloading and speeding, the latter is very random correcting formidably, and because of Chinese road condition is complex, the allowed highest speed of different grade highways are different, the current limiting device is difficult to adapt to the situation. Aiming at this situation, to develop the vehicle system with an intelligent speed alarm function is of great significance.

From drivers’ own security perspective, this paper designs a car speeding alarm system which can set the alarm threshold. The system adopts the 16-bit single chip computer MC9S12XS128 as the control core, by which can set alarm threshold through the button on the LCD panel and show the actual motor speed, using 8-bit A/D converter chip and holzer sensor to collect the wheel speed ,through the IIC bus to implement the two-way communication with single-chip microcomputer, with lights flashing alarm and voice alarm the two early warning mechanism, for possible emergencies do nip in the bud.

According to the purpose and requirements, the design uses universal board to set up hardware circuit of each module, and by writing code to realize the function of the system, the system can run stably for a long time ,which has reached the design requirements.

The system has the advantages of simple structure, high reliability, convenient operation, and can be widely applied to motorcycles, cars and other motor vehicles providing a strong guarantee for people’s safely traveling.

Key words: single-chip microcomputer; LCD panel; IIC bus; voice; over-speed

alarm

II

武汉科技大学本科毕业设计

目 录

1 绪论 .................................................................................................................................. - 1 -

1.1 概述 ........................................................................................................................ - 1 - 1.2 各章主要内容简介 ................................................................................................ - 1 - 2 系统总体方案设计 .......................................................................................................... - 2 -

2.1 系统设计需求分析 ................................................................................................ - 2 - 2.2 主控芯片的选择 .................................................................................................... - 2 - 2.3 超速报警器的工作原理 ........................................................................................ - 3 -

2.3.1 车轮转速检测原理 ...................................................................................... - 3 - 2.3.2 按键输入与液晶显示原理 .......................................................................... - 4 - 2.3.3 语音报警原理 .............................................................................................. - 5 - 2.4 系统整体框架 ........................................................................................................ - 5 -

2.4.1 系统运行流程简介 ...................................................................................... - 5 - 2.4.2 系统整体结构框图 ...................................................................................... - 6 -

3 系统硬件设计与实现 ...................................................................................................... - 7 -

3.1 整体电路设计框图 ................................................................................................ - 7 - 3.2 电源模块的设计 .................................................................................................... - 7 - 3.3 MC9S12XS128单片机最小系统设计 ................................................................. - 8 -

3.3.1 电源部分 ...................................................................................................... - 9 - 3.3.2 时钟部分 .................................................................................................... - 10 - 3.3.3 复位电路与BDM接口 ............................................................................. - 10 - 3.4 速度检测模块 ...................................................................................................... - 10 -

3.4.1 霍尔传感器 ................................................................................................ - 10 - 3.4.2 A/D转换器PCF8591T ............................................................................. - 11 - 3.5 人机交互模块 ...................................................................................................... - 13 -

3.5.1 按键部分 .................................................................................................... - 13 - 3.5.2 OLED显示部分 ........................................................................................ - 13 - 3.6 语音报警模块 ...................................................................................................... - 14 - 4 系统软件设计 ................................................................................................................ - 17 -

4.1 系统程序框架图 .................................................................................................. - 17 - 4.2 初始化程序设计 .................................................................................................. - 18 -

4.2.1 系统时钟模块 ............................................................................................ - 18 - 4.2.2 TIM定时模块 ............................................................................................ - 20 - 4.3 人机交互设计 ...................................................................................................... - 21 - 4.4 IIC总线读取A/D转换值 ................................................................................... - 22 - 4.5 语音芯片的驱动 .................................................................................................. - 23 - 5 系统开发平台与辅助调试工具 .................................................................................... - 25 -

5.1 系统硬件开发平台 .............................................................................................. - 25 - 5.2 系统软件开发平台及调试工具 .......................................................................... - 26 - 6 总结 ................................................................................................................................ - 28 - 参考文献 .............................................................................................................................. - 29 -

III

武汉科技大学本科毕业设计

致谢 ...................................................................................................................................... - 30 - 附录A .................................................................................................................................. - 31 -

IV

武汉科技大学本科毕业设计

显示)并用一个二维数组存储下来。接着允许中断,打开定时器。

采用2.5ms的控制周期,在一个控制周期内不断的从A/D转换器上读取当前的电压值,按一定的算法将其转化为汽车轮胎的实际转速,并判断是否超限,若超限,超限是<20%还是>20%。当超限<20%时,控制红色的小LED灯以一定的频率闪烁;当超限>20%时,驱动语音模块的音频解码芯片,播放语音提示“超速危险,请减速行驶。”

同时,在主函数的循环中,不断的扫描按键和刷新OLED屏来实时的显示当前的车速。当确认有按键按下时,OLED屏上的显示内容自动切换到人工设置报警阈值的界面,完成相应三个阈值的设置。

通过连续不断的周期性控制,从而达到我们宏观上看到的控制效果。

2.4.2 系统整体结构框图

根据本次毕业设计的需求分析以及对各个模块选型的最终确定,系统整体结构框架如图2.5所示。

图2.5 整体结构框架

- 6 -

武汉科技大学本科毕业设计

3 系统硬件设计与实现

3.1 整体电路设计框图

根据系统整体结构框图,利用万用板搭建硬件电路,系统整体的电路设计实物如图3.1所示。

图3.1 整体电路设计实物图

3.2 电源模块的设计

作为整个汽车超速报警器系统的能量供给站,电源模块发挥的作用就如同人的心脏一样,持续不断地给其四肢和大脑供应着能量。系统架设在汽车上面,随时提醒司机要安全行驶,关乎着驾驶员的生命安全,可谓意义重大、不容有失。因此,电源模块的设计显得尤为重要,需具备较强的抗干扰能力和稳定性以满足系统长时间、持续性的工作要求。

根据系统各个模块的供电要求,所设计的主板电源如图3.2所示。

- 7 -

武汉科技大学本科毕业设计

图3.2 主板电源

考虑到系统实际的功耗很低(<1W)以及ASM1117芯片的负载能力,设计用到了ASM1117 5.0V与ASM1117 3.3V共两片稳压芯片。其中稳压输出为5.0V的ASM1117芯片用于单片机最小系统、按键输入、OLED显示及AD转换芯片的供电需求。而由于语音报警模块的音频解码芯片的供电电压为3.3V,所以在设计中将5V电压再次经过降压得到3.3V的稳定输出电压。通过示波器的观测,稳压电路的输出电压纹波很小,电压稳定,完全能够满足本次设计要求[6]。

3.3 MC9S12XS128单片机最小系统设计

“麻雀虽小,五脏俱全”,要想使其有优异的表现,也同样要保证它具有一个健全的系统,作为整个超速报警器系统的核心控制单元,MCU的稳定性决定了整个系统能否稳定、持续的工作。在设计之前,对系统做了详细的需求分析,从主控芯片到电源部分,到传感器部分,到驱动部分,再到外设接口,对器件选择和设计原理都做了详细研究,我们在设计中,尽可能的考虑到了其抗干扰能力和稳定性,又根据实际使用情况不断尝试修改完善,最终确定了整个系统的硬件电路方案。所设计的最小系统的硬件电路原理图如图3.3所示。

- 8 -

武汉科技大学本科毕业设计

定性,

图3.3 最小系统

该模块可以分为以下三个小部分:

3.3.1 电源部分

S12单片机片内CPU使用1.8V电压,闪存操作使用2.8V电压,为了提高抗干扰能力,片外I/O口可使用5V电压,较低的片内电压使CPU运算速度快、功耗低;较高的硬件电路设计I/O电平有利于抵抗外界干扰,故S12单片机特别适合于那些工作环境恶劣的控制系统。由于S12单片机内部集成了电压调整器模块,电压调整器模块产生单片机内部需要的其他电压,因此,S12单片机的供电电压范围较大(+3.3V~+5.0V)。电压调整为3组输出,2组1.8V和1组2.8V,供单片机内部不同模块使用。1组1.8V供CPU内核使用;另一组1.8V供时钟电路的锁相环使用,由于锁相环电路的高频噪声高,故和CPU分开供电;2.8V的一组是为闪存供电的。两组外部电源端VDDX1和VDDX2为不同的I/O模块供电。分多个电源、地引脚给片内不同模块供电,可减小模块间的相互干扰。

在硬件电路设计中,在尽量靠近几个电源端引脚的位置增加了去耦电容,以降低电源噪声。这些电源端、地端最终还是连接在一起的,即外部提供的+5V电源。为了稳定不同模块的不同电压,需要外接一些电容,这些电容可以分为两类,电容值较大的作为存储电容,主要作用是消除单片机在突发运行时产生的尖峰电压;另一类容值较小的电容作为去耦电容,主要用于抑制单片机在高速运行时产生的高频噪声。

- 9 -

武汉科技大学本科毕业设计

3.3.2 时钟部分

对于S12X系列单片机,虽然单片机内部集成有RC震荡电路产生的时钟,但RC时钟的频率不够稳定,会随温度变化,频率在1-5.5MHZ之间,主要用来在检测到主时钟电路故障时起作用,靠自有时钟单片机就能正常运行,这种运行模式被称为自时钟模式。为了实现CPU的高速运行,单片机需要一个更高的时钟频率,这个更高的时钟频率是由单片机片内的压控振荡器(VCO)产生的,VCO可以有很高的频率,但仍需要稳定频率的电路。为了给单片机提供一个可设定频率并且稳定的工作时钟,单片机需要外接一个石英或陶瓷振子,产生一个频率稳定的时钟信号,再通过片内的锁相环电路(PLL)将时钟频率锁定[7]。

在设计中使用了16MHZ的石英晶振,并在其两侧分别串联了一个22PF的去耦电容。

3.3.3 复位电路与BDM接口

复位电路与BDM接口的电路原理图如图3.4所示。

图3.4 复位电路与BDM接口

在上电时,若电源电压未达到预期值,RESET端保持低电平;当电源电压达到预期值后,RESET端输出高电平,单片机就会自动复位运行。手动复位时,按下上图中的手动复位按钮RESET端保持低电平;松开手动复位按钮后,RESET端变成高电平,也能达到复位的目的。

BDM接口为下载程序和在线仿真调试的接口,由六个引脚组成,在制作时需要注意的是不要将其两侧画反。

3.4 速度检测模块

3.4.1 霍尔传感器

霍尔器件是一种磁传感器,是半导体材料制成的一种薄片,它是一种磁敏感器件,当它处于磁场中时,会产生电动势。在垂直磁场平面方向上施加外磁场、在平行于平面方向上施加外电场,则使电子在磁场中运动,结果在器件的两个侧面之间产生霍尔电势,霍尔电势的大小和外磁场以及电流大小成正比。利用它们可以检测磁场及其变化,可在

- 10 -

武汉科技大学本科毕业设计

各种与磁场有关的场合中使用。霍尔器件正是以霍尔效应为其工作基础,霍尔效应的检测原理如图3.5所示。

图3.5 霍尔效应原理

霍尔器件具有很多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高(可达1MHZ),耐振动,不怕灰尘、油污、水汽及盐雾等的污染获腐蚀。

霍尔线性器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高(可达um级)。取用了各种补偿和保护措施的霍尔

[8]器件的工作温度范围宽,可达-55℃~+150℃。

几经斟酌考虑,选用了44E开关型霍尔集成元件。其硬件电路如图3.6所示。

图3.6 测速电路

3.4.2 A/D转换器PCF8591T

PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591

- 11 -

武汉科技大学本科毕业设计

具有4个模拟输入、一个模拟输出和一个串行IIC总线接口。PCF8591的三个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个IIC总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向IIC总线以串行的方式进行传输[9]。芯片内部结构如图3.7所示。

图3.7 芯片内部结构图

PCF8591T芯片从霍尔传感器处采集模拟电压信号,并通过IIC总线实现与单片机间的双向通信,其电路原理如图3.8所示。

图3.8 PCF8591T电路原理图

- 12 -

武汉科技大学本科毕业设计

其中,AIN0~AIN3为模拟信号输入端。A0~A2与GND相连并接地,从而确定了芯片的硬件地址。VDD、VSS为芯片的电源端,接5V。SDA、SCL分别作为IIC总线的数据端和时钟端,与单片机的两个具有输入/输出功能的I/O引脚相连,实现数据的串行传输功能。

3.5 人机交互模块

3.5.1 按键部分

根据设计要求,为了能够在液晶显示器上直观的显示车速的具体数字同时还可以通过人工输入的方式设置三个报警阈值,硬件电路上采用了6个轻触微动开关。一个作为翻页键,一个作为换行键,剩余四个用于设置报警阈值,实现+1,-1,+10,-10的功能。按键部分的电路原理如图3.9所示。

图3.9 按键输入电路

其中Ka1,Ka2,Ka3,Ka4,Ka5,Ka6分别接单片机的PH3,PH2,PH1,PH0,PE3,PE2引脚。当有按键按下时,引脚上电压为高电平状态,当无按键按下时,这六个I/O口均处于低电平状态。

3.5.2 OLED显示部分

在液晶显示上采用了由北京龙丘公司生产的OLED液晶显示屏。因为具备轻薄、省电等特性,因此从2003年开始,这种显示设备在MP3播放器上得到了广泛应用,而对于同属于数码类产品的DC与手机,此前只是在一些会展上展示过采用OLED屏幕的工程样品。自2007年后,其寿命得到很大提高,具备了许多LCD不可比拟的优势。其OLED屏如图3.10所示。

- 13 -

武汉科技大学本科毕业设计

图3.10 龙丘OLED屏

该OLED模块有7个引脚,用于与单片机间的通信。PCB板的七个引脚从左到右依次为GND(接地)、VCC(接+5V电源)、D0(CLK时钟)、D1(MISO数据)、RES(复位)、DC(数据/命令)、CS(片选,已接地,不用接)。

OLED屏与单片机间的接口电路原理图如图3.11所示。

图3.11 OLED接口电路

其中,DIN、CLKK、CE、DC端分别接单片机的PS5、PS4、PS7、PS6引脚[10]。

3.6 语音报警模块

根据设计要求,当超限小于<20%时,需要灯光报警。为此,采用了一个红色的小LED灯,与单片机的I/O引脚相连,串联一个1KΩ的电阻(限制导通电流,使灯光处于一个比较合适的亮度值),然后接地。具体的电路原理如图3.12所示。

- 14 -

武汉科技大学本科毕业设计

图3.12 闪烁报警电路

当超限>20%时,采用语音报警。由于语音报警需要预先存储一段音频报警文件,为了尽可能的不占用单片机有限并且宝贵的内存资源,设计中用到了具有128Mb存储容量的SD卡,存储支持播放的4Bit ADPCM格式文件。通过音频解码芯片读取文件,音频解码芯片和SD卡的工作电压为3.3V,不插SD卡时的静态电流为16uA,支持单片机控制和按键控制,可以调用任意段落的语音进行播放[11]。

TF卡语音模块可应用在汽车电子(防盗报警器、倒车雷达、GPS导航仪、电子狗等)、智能家居系统、家庭防盗报警系统、理疗器人声提示、音乐播放、家电(电磁炉、电饭煲、微波炉)、娱乐设备、学习模型(早教机、儿童有声读物)、智能交通设备(收费站、停车场)、通信设备(电话)、工业控制领域(电梯、工业设备)、玩具等。

该语音模块的实物如图3.13所示。

图3.13 语音模块实物图

关于各个引脚的功能描述,如表3.1所示。

封装引脚 引脚标号 - 15 - 功能描述

武汉科技大学本科毕业设计

表3.1 功能描

1 2 3 4 5 6 7 8 9 10 11 12 13 14 /PREVIOUS NC CLK DATA BUSY /P/S NEXT VCC GND /RESET SPK+ SPK- NC AUDIO 上一曲,可按键触发 空 时钟脉冲端 数据命令输入端 播放忙信号输出端 播放/停止 下一曲 电源正极(3.3V) 电源负极 复位端 音频输出(+) 音频输出(-) 空 内置反馈DAC 述

根据设计要求以及所采取的设计方案,该模块的硬件电路原理如图3.14所示。

图3.14 语音模块电路原理图

其中,模块的CLK、DATA端分别与单片机的PA6、PA7引脚连接,当做IIC总线的时钟端和数据段,实现单片机与模块的IIC通信,将采集到的数字量数据经过串行传输传递给单片机。

- 16 -

武汉科技大学本科毕业设计

4 系统软件设计

软件作为整个汽车超速报警器系统的灵魂,其编写将直接关系到系统能否正常工作。各模块功能的实现不仅需要硬件电路的支撑,还需要软件编写的合理可行。在设计的2.5ms控制周期下,对系统信号处理及硬件电路驱动在时间上做一个合理分配,保证各模块的功能既能顺利实现又不相互干扰。

本章将主要从单片机模块初始化、人机交互、IIC总线、语音模块驱动等几个方面来详细的论述。

4.1 系统程序框架图

为了保证超速报警器的稳定运行要求,我们需要使整个系统的控制具有良好的实时性和周期性,除了既要能实现功能的完整性,还要使其在安排的时间里做完所有的事情而又不影响其他事件的执行。因此,设计时采用了定时器的中断功能。

在程序执行时,从主函数开始,首先完成对系统底层的初始化设置,然后开启定时器中断,进入到主函数的for循环中。此后,程序会一直处于for循环中执行,除非中断触发,程序才会转入到中断函数中去执行,但在中断函数执行完毕后,程序会返回到刚才中断前的for循环中的断点处继续执行下去。

接下来,我们需要对各模块功能的实现做一个时间上的安排。从前一段的论述中可知,for循环中执行的内容会经常性的被打断,而中断函数则会被定时执行,并且最多可有2.5ms的执行时间。因此,对于那些不太重要或者要求不太高的辅助函数,可以将之放在for循环中去执行,这样可以节省系统更多更为宝贵的时间去执行更为重要的事情。因此,在设计及编写上将按键读取、OLED显示放在了for循环中,而将IIC总线的驱动、读取A/D转换值及灯光报警的实现放在了中断函数中。由于语音模块的驱动时间较长(300~400ms),很明显,中断函数是执行不完的,也没这个必要,通过若干个周期的中断函数延时(设置变量计数),即可在for循环中实现,并且也不会影响到按键的读取及OLED屏的正常显示。这样,就能在时间上对各模块功能的实现做到很好的分配。

整个程序执行过程由于没有外部中断的干预,从宏观上来看,其实现是按时间顺序无限执行的。即首先完成系统的初始化设置,再通过人机交互界面利用按键对报警阈值做好相应的设置,系统即开始正式执行主控程序部分,采集汽车车轮转速,并实时的在液晶显示屏上显示出当前的车速,监控车速,当有超速行为时,相应的采用灯光闪烁报警或者语音提示报警[12]。

系统控制的总体结构图如图4.1所示。

- 17 -

武汉科技大学本科毕业设计

图4.1 系统总体结构图

下面将分块逐步介绍各个软件模块。

4.2 初始化程序设计

4.2.1 系统时钟模块

MC9S12XS128的时钟和复位发生器(Clocks and Reset Generator,CRG)模块提供了锁相环(PLL)功能,单片机使用PLL功能能够获得更高的总线频率,这对于需要提高单片机运行速度的场合是十分必要的。单片机的内部锁相环(IPLL)具有以下基本特征:①时钟参考分频器;②时钟后分频器;③可配置的内部滤波器(无外部引脚);④减少抖动和降低辐射的可选频率调制模块;⑤退出或进入锁定条件可产生中断请求。

CRG时钟合成寄存器(SYNR),如表4.1所示。

表4.1 S12XECRG合成寄存器

读/写 复位值 Bit7 VCO1 0 Bit6 VCO0 0 Bit5 SYNR5 0 Bit4 SYNR4 0

Bit3 SYNR3 0 Bit2 SYNR2 0 Bit1 SYNR1 0 Bit0 SYNR0 0 读:任何时刻;写:除CLKSEL寄存器中的PLLSEL=1的任何时刻。

VCO1,VCO0:这两位用于确定压控振荡器VCO的增益以获得频率最佳稳定性并锁定。为了IPLL正常工作,必须根据表4.1中的实际VCO频率来配置这两位值,如表4.2所示。

- 18 -

武汉科技大学本科毕业设计

表4.2 VCO时钟频率选择

VCOCLK频率范围/MHZ 32≤fvco≤48 48

VCOFRQ[1:0] 00 01 VCOCLK频率范围/MHZ 保留 80

表4.3 CRG时钟参考分配寄存器

读/写 复位值 Bit7 REFF1 0 Bit6 REFF0 0 Bit5 REFD5 0 Bit4 REFD4 0

Bit3 REFD3 0 Bit2 REFD2 0 Bit1 REFD1 0 Bit0 REFD0 0 读:任何时刻;写:除CLKSEL寄存器中的PLLSEL=1的任何时刻。

REFFRQ1,REFFRQ0:这两位用于配置PLL内部滤波器以获得频率最佳稳定性并锁定。为了IPLL正常工作,必须根据表4.3中的实际REF时钟频率设置这两个值,如表4.4所示。

表4.4 参考时钟频率选择

REFCLK频率范围/MHZ 1≤fref≤2 212 REFFRQ[1:0] 10 11

PLL时钟频率以及由PLL产生的MCU总线时钟频率由下列公式计算得来: fVCO?2?fOSC?(SYNDIV?1)/(REFDI ?V1) (4.1)

fPLL?fVCO/(2?POSTD)I (4.2) V/2 (4.3) fBUS?fPLL

式中,SYNDIV的值由SYNR寄存器中的BIT5~BIT0确定,REFDIV值由REFDV寄存器中的BIT5~BIT0确定,POSTDIV值由POSTDIV寄存器中的BIT5~BIT0确定。

CRG时钟后分频寄存器(POSTDIV),如表4.5所示。

表4.5 CRG后分频寄存器

读 写 复位值 0 Bit7 0 Bit6 0 0 0 Bit5 0 Bit4 POSTDIV4 0 Bit3 POSTDIV3 0 Bit2 POSTDIV2 0 Bit1 POSTDIV1 0 Bit0 POSTDIV0 0 - 19 -

武汉科技大学本科毕业设计

读:任何时刻;写:除CLKSEL寄存器中的PLLSEL=1时的任何时刻。 POSTDIV4~POSTDIV0:这5位用于确定公式中的POSTDIV值。如果POSTDIV=0x00,则fbus= fvco。如果POSTDIV≠0,则PLLCLK频率fbus和VCOCLK频率fvco之间关系由公式(4.2)计算得到。为了得到80MHZ的总线频率,亦即fbus=80MHZ,由公式(4.3)可知锁相环频率要达到160MHZ,取寄存器SYNR=0xC9,寄存器REFDV=0x81,则SYNDIV=9,REFDIV=1,有fbus=2*16*(9+1)/(1+1)=80MHZ。

4.2.2 TIM定时模块

为了实现单片机2.5ms的中断周期,需要利用到TIM定时模块的自由运行计数器及输入捕捉/输出比较功能。自由运行计数器部分的设置包括两个系统控制寄存器TSCR1、TSCR2,如表4.6所示。

表4.6 定时器系统控制寄存器1

读 写 复位值 Bit7 TEN 0 Bit6 TSW 0 Bit5 TSF 0 Bit4 TFF 0

Bit3 PRNT 0 Bit2 0 0 Bit1 0 0 Bit0 0 0 表中PRNT位为精确定时器设置位,为0时使能普通定时器并且TCSR2寄存器的PR0、PR1和PR2位用于计数器的分频因子选择;为1时使能精确定时器并且PTPSR寄存器的所有位被用于精确定时器的分频因子选择。复位后该位只能写一次,如表4.7所示。

表4.7 定时器系统控制寄存器2

读 写 复位值

Bit7 TOI 0 Bit6 0 0 Bit5 0 0 Bit4 0 0 Bit3 TCRE 0 Bit2 PR2 0 Bit1 PR1 0 Bit0 PR0 0 该寄存器用来设置TIM模块自由运行计数器预分频器的分频因子、是否允许定时器溢出中断、是否允许通过通道7输出比较事件复位定时器计数寄存器TCNT。TIO为定时器溢出中断允许位,为1时允许定时器溢出中断,当TOF标志置位时,允许请求硬件中断;为0时禁止定时器溢出中断。还有几个输入捕捉/输出比较寄存器的设置不一一赘述[13]。按照上表中的方式去设置即可。将代码附之如下:

TSCR1 = 0x10; //先关闭TIMER,允许快速清零

TSCR2 = 0x05; // TSCR2_PR = 4,32分频,禁止定时器溢出中断 TIOS = 0x03; //ch0,ch1输出比较

- 20 -

武汉科技大学本科毕业设计

TCTL2 = 0x00; //开启通道0、禁止通道1的比较动作 TC0 = 6250; //T=1/(80MHZ/32)*6250=2.5ms TIE_C1I=0; //使能TC1中断,暂不使能TC0中断 TIE_C0I=1;

4.3 人机交互设计

在本章第一节中提到过,人机交互部分功能的实现应安排在main函数的for循环中。在单片机上电复位后,首先需要做的是对OLED屏进行初始化设置,因此需要编写一个LCD_Init()子函数,使屏处于待显示状态。为了能够显示汉字字符,用到了一个叫做“通用LED点阵文字图片代码生成下载器”的软件,如图4.2所示。

图4.2 字模处理软件

用这个软件生成了一组16*16大小的文字数据,建立了一个数组保存起来。但实际显示出来的效果比较怪,文字并不是正的,而是横躺着的效果,因此,在进入for循环前,写了一个location_change(16)函数,其功能是对点阵数据进行坐标变换并用另外一个数组存下来,使屏能够正常的显示汉字信息。

做完了以上两步,才开启中断,进入到for循环中去。先执行按键扫描函数Key_Scan(),也就是不断的读取相应的6个I/O引脚的电平状态,判断有无按键按下,当有按键按下时,修改相应变量(翻页、换行、加减数据)的值。

接下来是执行显示屏的显示功能,俗称“刷屏”,即函数redraw()。刷屏过快,屏幕上的字符信息会一直处于闪烁状态,不便于观察;刷屏过慢,屏上的信息会来不及刷新,并且在显示效果上也会感觉很卡,也不行,因此对刷新频率的调整,要结合实际观察效果来进行具体的调整。

- 21 -

武汉科技大学本科毕业设计

在程序编写过程中,对人机交互部分的按键输入及显示部分要多做调试,找出bug,弥补不足,调整显示,使系统的性能得到良好保证。

4.4 IIC总线读取A/D转换值

NXP 半导体(原Philips 半导体)公司于20世纪80年代初推出了一种简单的双向二线制串行通信总线,这种总线被称为Inter-IC(IIC或I2C)总线。目前IIC 总线已经成为业界嵌入式应用的标准解决方案,同SPI总线一样,被广泛地应用在基于微控制器与各种外围设备之间的串行通信,可以作为控制、诊断与电源管理等方面的数据通信总线,主要应用领域包括消费类电子、电信产品等。多个符合IIC 总线标准的器件都可以通过同一条I2C 总线进行通信,而不需要额外的地址译码器。IIC 是一种两线制串行总线,因此操作非常简单。

IIC 总线总是以字节(Byte)为单位收发数据的,每次传送的数据是8位。每次传输从起始信号开始,之后传送的字节数量没有严格限制。首先传输的是数据的最高位(MSB,第7 位),最后传输的是最低位(LSB,第0位)。另外,每个字节之后还要跟一个应答位,应答位总是由接收器产生。所有数据传送结束后,主控制器发出终止信号。

IIC总线不需要额外的地址译码器和片选信号。多个具有IIC总线接口的器件都可以连接到同一条IIC总线上,它们之间通过器件地址来区分。主机是主控器件,不需要器件地址,其他器件都属于从机,需要配置有器件地址。必须保证同一条IIC总线上所有从机的地址都是唯一确定的,不能有重复,否则IIC 总线将不能正常工作。一般从机地址由7 位地址位和一位读/写位标志R/ 组成,7位地址占据高7位,读/写位在最后。读/写位是0,表示主机将要向从机写入数据;读/写位是1,则表示主机将要读取从机数据。

IIC总线主机向从机发送数据的基本格式如图4.3所示。

图4.3 发送数据格式

IIC总线主机读取从机数据的基本格式如图4.4所示。

图4.4 接收数据格式

根据相应的格式,编写IIC总线的驱动程序,包括start_I2C()、stop_I2C()、send_byte(unsigned char c)、receive_byte()、Ack_I2C(unsigned char a)函数,实现单片机与转换器PCF8591T的双向通信,将数字量信息读入单片机并算出当前汽车行进中的实际速度[14]。

- 22 -

武汉科技大学本科毕业设计

4.5 语音芯片的驱动

为了实现语音播放功能,首先需要做的是获取一段音频播放文件,一种方式是通过个人电脑的录音孔录取一段音频数据,但实际制作的过程中选择了利用语音合成软件,这样不仅可以调节语速、语调,还可以选择标准的男音、女音,从而获得更佳的播放效果。所采用的语音合成软件如图4.5所示。

图4.5 语音合成软件

通过这个软件生成采样率为12000,WAV或者MP3格式的音频文件,再转化为AD4格式并存储在SD卡中。TF卡中可放置512段语音,语音文件名为10进制放置如0000、0001??等。语音播放模块音频解码芯片的驱动控制时序如图4.6所示。

图4.6 控制时序

- 23 -

武汉科技大学本科毕业设计

控制时序的延时很长,要执行完这段程序需要大约330ms的时间,显然若要在中断函数中安排这段程序的执行是不可能的,因此放在了for循环中,通过若干个中断周期的计数来进行延时,这样做既能做到延时又不会干扰到中断里面函数的执行,是一个很明智的安排。接下来需要做的工作是按照这段控制时序来编写程序使音频解码芯片响应单片机的指令解码音频文件并且播放语音。

- 24 -

武汉科技大学本科毕业设计

5 系统开发平台与辅助调试工具

5.1 系统硬件开发平台

在制作超速报警器系统的硬件电路时,为了让其性能更加稳定,可以定做印刷电路板(鉴于是一次毕业设计,用万用板搭做了实物而没画PCB板)。在画电路原理图时,用到了Altium公司推出的Altium Designer 09专业制图软件,它是业界首例将设计流程、集成化 PCB 设计、可编程器件(如 FPGA)设计和基于处理器设计的嵌入式软件开发功能整合在一起的产品,具有将设计方案从概念转变为最终成品所需的全部功能。相比其早期产品Protel,它在性能和功能上都有很大提升,完全可以胜任诸如超速报警器之类的硬件电路的设计工作。

在使用上,其界面美观,功能完善,使用起来十分方便,此外系统元件库集成了目前世界上绝大部分芯片厂商的大多数芯片的原理图和封装,系统所用的元件基本都能在这里找到,这为我节约了不少时间和精力。

画图时,首先新建一个工程项目,为该工程添加一个原理图文件,然后从画图框右边的library库中找到需要的元件,将其拖到画图框,选择正确的封装。元件添加完毕后,再选择连线工具,将元件对应引脚连接起来即可,当在库中无法找到对应元件时,也可自己新建一个原理图库,在实施起来也很方便,其部分界面如图5.1所示。

图5.1 DXP界面

- 25 -

武汉科技大学本科毕业设计

画完了原理图,若要继续为工程添加一个PCB文件,在将原理图导入PCB之前,设定好对应的布线规则,这样就能为以后的布线带来很多方便,并能自动检查出布线时的错误。做好这一切之后,其强大的布线能力就得以显现了,我们可以根据需要任意调整元件布局、修改走线宽度及焊盘与过孔尺寸等等。在画完图后,我们还可以通过规则检查发现一些图中隐藏的错误,使做出来的PCB板更加完美[15]。

5.2 系统软件开发平台及调试工具

作为系统灵魂的发源地,好的软件开发平台也很重要。我们使用的软件开发平台为Code Warrior 5.0。作为由 Metrowerks 公司提供的专门面向 Freescale 所有MCU与DSP嵌入式应用开发的软件工具,主要包括了集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器等,在Code Warrior软件中可以使用汇编语言或C语言,以及两种语言的混合编程。

在使用时,首先打开IDE,从弹出的startup框中选择“Create New Project”,新建一个工程文件,然后选择对应的芯片型号,在依次向下选择编程语言,数据类型等,作完这些工作以后,一个工程就建好了,打开main.c就可以开始编写程序了,如图5.2所示。

图5.2 code warrior 5.0界面

在编程过程中,由于涉及到的硬件初始化较多,对初学者还可以使用PE模式,这

- 26 -

武汉科技大学本科毕业设计

样能省去很多繁琐的操作。

编写好程序,点击“编译”、“链接”,无误后就可以使用BDM下载器将程序下载到单片机中了,这时,如不拔去BDM下载器,还可利用系统自带软件hiwave.exe进行在线调试,如监视寄存器状态、各变量变化情况,修改PC指针、设置断点等,这会给调试带来很多方便,如图5.3所示。

图5.3 BDM在线调试界面

- 27 -

武汉科技大学本科毕业设计

6 总结

从阳春三月到而立之夏,从学期开始到邻近毕业,从选定我的毕业设计起,根据目的和要求构思系统框架、画系统电路原理图、搭建系统硬件电路、编写系统运行程序,再到后期不断的调试和完善,毕业设计就像一粒种子一样破土而出,生根发芽,沐浴在阳光下,茁壮成长。这是一颗健康的小树苗,希望你能荫出一片属于你自己的身影,造福人类。

本次毕业设计是一次基于单片机的应用开发,因为有过学习飞思卡尔16位单片机的经历,所以我选择了自己较为熟悉的XS系列MC9S12XS128单片机。但这并不意味着设计过程的一帆风顺,相反,为了尽可能的让系统具备一定实用价值同时也是基于一个学习的心态,接触到了很多之前不会的东西,如IIC总线及语音播放等。设计过程中也遇到了很多问题,如利用OLED屏显示汉字时,通过字模处理软件获取的字模数据格式不对,为此还专门写了一个坐标变换函数;编写语音模块的驱动程序时,扬声器并没有按照预期发声,然后逐步排查,解决了问题;程序在规定的时间内执行不完,bug等等。实现过程可谓是困难重重,我觉得这就是实践所必须要经历的坎坷,通过毕业设计提高自己的意义要大于毕业设计本身的意义。出现问题是好事,冷静下来,分析问题产生的原因,逐一排查,最后找到症结所在并解决问题,从而不断提高自身解决问题的能力。这样就能从中有所收获,是很有意义的。

想来想去,这该是一段下结论的话,至此,毕业设计基本做完了。值得高兴吗?可内心又并不想这么早结束,毕竟这意味着要给本科四年的学习画上了一个句号。人终究是有感情动物,对熟悉的人、事、物会去珍惜、眷念,感谢大学四年来最可爱的同学们你们的陪伴,未来会很美好,我们去共同创造吧。

- 28 -

武汉科技大学本科毕业设计

参考文献

[1] 蒋维.车辆超载、限速报警系统的研制[J].电子工程师,2004,30(12)

[2] 王宜怀主编.嵌入式系统设计实战:基于飞思卡尔S12X微控制器[M].(第一版).北京:北京航空航天大学出版社,2011

[3] 彭宣戈,肖斌.一种基于89C51对机动车辆超速的监测报警系统[J].微计算机信息,2006,22(22)

[4] 唐凯,江开发,张弛.基于光电耦合器的汽车超速报警器设计[J].公路与汽运,2008,(2)

[5] 杨辉,龚伟,刘烈等.汽车超速报警器设计[J].科协论坛:下半月,2011(7)

[6] 康华光,陈大钦,张林主编.电子技术基础[M].(第五版).北京:高等教育出版社,2006 [7] 张阳,吴晔,滕勤主编.MC9S12XS单片机原理及嵌入式系统开发[M].(第一版).北京:电子工业出版社,2011

[8] 严世胜,周萍.一种高性能价格比的汽车超速报警系统[J].广西大学学报(自然科学版),2009,34(6)

[9] An-Ping Wang. Intelligent CAN-based automotive collision avoidance warning system[J].Networking, Sensing and Control on IEEE International Conference,2004(1) [10] Leen,G. Expanding automotive electronic systems[J].Computer,2002,35(1)

[11] Zongtao Duan.Early Warning of Highway Traffic Safety Information Service System[J].Information technology,2013,12(18):3849~3854.6p.

[12] 谭浩强主编.C程序设计[M].(第三版).北京:清华大学出版社,2005

[13] 郑莉,董渊,何江舟主编.C++语言程序设计[M].(第四版).北京:清华大学出版社,2010

[14] 李景峰,杨丽娜,潘恒主编.Visual C++串口通信技术详解[M].(第一版).北京:机械工业出版社,2010

[15] 周冰主编.Altium Designer Summer 09从入门到精通[M].(第一版).北京:机械工业出版社,2011

- 29 -

武汉科技大学本科毕业设计

致谢

做毕业设计的这几个月里,感谢宋玉阶老师对我们这一组成员的悉心关怀和指导,从百忙中抽出宝贵的时间把大家集中到一起来进行答疑解难,让我们在一些关键的地方找到突破口,最终顺利的完成了毕业设计。

同时感谢亲爱的母校,在你的哺育中我不断成长,收获了美好的四年大学时光,这将会是我人生中值得回味的一段经历。

最后,感谢你,我可爱的同学们。谢谢你们这四年来的陪伴,大家一起生活,一起学习,一起成长。真的很难得,愿我们的友谊长存,未来,我们一起加油。

- 30 -

武汉科技大学本科毕业设计

附录A

超速报警器系统主要的程序代码: 头文件部分: #include #include #include\#include #include\#include\#include\

初始化部分函数:

//--------------初始化I/O口-------------// void Init_IO(void) {

DDRK_DDRK0 = 1; //TF卡RESET端 DDRK_DDRK1 = 1; //TF卡CLK端 DDRK_DDRK2=1; //TF卡DATA端 DDRK_DDRK3=0; //TF卡BUSY端 DDRA_DDRA0=1; //用于闪烁报警

DDRA_DDRA6=1; //用作I2C总线的时钟线 DDRA_DDRA7=1; //用作I2C总线的数据线

DDRJ_DDRJ7=1; //利用PJ7测程序执行的时间 }

void Init_portk() {

PORTK_PK0=1; PORTK_PK1=1; PORTK_PK2=1; PORTA_PA0=0; }

- 31 -

武汉科技大学本科毕业设计

//-------------初始化锁相环------------// void Init_PLL(void) {

CLKSEL &=0x7F; //设置OSCCLK作为系统时钟 PLLCTL &=0x8F; //禁止锁相环

//PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1), fbus=PLLCLK/2 SYNR=0xC9; REFDV=0x81;

PLLCTL |=0x70; //使能锁相环 asm NOP; asm NOP;

while(!(CRGFLG&0x08)); //PLLCLK锁定

CLKSEL |= 0x80; //设置PLLCLK为系统时钟 }

信息采集部分:

//----------启动I2C总线函数---------//

void start_I2C() {

unsigned char i;

SDA=1; //发送起始条件的数据信号 for(i=0;i<9;i++) _asm(nop); //1.26us

SCL=1; //起始条件建立时间大于4.7us,延时 for(i=0;i<36;i++) _asm(nop); //5us

SDA=0; //发送起始信号 for(i=0;i<31;i++) _asm(nop); //起始条件锁定时间大于4us延时,4.3us SCL=0;

for(i=0;i<16;i++) _asm(nop); //钳住I2C总线,准备发送或则接受数据,2.2us }

//---------结束I2C总线函数-----------// void stop_I2C() {

unsigned char i;

- 32 -

武汉科技大学本科毕业设计

SDA=0;

for(i=0;i<9;i++) _asm(nop); //发送结束条件的数据信号 SCL=1;

for(i=0;i<36;i++) _asm(nop); //结束条件建立时间大于4us,5us SDA=1;

for(i=0;i<31;i++) _asm(nop); //发送I2C总线结束信号,4.3us }

//---------字节数据发送函数----------// void send_byte(unsigned char c) {

unsigned char i,j;

for(i=0;i<8;i++) //要发送的数据长度为8位 {

if((c<

for(j=0;j<9;j++) _asm(nop);

SCL=1; //置时钟线为高,通知被控器开始接收数据位

for(j=0;j<36;j++) _asm(nop); //保证时钟高电平周期大于4us SCL=0; }

for(i=0;i<16;i++) _asm(nop); //八位发送完后,释放数据线,开始接收应答信号 SDA=1; //SDA是一个双向线,这里似乎有问题?

for(i=0;i<16;i++) _asm(nop); SCL=1;

for(i=0;i<25;i++) _asm(nop); DDRA_DDRA7=0; if(SDA==1) Ack=0; else Ack=1; DDRA_DDRA7=1; SCL=0;

for(i=0;i<16;i++) _asm(nop); }

- 33 -

武汉科技大学本科毕业设计

//---------字节数据接收函数----------// unsigned char receive_byte() {

unsigned char i,j,retc; retc=0;

SDA=1; //置数据线方式为接收方式 for(i=0;i<8;i++) {

for(j=0;j<9;j++) _asm(nop);

SCL=0; //置时钟线为0,准备接收数据位 for(j=0;j<36;j++) _asm(nop); //延时4.7us以上

SCL=1; //置时钟线为高,使数据线上数据有效 for(j=0;j<16;j++) _asm(nop); DDRA_DDRA7=0; retc=retc<<1;

if(SDA==1) retc=retc+1;

for(j=0;j<16;j++) _asm(nop); //读数据位,存入retc中 }

DDRA_DDRA7=1; SCL=0;

for(j=0;j<16;j++) _asm(nop); return(retc); }

//---------应答子函数------------// void Ack_I2C(unsigned char a) {

unsigned char i; if(a==0) SDA=0; else SDA=1;

for(i=0;i<25;i++) _asm(nop); SCL=1;

for(i=0;i<36;i++) _asm(nop); //时钟低电平周期大于4us

SCL=0; //清时钟线,钳住I2C总线以便继续接收

for(i=0;i<16;i++) _asm(nop);

- 34 -

武汉科技大学本科毕业设计

}

//------AD转换通过I2C总线发送命令字节数据函数-----//

unsigned char I2C_send_byte(unsigned char address,unsigned char control_word) {

start_I2C(); send_byte(address);

if(Ack==0) return(0); send_byte(control_word);

if(Ack==0) return(0); stop_I2C(); return(1); }

//----AD转换通过I2C总线读取字节数据函数---// unsigned char I2C_read_byte(unsigned char address) {

unsigned char c; start_I2C(); send_byte(address+1); if(Ack==0) return(0); c=receive_byte();

Ack_I2C(1); //发送非就答位 stop_I2C(); //结束总线 return(c); }

//---------8位精度的AD采集以及I2C总线的实现--------// void sampling_voltage() {

I2C_send_byte(PCF8591,0x43); //ADC1,模数转换2,热敏电阻 voltage_data=I2C_read_byte(PCF8591); }

字模的数据处理部分:

/******************对字模进行坐标变换,使其正确的显示出来*************/ byte data_flag=0;

- 35 -

武汉科技大学本科毕业设计

unsigned char data[16][16]={0};

byte true_tab[32]={0}; //最后转得的真实字库数据 byte ziku[512]={0};

void location_change(unsigned char m) //16个数 {

unsigned char j,t,x; unsigned int i,mul; byte cell; byte bit_choose,n;

for(x=0;x

for(i=0;i<16;i++) for(j=0;j<16;j++) data[i][j]=0;

for(i=0;i<32;i++) true_tab[i]=0; mul=x*32;

for(i=mul;i

cell=F16x16[i]; bit_choose=0x80; for(j=8;j<16;j++) {

if(((cell)&(bit_choose))!=0) data[i-mul][j]=1; bit_choose=bit_choose>>1; } }

for(i=mul+16;i

cell=F16x16[i]; bit_choose=0x80; for(j=0;j<8;j++) {

if(((cell)&(bit_choose))!=0) data[i-16-mul][j]=1; bit_choose=bit_choose>>1; }

- 36 -

武汉科技大学本科毕业设计

}

for(j=0;j<16;j++) {

for(i=0;i<8;i++) { n=0;

if(data[i][j]==1) { n=1;

for(t=0;t

for(j=0;j<16;j++) {

for(i=8;i<16;i++) { n=0;

if(data[i][j]==1) { n=1;

for(t=0;t

} j=0;

for(i=mul;i

ziku[i]=true_tab[j]; j++; } } }

- 37 -

武汉科技大学本科毕业设计

液晶屏的预显示及按键输入部分:

/****************液晶屏的预显示****************/ void pre_show(void) {

redraw_flag2=redraw_flag1; redraw_flag1=page_num;

if(redraw_flag2 != redraw_flag1) redraw_flag3=1; else redraw_flag3=0;

if(redraw_flag3==1) LCD_CLS();

switch(page_num) {

case 0: LCD_Print(19,0,\超速报警系统\ LCD_Print(0,3,\当前车速:\ break; case 1:

write_6_8_char(0,line_num,'*'); LCD_Print(32,0,\设置阈值\ LCD_Print(8,2,\正常:\ LCD_Print(8,4,\超限1:\ LCD_Print(8,6,\超限2:\ break; } }

/*************刷屏***************************/ void redraw() {

if(page_num==0) {

LCD_clear_L(73,4);

write_6_8_int(73,4,real_speed); write_6_8_string(98,4,\ }

if(page_num==1) {

- 38 -

武汉科技大学本科毕业设计

LCD_clear_L(60,3);

write_6_8_int(60,3,normal_speed); write_6_8_string(85,3,\

LCD_clear_L(60,5);

write_6_8_int(60,5,out1_speed); write_6_8_string(85,5,\

LCD_clear_L(60,7);

write_6_8_int(60,7,out2_speed); write_6_8_string(85,7,\ } }

/*************修改变量值*********************/

void change_value(unsigned char page,unsigned char line,int num) {

if(page==1)

{ switch(line) {

case 2: write_6_8_char(0,2,'*'); normal_speed+=num;

if(normal_speed<0) normal_speed=0; if(normal_speed>255) normal_speed=255; break;

case 4: write_6_8_char(0,4,'*'); out1_speed+=num;

if(out1_speed<0) out1_speed=0;

if(out1_speed>255) out1_speed=255; break;

case 6: write_6_8_char(0,6,'*'); out2_speed+=num;

if(out2_speed<0) out2_speed=0; if(out2_speed>255) out2_speed=255; break;

- 39 -

武汉科技大学本科毕业设计

} } }

/******************按键扫描********************/ void Key_Scan(void) {

unsigned char num=0;

if(change_page) //可能有翻页按键按下 {

LCD_DLY_ms(15); //延时消抖 if(change_page==1&&page_num==1) {

while(change_page); if(page_num<1) page_num++; else page_num=0; line_num=2; pre_show(); }

if(change_page==1&&page_num==0) {

while(change_page); page_num++; pre_show(); } }

if(change_line) //可能有换行按键按下 {

LCD_DLY_ms(15); //延时消抖 if(change_line==1&&page_num==1) {

while(change_line);

write_6_8_char(0,line_num,' '); if(line_num<7) line_num+=2; else line_num=2;

- 40 -

武汉科技大学本科毕业设计

if(line_num>7) line_num=2; write_6_8_char(0,line_num,'*'); } }

if(Add_10) //可能有加10按键按下 {

LCD_DLY_ms(15); //延时消抖 if(Add_10==1&&page_num==1) {

while(Add_10);

change_value(page_num,line_num,10); } }

if(Sub_10) //可能有减10按键按下 {

LCD_DLY_ms(15); //延时消抖 if(Sub_10==1&&page_num==1) {

while(Sub_10);

change_value(page_num,line_num,-10); } }

if(Add_1) //可能有加1按键按下 {

LCD_DLY_ms(15); //延时消抖 if(Add_1==1&&page_num==1) {

while(Add_1);

change_value(page_num,line_num,1); } }

if(Sub_1) //可能有减1按键按下

- 41 -

武汉科技大学本科毕业设计

{

LCD_DLY_ms(15); //延时消抖 if(Sub_1==1&&page_num==1) {

while(Sub_1);

change_value(page_num,line_num,-1); } } }

TF卡的语音播放驱动:

//-------------------------语音播放驱动---------------------------// void TF_SD_play() {

unsigned char i; PORTK_PK0=0;

Dly_ms(5); PORTK_PK0=1;

Dly_ms(300);

PORTK_PK1=0; Dly_ms(2);

for(i=0;i<16;i++) {

PORTK_PK1=0; PORTK_PK2=0; Dly_100us();

PORTK_PK1=1; Dly_100us(); }

PORTK_PK2=1; Dly_ms(20); }

- 42 -

武汉科技大学本科毕业设计

2.5ms的中断定时:

//---------定时器1.全局控制基准定时器,实现1.25ms周期性中断-------// #pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 8 Timer1(void) {

TFLG1_C0F=1;

TC0+=6250; //2.5ms

sampling_voltage();

if(LED_cnt>0) LED_cnt--; //用于灯光闪烁的频率控制 if(real_speed>normal_speed&&LED_cnt==0&&real_speed<=out1_speed) {

PORTA_PA0=~PORTA_PA0; LED_cnt=200; }

if(real_speed<=normal_speed) PORTA_PA0=0;

if(redraw_cnt>0) redraw_cnt--; //用于刷屏的递减

if(play_delay_flag==1) //控制语音播放用的递减 {

if(play_delay_cnt<1400) play_delay_cnt++; else {

play_delay_flag=0;play_delay_cnt=0; } } }

#pragma CODE_SEG DEFAULT

Main函数部分: void main(void) {

- 43 -

武汉科技大学本科毕业设计

DisableInterrupts;

Init_IO(); LCD_Init(); Init_PLL(); Init_portk(); Init_ATD(); Init_TIM();

location_change(16); EnableInterrupts;

TSCR1_TEN =1; //start Timer Dly_ms(1000); pre_show(); for(;;) {

if(real_speed>out1_speed&&PORTK_PK3==0&&play_delay_flag==0) {

TF_SD_play(); play_delay_flag=1; } else {

Key_Scan(); //按键扫描 if(redraw_cnt==0) {

redraw(); //刷屏 redraw_cnt=20; } } } }

- 44 -

本文来源:https://www.bwwdw.com/article/ww0o.html

《超速报警系统的设计与实现(本科毕业论文) - 图文.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top