354 基于单片机出租车计价器控制系统【毕设课设】

设计出租车计费器系统由计费电路、时钟电路、按键电路以及LCD显示电路组成。本设计的主要任务:

1. 实现计费功能,计费标准为:按行驶里程计费,起步价为10.00元,并在车行3km后按2/km计费,如果在路上遭遇堵车,那么每5分钟加收2元,当行驶路程超过15公里后,那么超出部分按每公里3元收取费用时,每车次的燃油附加费为2元;

2. 现场模拟功能:能模拟汽车起动、停止、以及不同速度等状态;

3. 设计显示电路,将总车费和行驶路程显示出来;

使用时钟芯片,将当前的时间在LCD屏上显示出来,并能通过按键调节时间。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1VVu1rdD9EVAD2sNsLa1W1g?pwd=8888

部分代码展示

/*-----------------------------------------------
                出租车计价系统设计
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <stdio.h>
#include "ds1302.h"
#include "delay.h"
#include "1602.h"

#define KeyPort P3	//定义按键
bit ReadTimeFlag;//定义读时间标志
bit flag;

sbit KEY1=P3^7;  //定义按键输入端口
sbit KEY2=P3^6;
sbit KEY3=P3^5;

sbit stop=P2^1;
sbit begin=P2^0;

unsigned char con1=0x00,con2=0x00;		//定义时间上限值和下限值
unsigned char num,q,con,biao;		    //定义按键,时间选择位
unsigned char idata time[16];           //定义显示区域时间临时存储数组
unsigned char idata time1[17];          //定义显示区域时间临时存储数组
unsigned char price,waitmin,waittime,kilo;
unsigned int Hall_counter;

unsigned char time_buf1[8];                        //空年月日时分秒周
unsigned char time_buf[8];                         //空年月日时分秒周

void Init_Timer0(void);//定时器初始化
unsigned char KeyScan(void);//键盘扫描
void time_change(void);//调节时间
void texi(void);    //计费及显示
void check(void);	//启动与停止操作

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
	EA=1;          //全局中断开
	IT0=1;         //边沿触发
	 	
	LCD_Init();           //初始化液晶
	DelayMs(5);           //延时有助于稳定
	LCD_Clear();          //清屏
	
	Init_Timer0();        //定时器0初始化
	Ds1302_Init();        //ds1302初始化
  	     
	while(1)         //主循环
	  {	   
 		  num=KeyScan();   //判定按键值
		  time_change();   //时间调整与显示
		  texi();		   //计费及显示
		  check();		   //启动与停止操作
	  }
}

/*------------------------------------------------
                    定时器0初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
 TH0=0x00;	      //给定初值
 TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}

/*------------------------------------------------
                 定时器0中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 static unsigned int num1,num2;
 TH0=(65536-2000)/256;		  //重新赋值 2ms
 TL0=(65536-2000)%256;
 
   num1++;
 if(num1==200)        //大致400ms
   {
    num1=0;
    ReadTimeFlag=1;   //读标志位置1
   }
 if(biao==1)
   {
		num2++;
	 if(num2==500)        //大致1s
	   {
	    num2=0;
		if(flag==1) waittime=0;	  //如果标志位为1,则证明汽车在行驶中
		if(flag==0)				  //如果标志位为0,则证明汽车在等待中
		 waittime++;
		if(waittime==5)  		  //每五秒等待时间加1,此处用5秒代替现实的5分钟
		{
		 waittime=0;
		 waitmin++;
		}
	    flag=0;   //读标志位置1
	   } 
   }  
}

/*------------------------------------------------
            按键扫描函数,返回扫描键值
------------------------------------------------*/

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值