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;}四.设计结果。
出租车计价器(单片机c语言)doc资料
出租车计价器(单片机c语言)摘要本电路以AT89S51单片机为中心,附加A44E霍尔传感器测距(本电路中用模拟开关替代),实现对出租车计价,采用AT24C02 实现在系统掉电的时候保存单价,输出采用8段数码显示管,显示行驶总里程和总金额。
模拟出租车计价器设计:进行里程显示,预设起步价和起步公里数;行程按全程收费,有复位功能和启动功能,启动后,开始计价。
我们采用单片机进行设计,可以用较少的硬件和适当的软件相互配合来实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能,应用前景广阔。
关键字:出租车计价器; AT89S51单片机; A44E霍尔传感器; 断电保存; 8段数码显示管.目录第 1章绪论 01.1 课题背景 01.2 主要设计内容及基本要求 0第2章系统硬件设计 (1)2.1硬件设计说明 (1)2.2 AT89S51单片机简介 (1)2.3 硬件电路设计 (2)2.4 硬件组成 (3)2.4.1 驱动电路 (3)2.4.2 显示电路 (4)2.4.3 复位电路 (5)2.4.4 掉电保护电路 (5)2.4.5 时钟电路 (6)2.4.6 按键电路 (6)第3章系统调试 (7)3.1 单片机仿真软件在线调试—PROTEUS (7)3.2 电路元件检测 (8)3.3 硬件检测 (8)附录1程序源代码 (12)附录2电路仿真图 (18)总结 (19)第 1章绪论1.1 课题背景我们知道,只要乘坐的出租车启动,随着行驶里程的增加,就会看到司机旁边的计价器里程数字显示的读数从零逐渐增大,而当行驶到某一值时(如2KM)计费数字显示开始从起步价(如4元)增加。
当乘客到站时,按下停止按键,计费数字显示总里程和总金额,它可以很直观的反映用户使用情况。
1.2 主要设计内容及基本要求利用AT89S51单片机,设计简单的出租车计价器。
在出租车计价器的总体设计中,我主要负责出租车计价器硬件设计。
其中主要的外围功能电路有:驱动电路,按键控制电路,掉电保护电路,时钟部分,数码管显示电路等。
出租车计价器源程序
/************************************************ 课程设计出租车计价器C51源程序,实现出租车计* 价器基本功能。
** 版权声明:* 未经本人允许不得应用于商业用途,可用* 于交流学习。
** Sunday, July 01 2012* **************************************************************/#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define _NOP_(); {_nop_();_nop_();_nop_();_nop_();};#define OP_WRITE 0xa0 // 器件地址以及写入操作#define OP_READ 0xa1 // 器件地址以及读取操作#define key_set 0// = P3^3;#define key_down 1// = P3^4;#define key_up 2// = P3^5;#define key_ok 3//= P3^6;/** USR_DAT ,PRESET_DAT saved daytime: distance,price,night: distance,priceTIME : hour , min , sec*/uchar data USR_DAT[4] = {3,2,3,6};//uchar PRESET_DAT[4] = {3,2,3,3};uchar data ITEMS[3] = {0,0,0};//存放-里程,单价,费用uchar data TIME[3] = {0,0,12};//存放时间-秒,分,时uchar cycle_time; //100->考虑到5km/h,运转周期是1.44s-->0.02s计数72次uint stop_time,stop_time_all,mileometer,temp_s,speed;uchar cycle_time_info,lock = 1,lock_items = 1;//信号量;uchar key_pressed_time,key_num;//set按键按下次数uchar hour,min,sec,count;uchar code STR1[] = " Time:";//uchar code SPACE[] = " ";//uchar code STR2[] = "S: P: A: "; //里程,单价,应收取费用uchar code STR3[] = "Stop time: min";uchar code STR_SET[] = " Setting ";uchar code STR_SET_HOUR[] = " Setting hour ";uchar code STR_SET_MIN[] = " Setting min ";uchar code STR_SET_PRICE[] = " Setting price ";uchar code STR_SET_START[] = " Setting start ";uchar code DAY[] = " Day: ";uchar code NIGHT[] = " Night: ";uchar code STR_RST[] = "Reset? No < > Y ";sbit lcd_rs = P2^0;sbit lcd_rw = P2^1;sbit lcd_e = P2^2;sbit LED = P1^1;sbit SDA = P1^7;sbit SCL = P1^6;void delay(uchar z);void lcd_write_cmd(uchar cmd);void lcd_write_dat(uchar dat);void lcd_init();void lcd_display(uchar addr,uchar dat);void lcd_display_2(uchar addr,uchar dat);void lcd_display_3(uchar addr,uchar dat);void lcd_write_str(uchar addr,uchar *str);void time0_init();void time1_init();void display_time();void display_reset();void display_items();void display_set_time();void display_stop_time();void ex_int_init();void set_items();uchar key_scan();void key_set_dat();/*24c02相关*/void start();void stop();uchar shin();bit shout(uchar write_data);void write_byte( uchar addr, uchar write_data);uchar read_current();uchar read_addr(uchar addr);void save_user_dat();void restore_user_dat();void main(void){// uchar set_ok = 0;time0_init();time1_init();ex_int_init();lcd_init();restore_user_dat();while(1){// lcd_display_2(0x02,cycle_time_info);set_items();key_num = key_scan();if(!key_pressed_time){if(lock||(cycle_time >= 72)||(stop_time > 0))display_stop_time();elsedisplay_time();display_items();}else{key_set_dat();}}}/** 函数名:key_scan()* 函数作用:扫描按下的按键并返回相应的键值* */uchar key_scan(){P3 |= 0xfb;if((P3 & 0xfb) != 0xfb)delay(200);if((P3 & 0xfb) != 0xfb){switch (P3 & 0xfb){case 0xeb:return key_down;case 0xdb:return key_up;case 0xf9:return key_ok;default:return 0;}}}/** 函数名:uchar key_set_dat(uchar key_pressed_time) * 函数输入:set键按下的次数,以及键值* 函数输出://完成设置返回0,未完成返回1* 函数作用:根据set按键按下的次数,执行相应的设置: * 1.复位包括里程和费用* 2.时间设置:时,分* 3.参数设置:白天起步距离和单价* 4.参数设置:晚上起步距离和单价* */void key_set_dat(){switch(key_pressed_time){case 1:{ display_reset();if(key_num == key_up){ //2ITEMS[0] = 0;ITEMS[2] = 0;mileometer = 0;stop_time_all = 0;cycle_time = 0;key_pressed_time = 0;}if(key_num == key_down){ //1key_pressed_time ++;}if(key_num == key_ok){key_pressed_time = 0;}// key_num = 0;}break;case 2:{lcd_write_str(0x80,STR_SET_HOUR);lcd_display(0x40+0x06,' '-0x30);lcd_display(0x40+0x07,' '-0x30);display_set_time();//hourif(key_num == key_up)TIME[2] ++;if(key_num == key_down)TIME[2] --;if(key_num == key_ok){key_pressed_time = 0;}// key_num = 0;}break;case 3:{lcd_write_str(0x80,STR_SET_MIN);lcd_display(0x40+0x09,' '-0x30);lcd_display(0x40+0x0a,' '-0x30);display_set_time();if(key_num == key_up)//minTIME[1] ++;if(key_num == key_down)TIME[1] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 4:{lcd_write_str(0x80,STR_SET_PRICE);lcd_write_str(0x80+0x40,DAY);lcd_display_2(0x40+0x08,USR_DAT[1]);// lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[1] ++;if(key_num == key_down)USR_DAT[1] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 5:{lcd_write_str(0x80,STR_SET_PRICE);lcd_write_str(0x80+0x40,NIGHT);lcd_display_2(0x40+0x08,USR_DAT[3]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[3] ++;if(key_num == key_down)USR_DAT[3] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 6:{lcd_write_str(0x80,STR_SET_START);lcd_write_str(0x80+0x40,DAY);lcd_display_2(0x40+0x08,USR_DAT[0]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[0] ++;if(key_num == key_down)USR_DAT[0] --;if(key_num == key_ok)key_pressed_time = 0;}break;case 7:{lcd_write_str(0x80,STR_SET_START);lcd_write_str(0x80+0x40,NIGHT);lcd_display_2(0x40+0x08,USR_DAT[2]); // lcd_display(0x40+0x09,' '-0x30);// lcd_display(0x40+0x0a,' '-0x30);if(key_num == key_up)//minUSR_DAT[2] ++;if(key_num == key_down)USR_DAT[2] --;if(key_num == key_ok)key_pressed_time = 0;}break;default:key_pressed_time = 0;}// save_user_dat(); _-->会引起WARNING L15: MULTIPLE CALL TO SEGMENT}/** 函数名:set_items()* 函数作用:设置计算显示的里程,设置相应时间的单价,计算应收取费用* 即是设置ITEMS数组* */void set_items(){ITEMS[0] = (mileometer * 2)/1000;/* while(lock_items){temp_s = ITEMS[0];lock_items --;lcd_display(0x0d,lock_items);} */if(TIME[2] > 18 || TIME[2] < 6) //晚上六点后,早上六点前实行夜间收费标准{ITEMS[1] = USR_DAT[3];if(ITEMS[0] > USR_DAT[2]){/*if((ITEMS[0] - temp_s) != 0){ITEMS[2] += ITEMS[1];lock_items ++;}*/ITEMS[2] = (ITEMS[0] - USR_DAT[2])*ITEMS[1] + 5 + stop_time_all/300;}elseITEMS[2] = 5 + stop_time_all/300; //起步价 5 元}else{ITEMS[1] = USR_DAT[1]; //ITEMS[0]里程 ITEMS[1] 单价 ITEMS[2]结算if(ITEMS[0] > USR_DAT[0]){/* if((ITEMS[0] - temp_s) != 0){ITEMS[2] += ITEMS[1];lock_items ++;} */ITEMS[2] = (ITEMS[0] - USR_DAT[0])*ITEMS[1] + 5 + stop_time_all/300;}elseITEMS[2] = 5 + stop_time_all/300;}}/** 函数名:ex_int_init()* 函数作用:初始化外部中断* */void ex_int_init(){EX0 = 1;IT0 = 1;IP = 0x0a;//将定时器中断0,1优先级设为最高EX1 = 1;IT1 = 1;//下降沿触发}/** 函数名:ex1_int() interrupt 2* 函数作用:设置时间,用户数据:白天和晚上的起步距离和单价USR_DAT* */void ex1_int() interrupt 2{EX1 = 0;delay(200);EX1 = 1;key_pressed_time ++;}/** 函数名: void ex_int() interrupt 0* */void ex0_int() interrupt 0{if((cycle_time >= 72)||(stop_time > 0)) //此时说明速度小于5km/h{stop_time_all += (stop_time + cycle_time/50);cycle_time_info ++;}elsecycle_time_info = 10;if(cycle_time_info > 10)lock = 1;elselock = 0;stop_time = 0;cycle_time = 0;// if(stop_time_all >= 300){// ITEMS[2] += stop_time_all/300;//stop_time_all %= 300;// }// else{// while(lock){ /*获取信号量*/// lock --;// stop_time = sec;//暂时借用stop_time寄存器// };// display_stop_time();// /*// * 完成工作在display_stop_time显示 1s 后返回显示display_time */ // if((sec - stop_time) != 0){// display_time();// stop_time = 0;// lock ++ ;//释放信号量// }// }mileometer ++ ;if(mileometer%2 == 0)LED = !LED;}/** 函数名:void time1_init()* 函数作用:初始化定时器1,为工作方式一* */void time1_init(){TMOD = TMOD | 0x10;TH1 = (65535 - 20000)/256;TL1 = (65535 - 20000)%256;EA = 1;ET1 = 1; //定时器终端控制位TR1 = 1; //定时器控制位}/** 函数名称:void time1() interrupt 3* 函数作用:时钟计数函数计时时间用于测速 * */void time1() interrupt 3{TH1 = (65535 - 20000)/256;TL1 = (65535 - 20000)%256;cycle_time ++;if(cycle_time == 100){ //100stop_time += 2;cycle_time = 0;}// lcd_display_3(0x40+ 0x02,stop_time); // lcd_display_3(0x40+ 0x06,cycle_time);}/** 函数名:void display_set_time()* 函数作用:显示设置时间界面* */void display_set_time(){// lcd_write_str(0x80,STR_SET);lcd_write_str(0x80+0x40,STR1);lcd_display(0x40+0x08,'-'-0x30);lcd_display(0x40+0x0b,'-'-0x30);lcd_display(0x40+0x0e,' '-0x30);lcd_display_2(0x40+0x06,TIME[2]);lcd_display_2(0x40+0x09,TIME[1]);lcd_display_2(0x40+0x0c,TIME[0]);}/** 函数名:display_reset()* 函数作用:复位确定界面* Setting* Reset? No < > Y* */void display_reset(){lcd_write_str(0x80,STR_SET);lcd_write_str(0x80+0x40,STR_RST);}/** 函数名:display_stop_time()* 函数作用:显示停车或者小与5km/h的时间* Stop time:00 min* */void display_stop_time(){lcd_write_str(0x80,STR3);lcd_display_2(0x0a,stop_time_all/60); }/** 函数名:display_items()* 函数作用:显示里程,单价,应收取费用* S: P: A:* */void display_items(){// lcd_write_str(0x80+0x40,STR2); //第二行lcd_display(0x40+0x00,'S'-0x30);lcd_display(0x40+0x01,':'-0x30);lcd_display(0x40+0x04,' '-0x30);lcd_display(0x40+0x05,'P'-0x30);lcd_display(0x40+0x06,':'-0x30);lcd_display(0x40+0x09,' '-0x30);lcd_display(0x40+0x0a,'['-0x2f);//$lcd_display(0x40+0x0b,':'-0x30);lcd_display_2(0x40+0x02,ITEMS[0]); //里程lcd_display_2(0x40+0x07,ITEMS[1]); //单价lcd_display_3(0x40+0x0c,ITEMS[2]); //费用}/** 函数名称:display_time()* 函数作用:在lcd上显示出时钟时,分,秒* Time: 00-00-00* */void display_time(){lcd_write_str(0x80,STR1);lcd_display(0x06,' '-0x30);lcd_display(0x09,'-'-0x30);lcd_display(0x0c,'-'-0x30);lcd_display_2(0x07,TIME[2]);lcd_display_2(0x0a,TIME[1]);lcd_display_2(0x0d,TIME[0]);lcd_display(0x0f,' '-0x30);}/** 函数名:void time0_init()* 函数作用:初始化定时器0,为工作方式一* */void time0_init(){TMOD = TMOD | 0x01;TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;EA = 1;ET0 = 1; //定时器终端控制位TR0 = 1; //定时器控制位}/** 函数名称:void time0() interrupt 1* 函数作用:时钟计数函数* */void time0() interrupt 1{TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;count ++;if(count >= 20){count = 0;TIME[0] ++;}if(60 <= TIME[0]){TIME[0] = 0;TIME[1] ++;save_user_dat(); // 1 min保存用户数据}if(60 <= TIME[1]){TIME[1] = 0;TIME[2] ++;}if(24 <= TIME[2])TIME[2] = 0;}/************************************************** ****************** lcd 相关操作函数* ********************* * ************************************************/ /** 函数名:delay(uchar z)* 函数作用:单位延时约100us* */void delay(uchar z) //延时函数100us{uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--);}/** 函数名:lcd_write_cmd()* 函数作用:lcd写指令* */void lcd_write_cmd(uchar cmd){XBYTE[0xfcff] = cmd;delay(1);}/** 函数名:lcd_write_dat()* 函数作用:lcd写数据* */void lcd_write_dat(uchar dat){XBYTE[0xfdff] = dat;delay(1);}/** 函数名:lcd_init()* 函数作用:lcd初始化* */void lcd_init(){delay(16);lcd_write_cmd(0x3f);delay(5);lcd_write_cmd(0x3f);delay(1);lcd_write_cmd(0x3c);lcd_write_cmd(0x08);//lcd初始化完成//lcd使用方式设置// lcd_write_cmd(0x38);lcd_write_cmd(0x08);//屏幕关lcd_write_cmd(0x01);//清屏lcd_write_cmd(0x03);//光标归位lcd_write_cmd(0x0c);//光标方式设置不显示光标lcd_write_cmd(0x06);//指针自动加一整屏不移动}/** 函数名:lcd_display(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示一位特定数据* */void lcd_display(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat + 0x30);//数字转换成ascii}/** 函数名:lcd_display_2(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示两位特定数据* */void lcd_display_2(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat/10 + 0x30);//数字转换成asciilcd_write_dat(dat%10 + 0x30);}/** 函数名:lcd_display_3(uchar addr,uchar dat)* 输入参数:显示地址(首行addr,下行0x40+addr),显示数据的ascii * 函数作用:在特定位置显示三位特定数据* */void lcd_display_3(uchar addr,uchar dat){lcd_write_cmd(0x80 + addr);lcd_write_dat(dat/100 + 0x30);//数字转换成asciilcd_write_dat(dat%100/10 + 0x30);lcd_write_dat(dat%100%10 + 0x30);}/** 函数名:lcd_write_str* 输入参数:首地址,字符串首地址指针* 函数作用:写字符串数据* */void lcd_write_str(uchar addr,uchar *str) {lcd_write_cmd(addr);do{lcd_write_dat(*str);str ++;}while(*str != '\0');}/*************************** 24C00相关函数*************************//** 启动*/void start(){SDA = 1;SCL = 1;_NOP_();SDA = 0;_NOP_();SCL = 0;}/** 停止*/void stop(){SDA = 0;_NOP_();SCL = 1;_NOP_();SDA = 1;}/** 24C00移出数据到MCU*/uchar shin(){uchar i,read_data;for(i = 0; i < 8; i++){SCL = 1;read_data <<= 1;read_data |= SDA;SCL = 0;}return(read_data);}/** MCU移出数据到24C00*/bit shout(uchar write_data){uchar i;bit ack_bit;for(i = 0; i < 8; i++) // 循环移入8个位{SDA = (bit)(write_data & 0x80);_nop_();SCL = 1;_NOP_();SCL = 0;write_data <<= 1;}SDA = 1; // 读取应答_NOP_();SCL = 1;_NOP_();ack_bit = SDA;SCL = 0;return ack_bit; // 返回AT24C02应答位}/** 在指定地址addr处写入数据write_data*/void write_byte(uchar addr, uchar write_data) {start();shout(OP_WRITE);shout(addr);shout(write_data);stop();delay(10);}/** 读取当前地址数据*/uchar read_current(){uchar read_data;start();shout(OP_READ);read_data = shin();stop();return read_data;}/** 读取特定地址数据*/uchar read_addr(uchar addr) {start();shout(OP_WRITE);shout(addr);return(read_current()); }/** 将用户数据存储EEPROM 24C00* USR_DAT[4] ITEMS[3]*/void save_user_dat(){uchar i = 0;for(;i < 4;i ++)write_byte(i,USR_DAT[i]);for(;i < 7;i ++)write_byte(i,ITEMS[i]); }/** 恢复用户数据*/void restore_user_dat(){uchar i = 0;for(;i < 4;i ++)USR_DAT[i] = read_addr(i);for(i = 0;i < 3;i ++)ITEMS[i] = read_addr(i); }。
C语言——7-18出租车计价
C语⾔——7-18出租车计价本题要求根据某城市普通出租车收费标准编写程序进⾏车费计算。
具体标准如下:起步⾥程为3公⾥,起步费10元;超起步⾥程后10公⾥内,每公⾥2元;超过10公⾥以上的部分加收50%的回空补贴费,即每公⾥3元;营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不⾜5分钟则不收费)。
输⼊格式:输⼊在⼀⾏中给出输⼊⾏驶⾥程(单位为公⾥,精确到⼩数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:在⼀⾏中输出乘客应⽀付的车费(单位为元),结果四舍五⼊,保留到元。
输⼊样例1:2.6 2输出样例1:10输⼊样例2:5.1 4输出样例2:14输⼊样例3:12.5 9输出样例3:34#include<stdio.h>int main(){double b,c;int h,a;scanf("%lf %d",&b,&h);a=h/5;printf("%0.1f,%d\n",b,a);if(b<=3){c=10+a*2;}else if(b>3&&b<=10){c=10+(b-3)*2+a*2;}else if(b>10){c=10+14+(b-10)*3+a*2;}printf("%.0f\n",c);return0;}总结:注意①:四舍五⼊需要是浮点型;注意②范围要有等号。
出租车计费系统分析与设计(AT89C51)毕业论文
百度文库- 让每个人平等地提升自我1毕业设计(论文)设计(论文)题目:出租车计费系统分析与设计百度文库- 让每个人平等地提升自我I 重庆邮电大学移通学院毕业设计(论文)任务书设计(论文)题目出租车计费系统分析与设计学生姓名刘宏博系别自动化专业自动化班级07指导教师潘显兵职称副教授联系电话教师单位重庆邮电大学移通学院下任务日期2014 年 2 月18 日百度文库- 让每个人平等地提升自我II摘要随着经济的发展,带动汽车行业快速发展,出租车日益普遍,了解在出租车上应用的计费系统,对我们日常生活也有帮助。
而使用单片机实现该系统,是深化单片机应用的良好途径。
本文是基于AT89C51单片机完成的出租车计费系统设计与分析,系统由单片机AT89C51和一些外围原件组成,具有操作简单,显示明了,功能强大的特点。
整个系统只有四个按键,包括一个“启动/停止”,一个“复位清除”,一个“查询、确认”,一个“功能键”使用六个七段数码管作为显示器,可以显示数字、字母使系统信息一目了然;本系统除了里程统计和费用计算以外,还具有万年历和语音播报功能。
万年历由时钟芯片DS1302实时提供时钟信号,再由单片机调用显示;语音播报由语音芯片ISD1420提供语音信息,语音信息放在不同的地址里,由单片机从这些地址中调用合适的语音进行播放。
[1]本方案充分发挥人性化的特点,利用ISD1420的语音功能,模拟实现带语音提示的出租车计价系统。
比较真实地模拟出租车的空车、载客、到站及对各状况的费率的计算、统计、显示和语音播报等功能。
本系统涉及到的理论知识有:AT89C51单片机知识、ISD1420语音芯片的可擦、写的语音芯片的工作原理及应用、实时时钟芯片的工作原理及应用、出租车计费系统的原理和实现方法。
【关键词】时钟芯片DS1302 语音芯片ISD1420 单片机AT89C51 掉电保护芯片24C02百度文库- 让每个人平等地提升自我IIIABSTRACTThe abstract this graduation project instruction booklet in view of the rental car whichcompletes with monolithic integrated circuit AT89C51 counts the price system. Along with the economical development,leads the automobile profession fast development, the rental car is day by day common, understood on the rental car the application cost system, also has the help to our daily uses the monolithic integrated circuit to realize this system, is deepens the monolithic integrated circuit application the good way. This system is composed by monolithic integrated circuit AT89C51 and some periphery original part, has the operation to be simple, demonstration perspicuity, function formidable characteristic. Overall system only then two pressed keys, “start/stop” “replacement”; Uses six seven section of nixie tubes to take the monitor, may demonstrate the numeral, the letter cause the system information to be clear; This system besides course statistics and calculation of charge, but also has ten thousand calendars and the pronunciation disseminates news the function. Ten thousand calendars real-time provide the clock signal by clock chip DS1302, again transfers the demonstration by the monolithic integrated circuit; The pronunciation disseminates news by pronunciation chip ISD1420 provides the pronunciation information, the pronunciation information places in the different address, transfers the appropriate pronunciation by the monolithic integrated circuit from these addresses to carry on the broadcast. This plan full display user friendly characteristic, uses ISD1420 the pronunciation function, the simulation realization belt voice prompt rental car counts the price with really simulates the rental car the spatial vehicle, carries passengers, to station of arrival and to various conditions tariff computation, the statistics, the demonstration and the pronunciation disseminates news and so on the functions. This system involves the theory knowledge includes: The AT89C51 monolithic integrated circuit knowledge, the ISD1420 pronunciation chip may scratch the pronunciation chip principle of work and the application, the real-time clock chip principle of work and the application, the rental car cost system principle and the realization method which, write.【Key words】:Clock chip DS1302 Pronunciation chip ISD1420 Monolithic integrated circuit AT89C51 Fulls electricity protection chip 24C02百度文库- 让每个人平等地提升自我IV 目录前言 (1)第一章系统分析与设计题目要求 (2)第一节设计的意义 (2)第二节设计要求 (2)第二章概述 (3)第一节出租车计费器概述 (3)第二节单片机发展前景概述 (4)第三节单片机的应用范围 (5)第三章系统介绍 (6)第一节系统组成 (6)第二节里程计量及费用计算功能 (7)第三节NE555脉冲计量功能 (7)第四节按键功能 (8)第五节时钟功能 (8)第六节语音功能 (8)第七节电路设计原理图 (9)第四章硬件设计 (10)第一节主程序/CPU模块 (10)第二节NE555脉冲发射器模块 (13)第三节按键扫描模块 (14)第四节时钟模块 (15)第五节语音播放模块 (17)第六节掉电保护模块 (25)第七节显示模块 (26)第五章程序设计 (28)第一节主程序流程框图 (28)第二节里程和费率计算程序流程图 (29)第三节程序设计 (30)附录 (30)一、英文原文 (30)二、英文翻译 (33)百度文库- 让每个人平等地提升自我V百度文库- 让每个人平等地提升自我1前言随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。
C语言基本练习题【范本模板】
1. 某城市出租车收费标准如下:起步里程是3公里,起步费是10元;超出起步里程后每公里1。
5元。
编写程序,输入行驶里程(公里),计算并输出乘客应支付的车费(元)。
#include 〈stdio.h>int main(){double n;scanf("%lf”,&n);if(n<=3){printf(”%d\n”,10);}else{printf(”%。
2f\n”,1.0*(10+(n—3)*1.5));}return 0;}2。
某城市月用水量收费标准如下:每月使用吨数小于等于15吨的,每吨收费2。
5元;每月使用吨数超过15吨的,采用分段计费:超过部分每吨3元.编写程序,输入使用吨数,计算并输出用户水费(元)。
#include 〈stdio。
h〉int main(){double n,x;scanf(”%lf",&n);if(n〈=15){x=n*2.5;}else{x=15*2.5+(n—15)*3.0;}printf("%。
2f\n",x);return 0;}3。
求解简单表达式。
输入一个形式如:"操作数运算符操作数"的四则运算表达式,输出运算结果,要求使用switch 语句(if语句)编写。
#include<stdio.h>#include<math.h〉int main(){double s1,s2;char op;scanf("%lf %c %lf",&s1,&op,&s2);switch(op){case '+’:printf("%.2f\n”,s1+s2);break;case '—':printf(”%。
2f\n",s1-s2);break;case ’*':printf("%.2f\n”,s1*s2);break;case '/':if(fabs(s2)<pow(10,-10))printf(”Wrong input!\n”);elseprintf(”%.2f",s1/s2);break;default:printf(”Wrong input!\n");}return 0;}4。
出租车计价器的设计(用计算机输入输出系统完成)
计算机硬件技术基础课程设计计程车计价器设计(用计算机系统的输入输出设备完成)重庆大学自动化学院二O一O年九月目录摘要 (2)1.设计的主要内容和方案 (2)2.任务分工 (3)3.操作说明 (3)4.程序流程图 (4)4.1 主程序流程图 (4)4.2 路程计价与等待时间计价切换流程图 (5)4.3 路程计价流程图 (6)4.4 时间计价流程图 (6)4.5 显示程序流程图 (6)5. 总结与体会 (7)5.1 吕天志的总结与体会 (7)5.2 冯尚飞的总结与体会 (8)5.3 唐杰的总结与体会 (9)5.4 旷驹的总结与体会 (10)6.参考文献 (10)7.程序清单 (11)出租车计价器的设计(用计算机系统的输入输出设备完成)摘要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
学习了计算机硬件技术基础,我们对微机原理有了初步了解,也能编程实现一些基本功能。
我们根据计价器的设计要求,用计算机输入输出设备完成了出租车计价器的软件设计。
1 设计的主要内容和方案分析任务要求,确定系统整体设计思路系统的设计方案1分析任务要求,确定系统整体设计思路(1)方案一:用汇编语言实现软件设计分为五个模块:主程序模块、路程计价模块、停车等待计价模块、油耗计算及报警模块、显示模块。
在主程序中,通过设置相应的中断向量,调用相应的中断服务程序,完成相应的计价,调用相关显示程序,完成计价器的最终显示。
路程计价模块中,首先根据行车速度和行车时间计算出行车路程,其中,行车时间可以由计算机内部的8254定时器通道0完成,然后根据路程和预先输入的起步价和每公里单价计算出价格。
在计价过程中,若遇到停车,但没有停止计价,则转入停车等待计价模块。
C程上机实验复习资料
C程实验复习目录分支结构 (3)循环结构 (4)函数与程序结构 (10)数组 (20)分支结构1.出租车计费:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:某城市普通出租车收费标准如下:"起步里程3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,即每公里租费3元。
营运过程中,因路阻及乘客要求临时停车的,每5分钟按1公里租费计收。
运价计费尾数四舍五入,保留到元。
"。
编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费(元)。
输入输出示例:括号内是说明输入3 (repeat=3)1.6 2 52 (行驶1.6公里,等待2分52秒)3.1 6 15 (行驶3.1公里,等待6分15秒)11.8 2 30 (行驶11.8公里,等待2分30秒)输出cost = 10cost = 13cost = 31#include <stdio.h>int main(void){int repeat, ri;int minutes, seconds;double cost, mile;scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%lf%d%d", &mile, &minutes, &seconds);/*---------*/printf("cost = %.0f\n", cost);}}Key:mile += ( (minutes+ seconds/60.0)/5.0 );if (mile <= 3.0){cost = 10.0 ;}else{if (mile <= 10.0){cost = 10 + (mile-3.0) * 2.0 ;} else {cost = 10.0 + 7.0 * 2.0 + (mile-10.0)* 3.0;}}2.输出21世纪所有闰年输入21世纪所有的闰年。
C题:出租车计费器
C题:出租车计费器
一、任务
设计一个出租车自动计费器。
二、要求
1、基本要求
(1)采用玩具小车模拟出租车,车轮旋转一圈(为缩短测试时间,假设为25米),里程传感器自动发一个脉冲;
(2)起步价为6元,里程为2公里;起步里程之后单价为1.6元/公里;
(3)用6位数码管实时显示总金额与总里程,最大值分别为99.9元与99.9公里。
2、发挥部分
(1)显示乘车过程等待时间,车停止时计时,车运动时停止计时;
(2)等待单价是0.1元/分钟,计入总价中;
(3)可以进行起步价和每公里单价的设定;
(4)其他功能,增加时间显示,夜间22:00~7:00单价增加50%计费,停车行车指示等。
三、说明
1.采用一节9V电池或4节1.5V电池供电。
2.设计报告正文中应包括系统总体框图、核心电路原理图、主要流程图、主要的测试结果。
完整的电路原理图、重要的源程序和完整的测试结果用附件给出。
四、评分标准。
- 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;
}。