c语言出租车计费
基于C语言的出租车计价器程序设计

目录1 前言 (3)2 系统设计方案 (4)2.1 系统的设计需求 (4)2.2 系统的工作原理 (4)3 系统硬件设计 (5)3.1 单片机介绍 (5)3.2 硬件组成 (8)4 系统软件设计 (12)5 仿真调试 (14)6 结论 (16)7 参考文献 (178)8 心得体会及致谢 (20)附录A 设计总图 (224)附录B 源程序 (235)1 前言随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注[1]。
相对于公共汽车拥挤与缓慢以及私家车高昂的费用,出租车无疑是一种低价高质的出行交通工具。
近年来越来越多的人为了出行方便舒适愿意选择使用出租车,出租车行业得以快速发展[2]。
出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器的技术在不断进步和提高[3]。
最初的计价器计费模式较为单一,不便于在不同的运营环境下选取不同的计费模式。
考虑到出租车行驶可能会出现从市区行驶到郊区或者行驶到偏僻地区,郊区或偏僻区打车的人少的现象,司机空车行驶返回成本较高,这时需要乘客为空车返回的路程承担一定的费用,这就需要区分单程/往返不同计价模式。
“单程”模式是指目的地在郊区或者比较偏僻的地方,到达目的地后打车的人比较少,需要乘客乘客承担一定的空车返回的费用;“往返”模式是指目的地在市区,到达目的地后还会有乘客乘车返回,这种情况下司机不需要空车返回,乘客不需要承担回程费用。
考虑到夜晚时出租车的灯光需要消耗能源以及司机夜间服务比白天较为辛苦,所以一般夜晚出租车的价格需要比白天高一点。
早期的出租车计价器均采用模拟电路和数字电路设计。
计价器整体电路的规模较大,需要器件多,容易出故障,难调试。
和模拟电路和数字电路设计相比而言,基于单片机进行设计的计价器,用较少的硬件和适当的软件相互配合就可以很容易的实现设计需求,硬件电路简单,稳定性好,灵活性强[4],通过软件编程就可以实现计费模式的切换。
C语言出租车计价器课程设计

