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