找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 396|回复: 9

[【理工类原创】] 带音乐发生器的出租车计价系统的设计

[复制链接]
发表于 2007-4-10 21:34:37 | 显示全部楼层 |阅读模式
带音乐发生器的出租车计价系统的设计



摘要:本系统以单片机和CPLD为核心,外加一个2×8小键盘作为输入控制、一个8位数码管作为输出显示,实现一个带音乐发生器的出租车计价系统。其中由单片机产生模拟车速传感器信号,并累计行程和计费,显示在数码管上,CPLD作为音乐控制设备,实现启动和下客时的一段音乐播放。



一、技术指标

   1.1 系统功能要求

       一、对已经确认载客的出租车计价,计价分为两类:1)根据车轮上的传感器,判断出租车的行驶距离,正常速度行驶按公里数计价。2)慢速行驶或等待时按时间计价。
       二、开始计价和结束计价时各播放一段音乐。
   1.2 系统结构要求

       用一片SST89E54单片机和XC95108可编程器件实现出租车计价器和音乐发生器。要求系统能按需要产生一系列脉冲信号来模拟车轮上的传感器产生信号,启动计价器后,数码管分别显示当前的行程和计价。
   1.3 系统具体功能要求

       1、按启动键后开始计价,并同时播放一段音乐。
       2、起步价为6元,起步价内行驶里程为3公里。
       3、起步价3公里以后,当行驶速度小于等于120/分钟时,不再按距离计费,改为按时间计费,每100.1元。起步3公里内不计时间。
       4、按下客键后,计价器计费停止,显示总计车费和行程,并同时播放一段音乐。
       5、按清零键后,计价器全部清零,等待下次计价,同时结束音乐播放。
       6、计价范围为000.0元到999.9元。行程显示000.0公里到999.9公里,当计价超过1000元时,一千元显示灯点亮,继续计程。
二、方案论证与比较

   根据计程传感器的工作原理,可以知道,车轮一圈的行程内只有一个脉冲,那么行程可以采用脉冲累计来获得,并且有一个脉冲对应2的换算关系(这里设定该出租车轮子的周长为2)。如此,累计行程的过程就得以实现了。我们利用SST89E54的外部中断来读取脉冲信号并进行累计。
   判断速度是该课题的关键。要判断当前的车速,有两种方案:一是采用单位行程内判断时间,进而得到平均速度。该方案较易实现,但当车子停止时(比如堵车),则有可能才时间仍无法达到单位行程。为此,我们放弃该方案。方案二是获取单位时间内汽车的行程,进而得到该时间段的平均速度。该方案在实现上虽然较方案一稍复杂些(多占用了一个定时器),但原理上比方案一更科学,精度也更高,且不会有上述的问题,所以这里采用方案二。
   由于播放音乐得时间过长,如果用单片机单独实现,无疑会影响计价的准确性,因此我们采用XC95108外接功放实现音乐播放,而仅由单片机提供播放开始信号。音乐信号较长,因此我们将音乐信号存储在单片机内的ROM上,CPLD通过发送外部中断请求获得音乐信号。
三、系统设计

   3.1 系统总体设计

       3.1.1 系统框图



   3.1.2 模块说明

       键盘输入模块:采用2×8小键盘,按下图设计:

在程序中我们规定:S1键为计价启动键;S2键为下客键;S3键为清零键;S9为模拟汽车启动按钮;S10S11S12S13S14S15分别为1m/s,5m/s,10m/s,20m/s,40m/s,100m/s速度选择按钮,S16为模拟停车按钮。
       行程、计价显示模块:用8位数码管来显示行程和计价,高四位显示行程(单位:公里),低四位显示计价(单位:元)。还有一个发光二极管做1000元显示灯,当计价满1000元时,1000元显示灯点亮。经单片机计算后得到各位数码管的显示值逐位左移到P1.0,经一个74164实现串行到并行的变换(以P1.1164时钟)。74164的各输出位与数码管相连,点亮各位数码管。当计价值高于1000元时,P0.0输出高电平,点亮与之相连的发光二极管“1000元显示灯”。
       音乐播放模块:用XC95108设计计数器分频电路,读取在单片机内ROM上预置的音乐信号计数初值,生成不同频率的方波,经电位器分压后送入LM386功率放大器,驱动扬声器播放音乐。
       单片机控制模块:系统的主控制器,控制其它模块协调工作。用SST89E54P2.2生成不同频率的脉冲,模拟车速传感器信号。SST89E54的外部中断0读取并累计传感器送来的脉冲数,计算得到当前行程。SST89E54T0做定时器用,每计时1秒,判断当前行程的改变值,进而计算得到这1s内的平均速度。然后按规定分别进行计价。单片机还作为存储器,存储预置的两首音乐,当键盘按下启动或下客键时,由SST89E54P2.0产生高电平作为CPLD音乐发生器的播放信号。P2.5CPLD音乐发生器传送音乐频率预置数(以P2.7为时钟),P2.3CPLD音乐发生器传送音乐音长预置数(以P2.6为时钟)(也是通过逐位左移到移位寄存器来实现串行变并行的)。SST89E54ALE脚还提供11.0592MHz/6的高频时钟信号,作为的音乐发生器的分频时钟。
   3.2 音乐发生器模块设计

       3.2.1 总体框图

   3.2.2 模块说明

       ① MR_1616位移位寄存器。负责将单片机送来的串行信号变成并行信号,再传递给音乐信号发生器内核作为音乐信号的频率预置数。
       ② MR_88位移位寄存器。负责将单片机送来的串行信号变成并行信号,再传递给音乐信号发生器内核作为音乐信号的音长预置数。
       ③ MUSIC_K:音乐信号发生器内核。其核心是一个16位的计数器,以单片机的ALE为时钟。当SING脚为高电平时,计数器开始计数,当ALE下降沿到来时,计数器自减1。计数器自减到0时,CPLD将输出信号反相。如此就实现了不同频率方波的输出。而且有公式:

其中N为预置数,fclkCPLD音乐信号发生器内核的时钟,即SST89E54ALE脚输出频率,为11.0592MHz/6=1843200Hzfout即输出频率,就是需要发声的音符的频率。如此分别计算出所需播放音乐的各个音符的预置数,存储在单片机的MUSIC_F[]数组中。同时CPLD再预存初值,使得周期为250毫秒。这样,以250毫秒为一个周期,每周期将单片机中预置的MUSIC_T[]数组送来的音长初值自减1,当音长初值自减到0时,这一个音符的播放时间就该结束了,于是由Ctrl产生一个下降沿,使得单片机的外部中断1启动,给CPLD送下一轮的音符频率和音长的预置数。直到单片机送来的音长预置数为0时(规定的音乐结束标志),fout输出恒为低电平,结束音乐播放。
   3.3 软件流程

   3.4 系统电路图

四、系统调试
    以秒表为计时工具,选择系统的模拟车速输出按键,一段时间后行程和价格分别显示如下表:



速度
20m/s
0
1m/s
20m/s
时间(s)
5
10
15
20
50
55
60
150
155
230
路程(km)
0.1
0.2
0.3
0.3
0.3
0.3
0.3
0.4
0.5
3
价格()
6
6
6
6
6
6
6
6
6
6











速度
20m/s
0
时间(s)
235
237
240
243
245
250
255
260
265
270
路程(km)
3.1
3.1
3.2
3.2
3.3
3.3
3.3
3.3
3.3
3.3
价格()
6.2
6.3
6.4
6.5
6.6
6.6
6.7
6.7
6.8
6.8











速度
1m/s
 
v
 
时间(s)
275
280
375

t
t+Δt
注:价格满999.9后价格显示清零。P0.0
置‘1’。可接一个LED显示。
 
路程(km)
3.3
3.3
3.4

s
1
价格()
6.9
7
7.9

999.9
0
    (为测试价格999.9元的跳变正常与否,我们在程序中给行程预置count=249600,经测试,当价格大于999.9元时1000元显示灯亮,数码管计价正常。



五、结论

    本系统以SST89E54单片机和Xilinx公司的XC95108 CPLD为核心器件,实现带音乐发生器的出租车计价系统的设计。尽管由于实验条件限制,无法直接使用车速传感器,但我们尽量使单片机生成的脉冲尽可能同实际传感器产生的脉冲一致,并保证模拟车速信号同计价系统的相对独立。在计价显示方面也尽可能多考虑特殊情况,保证了当显示值溢出4位数码管显示范围时的正常工作。启动和下客键按下时播放的音乐,也可以根据实际需要改成相应的语音信号,可扩展性较强。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2007-4-10 21:42:20 | 显示全部楼层
游客,本帖隐藏的内容需要积分高于 15 才可浏览,您当前积分为 0
回复

使用道具 举报

 楼主| 发表于 2007-4-10 21:43:14 | 显示全部楼层
游客,本帖隐藏的内容需要积分高于 15 才可浏览,您当前积分为 0
回复

使用道具 举报

 楼主| 发表于 2007-4-10 21:50:38 | 显示全部楼层
这个是我上学期做的一个项目:用Keil C51结合CPLD开发做一个出租车计价系统.
源代码我都整理上来了,呵呵~~
这里允许贴理工类的论文吧?
回复

使用道具 举报

 楼主| 发表于 2007-4-10 21:52:48 | 显示全部楼层
好象显示的有点乱,图片也不清晰了,表格也失真了,源代码不知道有没有和论坛代码相冲突?
回复

使用道具 举报

发表于 2007-4-10 22:06:11 | 显示全部楼层
引用第3楼苍鹰于2007-04-10 21:50发表的 :
这个是我上学期做的一个项目:用Keil C51结合CPLD开发做一个出租车计价系统.
源代码我都整理上来了,呵呵~~
这里允许贴理工类的论文吧?

文责自负哈~

以后被侵权别说哥没提醒你。
回复

使用道具 举报

 楼主| 发表于 2007-4-10 22:17:53 | 显示全部楼层
引用第5楼醉乡常客于2007-04-10 22:06发表的 :


文责自负哈~

以后被侵权别说哥没提醒你。

被侵权?不怕滴,反正单片机开发也不是什么很前沿的东西,花点时间谁都能学会.如果其他什么人正好开发片子也遇到这个题目,大可以把这个代码直接拿去~~我可不是那种只关心知识产权的人~~
回复

使用道具 举报

 楼主| 发表于 2007-4-10 22:24:16 | 显示全部楼层
仔细想想,还是给加上威望限制一下,醉乡常客兄说的有点怕人~~
回复

使用道具 举报

发表于 2007-4-12 04:24:09 | 显示全部楼层
应该先申请专利,然后再来发帖。
不过楼主现在这样一公开,别人想要采用这一技术就不必担心遇到专利保护问题了。

不过有个实用新型专利96201489.3——语音出租车计价器
语音出租车计价器,包括空车灯、显示器、传感器、单片机,其特点是有语音电路。本实用新型提供了一种能用语音对乘客进行问询、提醒、说明车辆有关情况并能用语音报出计价器数值的出租车计价器,可以减少目前在出租车行业中乘客遗忘物品的事情发生,方便视力不良的乘客使用。

这个专利已授权。
回复

使用道具 举报

发表于 2007-4-12 08:07:12 | 显示全部楼层
羡慕理科的研究。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-19 21:00 , Processed in 0.407035 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表