里程计算是通过安装在车轮上的霍尔传感器检测到的脉冲信号,送到单片机产生中断,单片机再根据程序设定,计算出里程。其原理如图4所示。
图4传感器测距示意图
本系统选择了将A44E的脉冲输出口接到P3.3口外部中断1作为信号的输入端(这样可以减少程序设计的麻烦),车轮每转一圈(设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到1000次时,即1公里,单片机就控制将金额自动增加,如图5。
图2单片机最小系统图
AT89S52的复位端是一个史密特触发输入,高电平有效。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M晶振和两个30pF电容组成系统的内部时钟电路。
2.2 A44E霍尔传感器检测单元
A44E属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL电平标,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
A44E集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。A44E霍尔传感器原理如图3所示。
出租车计费程序

LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;USE IEEE.std_logic_arith.all;ENTITY taxi isport( c lk_390 :in std_logic;start:in std_logic;stop:in std_logic;fin:in std_logic;cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0);km1,km0:out std_logic_vector(3 downto 0);min1,min0:out std_logic_vector(3 downto 0);dp:out std_logic);end taxi;architecture behav of taxi issignal f_13,f_15,f_1:std_logic;signal q_13:integer range 0 to 19;signal q_15:integer range 0 to 16;signal q_1:integer range 0 to 255;signal c3,c2,c1,c0:std_logic_vector(3 downto 0);signal k1,k0:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m0:std_logic_vector(3 downto 0);signal en1,en0,f:std_logic;beginfeipin:process(clk_390,start)beginif clk_390'event and clk_390='1'thenif start='0' then q_13<=0;q_15<=0;f_13<='0';f_15<='0';f_1<='0';f<='0';elseif q_13=19 then q_13<=0;f_13<='1';else q_13<= q_13+1;f_13<='0';end if;if q_15=16 then q_15<=0;f_15<='1';else q_15<=q_15+1;f_15<='0';end if;if q_1=255 then q_1<=0;f_1<='1';else q_1<=q_1+1;f_1<='0';end if;if en1='1' then f<=f_15;elsif en0='1' then f<=f_13;else f<='0';end if;end if;end if;end process;main:process(f_1)beginif f_1'event and f_1='1' thenif start='0' thenen1<='0';en0<='0';m1<="0000";m0<="0000";k1<="0000";k0<="0000";elsif stop='1' thenif m0="1001" then m0<="0000";if m1="0101" then m1<="0000";else m1<=m1+1;end if;else m0<=m0+1;end if;if m1&m0>"00000001" then en1<='1';en0<='0';else en1<='0';en0<='0';end if;elsif fin='1' thenif k0="1001" then k0<="0000";if k1="1001" then k1<="0000";else k1<=k1+1;end if;else k0<=k0+1;end if;if k1&k0>"00000010" then en0<='1';en1<='0';else en0<='0';en1<='0';end if;else en1<='0';en0<='0';end if;cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0;km1<=k1;km0<=k0;min1<=m1;min0<=m0;end if;end process main;jifei:process(f,start)beginif start='0' then c3<="0000";c2<="0000";c1<="0101";c0<="0000";elsif f'event and f='1' thenif c0="1001" then c0<="0000";if c1="1001" then c1<="0000";if c2="1001" then c2<="0000";if c3="1001" then c3<="0000";else c3<=c3+1;end if;else c2<=c2+1;end if;else c1<=c1+1;end if;else c0<=c0+1;end if;end if;end process jifei;end behav;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;USE IEEE.std_logic_arith.all;ENTITY taxi isport( c lk_390 :in std_logic;clk_1 :in std_logic;start:in std_logic;stop:in std_logic;fin:in std_logic;cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0);km1,km0:out std_logic_vector(3 downto 0);min1,min0:out std_logic_vector(3 downto 0);dp:out std_logic);end taxi;architecture behav of taxi issignal f_13,f_15,f_1:std_logic;signal q_13:integer range 0 to 19;signal q_15:integer range 0 to 16;signal q_1:integer range 0 to 255;signal c3,c2,c1,c0:std_logic_vector(3 downto 0);signal k1,k0:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m0:std_logic_vector(3 downto 0);signal en1,en0,f:std_logic;beginfeipin:process(clk_390,start)beginif clk_390'event and clk_390='1'thenif start='0' then q_13<=0;q_15<=0;f_13<='0';f_15<='0';f_1<='0';f<='0';elseif q_13=19 then q_13<=0;f_13<='1';else q_13<= q_13+1;f_13<='0';end if;if q_15=16 then q_15<=0;f_15<='1';else q_15<=q_15+1;f_15<='0';end if;if q_1=255 then q_1<=0;f_1<='1';else q_1<=q_1+1;f_1<='0';end if;if en1='1' then f<=f_15;elsif en0='1' then f<=f_13;else f<='0';end if;end if;end if;end process;main:process(clk_1)beginif clk_1'event and clk_1='1' thenif start='0' thenen1<='0';en0<='0';m1<="0000";m0<="0000";k1<="0000";k0<="0000";elsif stop='1' thenif m0="1001" then m0<="0000";if m1="0101" then m1<="0000";else m1<=m1+1;end if;else m0<=m0+1;end if;if m1&m0>"00000001" then en1<='1';en0<='0';else en1<='0';en0<='0';end if;elsif fin='1' thenif k0="1001" then k0<="0000";if k1="1001" then k1<="0000";else k1<=k1+1;end if;else k0<=k0+1;end if;if k1&k0>"00000010" then en0<='1';en1<='0';else en0<='0';en1<='0';end if;else en1<='0';en0<='0';end if;cha3<=c3;cha2<=c2;cha1<=c1;cha0<=c0;km1<=k1;km0<=k0;min1<=m1;min0<=m0;end if;end process main;jifei:process(f,start)beginif start='0' then c3<="0000";c2<="0000";c1<="0101";c0<="0000";elsif f'event and f='1' thenif c0="1001" then c0<="0000";if c1="1001" then c1<="0000";if c2="1001" then c2<="0000";if c3="1001" then c3<="0000";else c3<=c3+1;end if;else c2<=c2+1;end if;else c1<=c1+1;end if;else c0<=c0+1;end if;end if;end process jifei;end behav;。
c语言出租车计费

