c51出租车计价器LCD

文章末尾-感谢打赏

基本功能要求

1、设计并制作出租车计价器。开机后,屏幕第一行显示“HFUT”,第二行显示“学号后六位”(如 123456),并自下而上滚动,3 秒后停止滚动。(15分)

2、使用 LCD1602 显示行驶里程(mile)和费用(cost)。上一行显示出租车行驶 里程数,里程范围为 0~999 千米(例:mile: 5km)。下一行显示应收取费用,费用金额范围为 0~9999 元(例:cost: 9yuan)。 (10分)

3、按键 S1 按下后,出租车起步,开始计费。按键 S1 再次按下时,本次服务结束,出租车计费结束。费用收取标准为:
计价包括起步价、行车里程计费两部分。
当里程 ≤ 3 km(公里)时,按起步价6元计费;
里程 > 3 km(公里)时,按 1.2元/km 计费。
里程计算方法:车轮周长为 1 米,车轮转一圈产生一个脉冲,即脉冲数达到 1000 时,行驶里程为 1km。采用单片机的定时器 2 产生 4kHz(周期 250μs)的方波脉冲信号,来代替实际的脉冲产生。(35分)

4、道路会出现堵车等情况,为了减轻出租车运营成本,出租车费用增加等待时间收费。按键 S2 按下后,代表出租车开始处于静止等待状态。按键 S2 再次按下时,出租车结束静止状态。显示出租车等待时间(例 delay:13min)。
费用收取标准为:
计价包括起步价、等待时间计费、行车里程计费三部分。
当里程 ≤ 3 km(公里)时,按起步价 6 元计算费用;
里程 > 3 km(公里)时,按 1.2 元 / km 计费。
等待累计时间 > 5 min(分钟)时,按 1.0 元 /5 min 计费。(实际设计时,用 1 秒 代替 5 分钟,以节省演示时间。) (25分)

5、按下按键 S3,采用分时计费模式。
费用收取标准位:计价包括起步价、等待时间计费、行车里程计费三部分。
时段 1(指 6 点之后到晚上 22 点之前)起步价为 6.0 元,
时段 2(晚上 22 点之后到第二天 6 点之前)起步价为 7.0 元。
按下按键 S4,用于切换时段 1 和 2,(7:00 和 23:00) (25分)

代码

主函数

#include <reg52.h>                
#include "i2c.h"
#include "delay.h"

double jsq=0,jsq2;//怠速计时器
double jl;//距离
double jg;//价格
unsigned char pp;

#define AddWr 0x90 
#define AddRd 0x91 
#define uchar unsigned char
#define uint  unsigned int
extern bit ack;

/*------------------------------------------------
LCD有三根线要改位置,避免和矩阵键盘冲突
------------------------------------------------*/
sbit rs1=P1^0;
sbit wr1=P1^1;
sbit lcden1=P1^2;

unsigned int	js,qbjg;
unsigned int	u = 128;
unsigned char	disnum,disnum_p, temp, key, num;
unsigned char keyscan();
bit s1,s2,s3;//记录当前个开关(模式)的状态

unsigned int count = 0;
extern bit	ack;
bit		ReadADFlag;

unsigned char	num;
unsigned int	i, j;
/*------------------------------------------------
把数码管关了,不然闪烁,很烦
------------------------------------------------*/
sbit dula=P2^6;
sbit wela=P2^7;
unsigned int		i,t,j;

void Init_Timer0(void)
{
   
 TMOD |= 0x01;	
 //TH0=0x00;	     
 //TL0=0x00;
 EA=1;       
 ET0=1;         
 TR0=1;          
}
void Timer0_isr(void) interrupt 1 
{
   
 TH0=(65536-2000)/256;		  // 2ms
 TL0=(65536-2000)%256;
 
 

}
 /*------------------------------------------------
LCD模块
--------------------------------------*/
void delay(uint x)
{
   	 uchar i,j;
	for(i=x;i>0;i--)
	{
   
	for(j=120;j>0;j--);
	}
}

void write_com(uchar com)//LCD显示位置
{
   
	rs1=0;
	wr1
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要用C51单片机来实现出租车计价器,需要考虑计算里程和计时以及费用的功能。 首先,我们可以通过外部传感器来获取出租车的里程信息,并将其保存到一个变量中。可以使用中断来实现对里程传感器的读取,并在每次中断中更新里程信息。 其次,为了实现计时功能,可以使用定时器模块来计算出租车的运营时间。在每次定时器溢出时,可以将溢出次数存储到一个变量中,然后根据溢出次数和定时器的计数值计算出运营时间。 接下来,根据里程和运营时间,可以计算出租车的费用。可以设置一个单价变量,并根据里程和时间乘以相应的费率来计算总费用。 最后,将计算得到的里程、运营时间和总费用分别显示LCD显示屏上。可以使用C51单片机的GPIO口和LCD显示屏的指令集来实现数据的显示。 需要注意的是,还需要考虑到用户输入的功能,例如开始计价和结束计价的命令。可以使用外部按钮来触发相应的中断,并在中断处理函数中进行相关的操作,例如开始计时和计费,或者停止计时和计费。此外,为了方便用户使用,还可以设计一个菜单,通过按键选择相应的功能。 总之,通过以上步骤,可以在C51单片机上实现一个简单的出租车计价器。需要注意的是,具体的代码实现可能涉及到硬件接口和外设的驱动,还需要根据实际情况进行具体的编写调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值