基于51单片机的出租车里程计数的代码,并且在数码管上显示
时间: 2024-02-27 20:53:35 浏览: 71
以下是基于51单片机的出租车里程计数的代码,并且在数码管上显示,仅供参考:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count = 0; // 记录车轮转动的次数
uint distance = 0; // 记录车辆行驶的里程
// 数码管显示函数
void display(uint num)
{
uchar code num_table[] = { // 数码管显示字符表
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f, // 9
};
uchar i;
for(i = 0; i < 4; i++)
{
P0 = 0xff; // 关闭所有数码管
switch(i) // 选择要显示的数码管
{
case 0: P2 = 0xfe; break; // 第1位数码管
case 1: P2 = 0xfd; break; // 第2位数码管
case 2: P2 = 0xfb; break; // 第3位数码管
case 3: P2 = 0xf7; break; // 第4位数码管
}
P0 = num_table[num % 10]; // 显示个位数
num /= 10;
delayms(1); // 延时1ms
}
}
void timer0_isr() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xFC; // 定时器初值
TL0 = 0x66;
count++; // 车轮转动次数加1
if(count == 20) // 每20次车轮转动计算一次里程
{
distance += 10; // 假设车轮周长为10cm
count = 0; // 清零车轮转动次数
display(distance); // 显示车辆行驶的里程
}
}
void main()
{
TMOD |= 0x01; // 定时器0工作在模式1
TH0 = 0xFC; // 定时器初值
TL0 = 0x66;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 允许总中断
while(1)
{
// 程序主循环
}
}
```
在这段代码中,我们在数码管上显示车辆行驶的里程。具体来说,我们使用了定时器0来检测车轮转动的次数,并根据车轮的周长来计算车辆的行驶里程。当车轮转动的次数达到20次时,我们假设车轮的周长为10cm,因此车辆行驶的里程就增加了10cm。我们将计算得到的里程数传递给`display()`函数,通过数码管显示出来。
需要注意的是,以上代码仅是一个简单的示例,具体的实现还需要根据实际情况进行调整和优化。
阅读全文