c语言出租车计费c语言出租车计费已知某城市普通出租车收费标准为:起步里程为3公里,起步费为8元,10公里以内超过起步里程的部分,每公里加收2元,超过10公里以上的部分加收50%的回空补贴费,即每公里3元。
出租车营运过程中,因堵车和乘客要求临时停车等客的,按每5分钟加收2元计算,不足5分钟的不计费。
从键盘任意输入行驶里程(精确到0.1公里)和等待时间(精确到分钟),请编程计算并输出乘客应支付的车费,对结果进行四舍五入,精确到元。
输入提示信息:"Input distance and time:"输入格式:用逗号分隔的两个数字,第一个表示距离、第二个表示时间:"%f,%d"输出格式:"fee = %.0f\n" (注意:等号的两边各有一个空格)#includeint main(void){int start_money = 8, less_than_10_km_per_money = 2, beyond_10_km_extra_money = 1, wait_5_min_money = 2,real_wait_time;float start_distense = 3, real_distense ,real_money=0;printf("Input distance and time(eg.3.5,15):");scanf("%f,%d",ℜ_distense,ℜ_wait_time);real_money = start_money;real_money += real_distense > start_distense ? (real_distense - start_distense) * less_than_10_km_per_money : 0 ;real_money += real_distense > 10 ? (real_distense - 10) * beyond_10_km_extra_money : 0 ;real_money += real_wait_time / 5 > 0 ? real_wait_time / 5 *wait_5_min_money : 0 ;real_money = (int)(real_money + 0.5);printf("fee = %.0f\n",real_money);return 0;}。
出租车计价器(单片机c语言)

分类号编号毕业设计题目:基于单片机的出租车计价器的设计——电子设计系别信息工程学院专业电子信息工程姓名学号2010年6月1 日学院毕业设计任务书设计题目:基于单片机的出租车计价器的设计——硬件部分专业:电子信息工程班级学号:姓名:指导教师:设计期限:2011年3月1日开始2011年6月1日结束院、系:北京信息工程学院2011年3 月1 日一、设计目的通过毕业设计使学生了解和掌握单片机应用技术;了解和掌握C语言的程序设计同硬件电路的结合;熟练运用proteus,keilC等软件的操作;了解和掌握单片机硬件电路的焊接和调试;了解和掌握掉电存储芯片AT24C02、霍尔传感器A44E、数码管、驱动芯片74LS245等外部接口芯片器件的应用。
二、主要设计内容实现出租车行驶里程和总金额的显示,预设起步价和起步公里数;实现清零、复位和掉电保护功能;实现对单价的调整。
三、重点研究问题(1)按下启动按键,显示起步里程与起步价。
(2)按模拟传感器信号的按键,显示行驶里程与总金额。
(3)按键控制清零、复位、掉电保护、调整预设单价。
(4)在软件中实现起步价,单价。
四、主要技术指标(1)数码管显示起步里程、单价,总里程、总金额。
(2)用按键控制清零、复位、掉电保护、调整预设单价。
五、设计成果要求(1)源程序通过编译、运行(2)软件烧录单片机硬件进行调试,运行(3)实现所述功能(4)电路板焊接、检测(5)最终提交软硬件、设计说明书、外文翻译、毕业设计说明书等六、其它参考文献:[1] 谭浩强.C程序设计(第二版).清华大学出版社.2003[2]潘永雄.新编单片机原理与应用.西安电子科技大学出版社.2003设计开题报告2011年3 月15日摘要现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。
而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
基于单片机出租车计价器课题设计(c语言编写)

