请帮我设计一个出租车计价器里程计量装置,代码要求为:①车轮运转一圈产生两个负脉冲,轮胎周长为两米。②有启动/停止双功能开关控制。③侧量与显示范围0~999999米
时间: 2024-11-09 10:18:21 浏览: 4
设计一个出租车计价器里程计量装置并编写C51代码,大致需要如下步骤:
1. **硬件部分**:
- **传感器模块**:选择一个能感应车轮转动并输出脉冲信号的传感器,例如霍尔效应编码器,每个车轮运转一周产生两个负脉冲。
- **计数电路**:使用单片机的计数器(如8051的定时器T1)接收到脉冲后计数,因为是一个周期两个脉冲,所以需要适当配置。
- **开关模块**:两个独立的开关,一个作为启动/停止控制,另一个可能用于复位里程计。
- **显示模块**:可以是数码管,用于实时显示计数值。
2. **软件部分**(C51伪代码示例):
```c
#include <reg52.h>
#define COUNT_PER轮回 2 // 车轮一周产生两次脉冲
#define COUNTER_MAX 1000000 // 总计程范围
unsigned int distance = 0; // 里程计变量
unsigned char start_stop_state = 0;
void main() {
... // 初始化硬件及定时器T1
TR1 = 1; // 开启定时器
while(1) {
if (P1IN & SW_START_PIN) { // 检测到启动按钮按下
start_stop_state = 1;
}
else if (P1IN & SW_STOP_PIN && start_stop_state) {
start_stop_state = 0; // 停止计数
distance = (distance % COUNTER_MAX + COUNTER_MAX) % COUNTER_MAX;
}
// 计数器处理,每次计数器溢出增加里程
if(Timer1IF){
Timer1IF = 0; // 清除标志位
distance += COUNT_PER轮回;
}
display_distance(distance); // 显示当前里程
}
}
// 显示函数
void display_distance(unsigned int dist) {
... // 根据dist更新数码管显示
}
```
阅读全文