基于51单片机的出租车计费系统
1、用一个独立按键控制汽车前进档位变化,根据按下次数不同,分别是1档→2档→3档→4档→1档…..,档位不同体现在直流电机的转速变化,档位值显示数显管;(40分) 2、根据档位值,以及运行时期,实时将里程数显示在数显管上;(30分) 3、有暂定功能;当暂停按钮按下,直流电机停转,里程数静止不变;(20分) 4、具有里程清零功能;清零时,里程表显示为0;(10分) ### 基于51单片机的出租车计费系统 #### 项目概述 本项目设计了一种基于51单片机的出租车计费系统,该系统能够通过控制直流电机模拟车辆行驶,并根据不同的行驶状态(如档位、运行时间等)计算出相应的里程数,进而实现计费功能。系统主要包括以下几个部分:档位切换、里程显示、暂停功能及里程清零。 #### 关键技术点详解 ##### 1. 档位切换 - **硬件配置**:采用一个独立按键来控制档位的变化,按键每次按下都会触发档位的变化。 - **软件实现**:通过检测按键状态的变化,利用`PWM_Num`变量记录当前档位,当按键被按下时,`PWM_Num`会自增,达到4后回到0,从而形成循环变化的档位序列。 - **档位与电机转速的关系**:每个档位对应不同的PWM占空比,进而控制电机的转速。例如,档位1对应的PWM占空比较低,电机转速较慢,而档位4对应的PWM占空比较高,电机转速较快。这些占空比的具体数值是通过`PWM_ON`变量来控制的。 ##### 2. 实时里程显示 - **原理**:根据当前的档位值和运行时间来计算里程数,并实时更新显示。 - **实现方法**:系统通过定时器中断每秒钟更新里程数,每经过一定的时间(例如1秒),就根据当前档位的PWM占空比计算出相应的行驶距离,并累加到总里程数中。这个计算过程可以通过预先设置好的函数或公式实现。 - **显示逻辑**:里程数通过LED数字管显示出来,为了确保显示效果清晰,程序会周期性地刷新显示数据。 ##### 3. 暂停功能 - **操作方式**:通过一个专用的暂停按键实现暂停功能。 - **实现机制**:当按下暂停按钮时,程序中的`PWM`信号停止输出,使直流电机停止转动。同时,当前的里程数被保存下来,不会因为暂停操作而改变。 - **恢复机制**:再次按下暂停按钮可以解除暂停状态,系统继续正常工作。 ##### 4. 里程清零 - **功能介绍**:提供了一个简单的清零功能,允许用户在需要时将当前显示的里程数重置为0。 - **实现细节**:通过专门的清零按键实现,当按下此按键时,程序中的`sum`变量会被重新赋值为0,表示里程数清零。 #### 代码解析 - **定时器配置**:使用了51单片机内部定时器进行时间测量,通过配置`TMOD`寄存器设置定时器的工作模式,并通过`TH0`、`TL0`、`TH1`、`TL1`寄存器设置定时初值。 - **中断处理**:程序中设置了两个定时中断,分别用于控制电机速度(通过PWM信号)和更新里程显示。 - **按键检测**:通过对按键状态的检测实现档位切换、暂停与清零功能。 - **显示驱动**:通过P0口输出数字管的显示数据,P2口控制数字管的选通,实现了数字管的动态扫描显示。 #### 结论 通过上述分析,我们可以看出该出租车计费系统不仅能够模拟真实的车辆行驶状态,还能准确地计算并显示里程数,具有较高的实用价值。此外,该系统还具备简单易用的特点,用户可以通过按键轻松实现所需的功能。这种基于51单片机的设计方案为类似应用场景提供了参考案例。
- a7914456602013-12-04感谢楼主的分享,不过没有仿真图,对于新手的我看起来还是有些困难,不过谢谢了 。我会努力的学习的。
- 粉丝: 5
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助