单片机系统课程设计报告完成日期:2010年12月28日系:电子信息工程系专业:通信工程班级:071班设计题目:出租车计价器学生姓名:谢明七王勉指导教师:董玉华、许爽目录一、设计任务和性能指标 (2)1.1设计任务 (2)1.2性能指标 (2)二、设计方案 (3)2.1任务分析 (3)2.2系统设计 (4)三系统硬件设计 (6)3.1电源电路 (6)3.2单片机的最小系统 (7)3.3 DS1302时钟电路 (8)3.4显示电路的设计 (9)3.5按键控制的设计 (10)3.7复位电路 (12)四、系统软件设计 (13)4.1主程序设计 (13)4.2 子程序设计 (14)4.2.1 DS1302子程序 (14)4.2.1 DS1302子程序流程图 (14)4.2.2 显示子程序 (16)4.2.2 显示子程序流程图 (18)4.3 修改时间子程序 (19)五、调试及性能分析 (20)5.1调试步骤 (20)5.1.1硬件调试 (20)5.1.2软件调试: (20)5.2性能分析 (20)六、心得体会 (22)七、参考文献 (23)八、附录 (24)附录1、程序清单 (24)附录2 系统硬件电路图 (34)一、设计任务和性能指标1.1设计任务出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
出租车计价器的主要功能是计价显示、时钟显示、根据白天、黑夜、途中等待来调节营运参数、计量数据查询等。
要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。
1.2性能指标1.不同情况具有不同收费标准:白天、晚上、途中等待(>10min开始收费);2.数据输出:单价输出、路程输出、总金额输出;3.按键:启动计时开关、数据显示切换、白天/晚上切换、复位;4.能手动进行修改单价,但单价设定需密码进入。
单片机课程设计(999999显示与出租车计费器,包含汇编与C语言)

湖南工业大学课程设计资料袋电气与信息工程学院(系、部)2012~2013 学年第 2 学期课程名称单片机系统课程设计指导教师职称学生姓名甘显豪专业班级自动化1004 学号10401701305题目出租车计费系统成绩起止日期2012 年12月31日~2013 年1 月11 日目录清单湖南工业大学课程设计任务书电气与信息工程学院(系、部)自动化专业1004 班级课程名称:单片机系统课程设计设计题目:出租车计费系统完成期限:自2012 年12月31日至2013 年 1 月11 日共 2 周指导教师(签字):年月日系(教研室)主任(签字):年月日附件三(单片机应用系统)设计说明书(题目)出租车计费系统起止日期:2012 年12 月31 日至2013 年 1 月11日学生姓名甘显豪班级自动化1004学号10401701305成绩指导教师(签字)电气与信息工程学院2012年12 月31 日一、设计任务:1.1 外部脉冲自动计数,自动显示。
1.1.1设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。
1.1.2设计一个999999计数器:0-999999计数,计满后自动清0,重新计数(在数码管中显示)。
1.2 设计一个出租车计费系统:起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m 刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元)二、设计原理及思路1.设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。
设计原理:这个用汇编和C语言都比较简单。
首先我确定用的是T0(TMOD=0x06)定时计数器,用查询计数模式,工作方式2(8位,可自动重新装初值),总中断不用开,赋初值255,来一个脉冲直接溢出,只要判断溢出标志位TF0是否为1即可,TF0为1则说明溢出,然后再用指令清0就OK了,然后给数码管显示加1(当然这里要先判断是否加到了255,若>255就显示清0)。
基于单片机的出租车计费(c语言)

基于单片机的出租车计费(c语言)基于proteus仿真一.设计要求:1.用单片机AT89c51实现出租车计费器的设计。
2.出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如5.0),车行驶2km以内,只收起步价5元。
3.出租车行驶超过2km后,按每公里1.8元在5.0元的基础上增加。
4.出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。
5.出租车行驶仿真:把信号发生器的输出接到单片机外部中断上,设置信号发生器不同的频率输出,分别表示速度的快慢。
6.每一个脉冲表示轮胎转一圈,目前出租车轮胎周长为1.83米。
8.运行时间显示(时、分、秒),每一次起步时清零9.出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.7元。
10.行驶速度计算11.参数设置:可以修改轮胎周长,修改起步价,修改每公里单价等。
二.设计仿真proteus三.设计程序#include<reg51.h>unsignedchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//段选unsigned char f=0x00,y=0x00,k=0x00,m=0x00,z=0x00,q=0x00,w=0x00,s=0x00;//定义变量注意其范围(不然容易出现乱码)unsigned int x=0;#define uint unsigned int#define uchar unsigned charvoid delay(unsigned int i)//延时1ms{unsigned char j;while(i--){for(j=0;j<125;j++){;}}}void div2()//显示{ P2=0x80;P1=d[s/10];//计时小时P0=d[y/100];//计费百位delay(5);P2=0x40;P1=d[s%10];//小时个位P0=d[y%100/10];//计费十位delay(5);P2=0x20;P1=d[10];//显示“-”P0=d[y%10]&0x7f;//计费个位delay(5);P2=0x10;P1=d[f/10];//分钟P0=d[x*2/10000];//路程万位delay(5);P2=0x08;P1=d[f%10];P0=d[x*2%10000/1000];//路程千位delay(5);P2=0x04;P1=d[10];P0=d[x*2%1000/100];delay(5);P2=0x02;P1=d[w/10];//秒P0=d[x*2%100/10];delay(5);P2=0x01;P1=d[w%10];P0=d[x*2%10];delay(5);}void tt()//总费用函数{if(x*2<2000){y=5;}else if(x*2>2000){y=5+(x*2-2000)/1000*2;}else if(x*2>10000){y=21+(x*2-10000)/1000*3;}}void main()//开3个中断端{EX0=1;//开启外部中断源IT0=1;EX1=1;IT1=1;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TMOD=0X01;ET0=1;TR0=1;//开启定时中断 EA=1;//开中断源while(1){div2();tt();}}void int1(void) interrupt 0 //信号中断服务程序{x++;}void int2() interrupt 2 //清零中断{w=0;f=0;s=0;x=0;y=0;EX0=0;ET0=0;}void int0() interrupt 1//计时中断服务程序{ ET0=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;q++;if(q==20)//计数20恰好为1秒{q=0;w++;if(w==60)//秒到60{w=0;f++;if(f==60)//分到60{f=0;s++;if(s==12){s=0;}}}}ET0=1;}四.设计结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言出租车计费
已知某城市普通出租车收费标准为:起步里程为3公里,起步费为8元,10公里以内超过起步里程的部分,每公里加收2元,超过10公里以上的部分加收50%的回空补贴费,即每公里3元。
出租车营运过程中,因堵车和乘客要求临时停车等客的,按每5分钟加收2元
计算,不足5分钟的不计费。
从键盘任意输入行驶里程(精确到0.1公里)和等待时间(精确到分钟),请编程计算并输出乘客应支付的车费,对结果进行四舍五入,精确到元。
输入提示信息:"Input distance and time:"
输入格式:
用逗号分隔的两个数字,第一个表示距离、第二个表示时间:"%f,%d"
输出格式:"fee = %.0f\n" (注意:等号的两边各有一个空格)
#include <stdio.h>
int main(void)
{
int start_money = 8, less_than_10_km_per_money = 2, beyond_10_km_extra_money = 1, wait_5_min_money = 2,real_wait_time;
float start_distense = 3, real_distense ,real_money=0;
printf("Input distance and time(eg.3.5,15):");
scanf("%f,%d",&real_distense,&real_wait_time);
real_money = start_money;
real_money += real_distense > start_distense ? (real_distense - start_distense) * less_than_10_km_per_money : 0 ;
real_money += real_distense > 10 ? (real_distense - 10) * beyond_10_km_extra_money : 0 ;
real_money += real_wait_time / 5 > 0 ? real_wait_time / 5 * wait_5_min_money : 0 ;
real_money = (int)(real_money + 0.5);
printf("fee = %.0f\n",real_money);
return 0;
}。