出租车计价器的设计(用计算机输入输出系统完成).doc_第1页
出租车计价器的设计(用计算机输入输出系统完成).doc_第2页
出租车计价器的设计(用计算机输入输出系统完成).doc_第3页
出租车计价器的设计(用计算机输入输出系统完成).doc_第4页
出租车计价器的设计(用计算机输入输出系统完成).doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机硬件技术基础课程设计计程车计价器设计(用计算机系统的输入输出设备完成)重庆大学自动化学院二O一O年九月目 录摘要 21.设计的主要内容和方案22.任务分工 33.操作说明 34.程序流程图 44.1 主程序流程图 44.2 路程计价与等待时间计价切换流程图54.3 路程计价流程图 64.4 时间计价流程图 64.5 显示程序流程图 65. 总结与体会 75.1 吕天志的总结与体会75.2 冯尚飞的总结与体会85.3 唐杰的总结与体会 95.4 旷驹的总结与体会 106.参考文献 107.程序清单 11出租车计价器的设计(用计算机系统的输入输出设备完成)摘 要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。学习了计算机硬件技术基础,我们对微机原理有了初步了解,也能编程实现一些基本功能。我们根据计价器的设计要求,用计算机输入输出设备完成了出租车计价器的软件设计。1 设计的主要内容和方案分析任务要求,确定系统整体设计思路系统的设计方案 1分析任务要求,确定系统整体设计思路(1) 方案一:用汇编语言实现软件设计分为五个模块:主程序模块、路程计价模块、停车等待计价模块、油耗计算及报警模块、显示模块。在主程序中,通过设置相应的中断向量,调用相应的中断服务程序,完成相应的计价,调用相关显示程序,完成计价器的最终显示。路程计价模块中,首先根据行车速度和行车时间计算出行车路程,其中,行车时间可以由计算机内部的8254定时器通道0完成,然后根据路程和预先输入的起步价和每公里单价计算出价格。在计价过程中,若遇到停车,但没有停止计价,则转入停车等待计价模块。在停车等待计价模块中,根据等待时间及预设单价,其中等待时间由8254定时器实现,再计算出等待价格。在这个过程中,若车辆开始行驶则转入路程计价模块。在油耗模块中,根据行车路程和每公里油耗,计算相应的剩余油量,当油量一旦低于警戒值则发出报警信号,油量为0时强制停车。(1) 方案二:用C语言实现主要分为三个子程序模块:初始化主程序、主体运行子程序、示子程序。初始化包括各个变量的初始化定义、函数定义、从键盘接收字符,输出提示字符提示从键盘输入数据。主体部分包括路程计价模块、停车等待计价模块、油耗计算及报警模块。路程计价模块中,首先根据行车速度和行车时间计算出行车路程,其中,行车时间可以由计算机系统时间得到,然后根据路程和预先输入的起步价和每公里单价计算出价格。在计价过程中,若遇到停车,但没有停止计价,则转入停车等待计价模块。在停车等待计价模块中,根据等待时间及预设单价,其中等待时间调用PC机系统时间计时,每隔一分钟一次单价。在这个过程中,若车辆开始行驶则转入路程计价模块。在油耗模块中,根据行车路程和每公里油耗,计算相应的剩余油量,当油量一旦低于警戒值则发出报警信号,油量为0时强制停车。优化功能:1显示路程的单价,符合明码标价的规定,可以让消费者消费得更明白。2设置了输出背景,并且用不同的颜色显示,使显示界面更加友好。3一旦油量为0,从实际出发,则强制停车,并停止计价。根据小组讨论和实践验证分析,我们发现在用汇编语言进行软件设计时,组员们普遍遇到了较大困难,对计算机内部的中断机制不清楚,只能运用定时中断,无法运用软件中断,在处理数据时也遇到了较大困难。因此,我们在研究了计价器硬件工作原理后,决定用C语言完成系统的软件设计。2 任务分工根据总体设计方案,确定每位组员的详细分工小组讨论系统优化功能设计,完成总的软件设计,加入相关的优化功能,小组成员共同完成最终程序的调试运行,并根据运行结果作出相应的调整,完成设计任务。3 操作说明在程序开始运行后,系统的初始状态是出租车停止,具体操作方式如下:1、 按任意键启动系统2、 设置3公里以内的白天和晚上的价格3、 设置3公里以外的白天和晚上的价格4、 设置出租车时速(0V1000)5、 设置起初车内油量6、 设置每公里耗油量7、 按任意键启动速度计价8、 按q等待计时,按s车启动,按esc车停止计价。4 程序流程图主程序流程图:有键按下,开车?停止油耗夜间计价白天计价白天?初始化开始 否 是 是 否油耗显示ESC按下? 否路程计价与等待时间计价切换流程图开始q按下? 是等待时间计价 否 按路程计价 是 否S按下结束路程计价流程图:开始计算路程路程3 是y=3 否y=7+(x-3)显示q按下 否结束 是第 22 页 共 22 页时间计价流程图:开始计算等待时间根据等待时间增加单价S按下? 否停止显示程序流程图:开始当前时间当前速度当前价格当前里程等待时间计算油耗余油显示 2否 是报警结束5 总结与体会学习了计算机硬件基础,我们了解了计算机内部指令工作原理并学会了用汇编语言完成简单的程序设计,同时也理解了高级语言是如何在计算机内部实现的。经过了硬件技术课程设计我们真正地学会了如何应用应用硬件技术完成简单地设计。拿到这个题目,出租车计价器的实现,我大体想了一下设计思路。首先应该调用系统时间判断是白天还是晚上,进而转向不同的子程序,然后就是计价模块,分两部分,一部分是车在行驶时的计价,另一部分时车停止时的计价,最后计算油耗并显示相应的内容。于是便分配了每个组员的任务。我尝试用汇编语言编写主程序,用计算机内部的8254通道0作为定时器,定时一秒产生一次中断,在中断服务程序完成计价,但怎样判断停车并产生中断一时半伙搞不清楚,另外,数据的处理、显示都有一定难度。鉴于此,我们小组讨论决定用C语言完成程序的设计。用C语言编写程序不用考虑数据处理,显示也简单得多,但需要我们查阅相关资料调用相关函数完成计时、计算、输出等。在组员们完成子程序的设计时,我面临的问题是如何把一块块子程序连接起来,实现从输入到输出,再到定时计时等一系列工作,开始没能连续计算时间,导致了输出只显示当前值,时间路程都是固定不变的,通过不断地改正、调试,终于实现了部分基本功能。关于报警我们在C语言中嵌套了汇编,但并不成功,后来我们查资料用/a实现了报警功能。再加入行驶过程中改变速度我们也费了一番周折,几次调试都不成功,但最终经过我们的努力还是完成了这项功能。计价器的设计,题目看似简单,思路也清楚,但真正在编程时我们遇到了许多困难,因为在具体实施时要考虑很多细节的处理问题。通过此次课程设计,我学会了如何分析实际问题并编程实现,学会了如何克服各种困难,学会了如何分工协作共同完成项目的设计实施。 这次课程设计我组有4名成员,做的是出租车计价器的设计(用计算机系统的输入输出设备完成),我的任务是负责按车速计价程序的编写和部分报告的完成。本来我们应该用汇编去进行编程,但根据小组讨论和实践验证分析,我们发现在用汇编语言进行软件设计时,组员们普遍遇到了较大困难,对计算机内部的中断机制不清楚,只能运用定时中断,无法运用软件中断,在处理数据时也遇到了较大困难。因此,我们在研究了计价器硬件工作原理后,决定用C语言完成系统的软件设计。我负责的部分本来比较简单,但具体操作的时候却给了我不小的教训。编程的时候,我很快就把程序编好了,但当我把程序交给组长运行时他却说我的程序块出现了问题,输入一个很小的时间却有很高的价格。这下把又赶紧检查,找了很长时间还是不对,就这样两天过去了,最后实在不行我去找认识的一个编程比较好的同学,我把大体内容给他说了一下,他开始检查我的程序,终于发现了错误,原来我在算路程的时候没把时间换成标准单位,忘了除3600。这本是一个很小的问题但让我感触很多,其实很多人都很接近成功,而往往都是由于一点点小错误而与成功失之交臂,这不得不让人们感到惋惜,所以我在以后的生活中会严格要求自己无论做什么事都严肃认真。另外我的工作还有报告的完成,这一部分比较简单,我原本把大家的程序和感想总结在一块就行了,但我不知怎么地完成以后却忘记保存了,我赶紧又把大家的资料找回来重新做,幸亏大家的资料还在要不真不知道该怎么办。就这样我门的课程设计完成了,我做的并不像其他同学的那么难,需要差很多资料,但却给了我不小的教训,就拿忘保存这件事来说吧,如果大家的资料没备份我们就得再做一遍,那样既浪费时间又降低了效率,再者现在只是个课程设计,如果以后工作中把很重要的资料弄丢了,那样后果会更严重,我真不敢再往下想了.不过这也给我一个提醒,无论干什么事都要有一个良好的习惯,做什么事不要急于求成要一丝不苟。另外我要考研,我想这会对我的考研有好处的,它会让我在考研道路上减少曲折,也会让我在以后的生活中减少波折. 计算机硬件技术基础课程设计是本学期开校第一个任务,分组完成后每个人都承担自己分内之事,我们组的课程设计题目为:计程车计价设计(用计算机系统的输入输出设备完成),这个类似现实的问题确实,有一定的难度,经大家一并商量后,组长吕天志分配给每个人任务,其中我承担的是:显示当前燃油量,车辆行进过程中反映燃油的消耗,但燃油量低于警戒值时报警,以及画各软件模块的流程图。刚开始我准备用汇编语言编写程序,但经过吧一天的实践后,发现比较复杂,后经过大家商量决定用C语言编写,看似短短的一句话,当需要设计成程序后才知道,比较困难。程序语言不同于,一般的语言,太精炼,所以很容易忽略,整个过程中需要反复的编译,找错,其中过程,让让人郁闷,多方请教反复看书查阅资料最后写出了正确的程序。说起来过程也是有些心酸,最后写出程序的一刹那,还是很有成就感的!在画各软件模块的程序流程图中困难很少,整个过程也很简单,我是在Word上画的,整个过程比较轻松。整个课程设计中遇到的问题都是在完成程序设计中的,写出来的程序虽然不多但是耗费了不少周折,在编写程序中,有些数据课程设计题目上并未给出,我们商量后决定采用一个合理的数据,全组统一,如余油量少于2时报警等。完成设计后我回过头看看,又加深了对c语言的了解,熟悉了它的应用,当然过程中也翻阅了很多参考资料,如程序设计技术及实验指导书,计算机硬件技术基础及实验指导书等。简单回顾这个过程,时间虽然短暂但是我们也从中学到了不少东西,凡事多商量,一个人的思维难免有局限性,一种方法走不通,赶快换路,时间很重要,分工合作互相帮助,明确任务详细计划,并按照计划确定任务步骤一步步的攻克难题。我们同样学会了一些把文字转换为我们实际设计时所用语言的能力。再设计过程中大家齐心协力,最后将各自的子程序合并在一起,由组长整合后,我们的程序最终正确的运行,这里包含大家的两周劳动,增强了我们的自信。 这次关于计程车计价器的设计任务相对来说,比较繁琐,我们一共花费了一周左右的时间,每个人都积极动手和思考,团结得比较融洽,我们还把这个设计详细地进行了分工。每个人负责不同的一小块。由于计价器可以说是相对来说比较智能的器件,因为它的计价需要按照路程,时间的差异收费不同,一般情况下它有个起步价,一般设置在3公里范围内,然后超过3公里了就按照每公里的单价收费。这种情况比较普遍。但是遇到路上堵车的情况,也就是出租车没有走,但是同样要计费,这种计费方式就是按照时间进行计费,也就是说每隔一段时间,计价器计价结果增加一次单价。出租车的启动或者静止应该是计价器自己进行分析,有必要设置一个传感器。如果没有设置传感器,则需要人为的进行计价调整,那样相对来说比较麻烦。然而更过时候,白天的收费标准和晚间的收费标准不同,晚上的收费按照晚上的起步价和晚间美公里单价计算。比如说晚上10点过后到早上7点之间这段时间里面。这种不需要计价器自己感应,如果把它设计成计价器自动调节收费标准,会产生一些没必要的错误,至少在时间上存在差异,比如快几分钟或者慢几分钟。我觉得人为地调整收费情况比较好。 这次设计任务中我主要是负责停车停车等待时的计价程序,也就是堵车或者等待乘客的时候所需要的程序,属于一个子模块。这个部分相对来说比较简单,而且内容上不是很繁琐。在设计该段程序之前我首先列出了程序流程图。在此用文字作简单的描述,首先是程序开始(指等待的时候,即开始等待),通过程序计算出时间,根据时间增加单价,然后考虑等待时间是否结束了(也就是说预先设置的开关键S是否按下),若是,则程序结束,显示出来。如果不是,那么需要回到第一步,继续这个程序,直到等待时间结束为止。 通过这次课程设计,我学到了很多东西,。锻炼了自己的动手能力,积极查阅资料的动力,以及思考能力。为今后投入工作打下了一个坚实的基础。同时更重要的是这次设计室分小组进行的,每个小组几个成员一起探讨,共同努力,提高了团队的意识。 6 参考文献1.熊壮、陈策主编.程序设计技术.重庆大学出版社2.卜艳萍、周伟主编. 汇编语言程序设计教程. 清华大学出版社3. 徐爱芸、向华主编. 汇编语言程序设计教程与实验. 清华大学出版社4.黄勤、高富强主编.计算机硬件技术基础实验教程.重庆大学出版社7 附录 程序清单#include #include #include #include #include #include double temp,V,oil,oil_used,price_day,price_night,price_day3,price_night3;char reset256;int st256,R,t,X,Y,x,y;clock_t start, finish; double price,distance,delay_min,delay_sec;char *wday=Sun,Mon,Tue,Wed,Thu,Fri,Sat,*endptr; time_t timep; struct tm *p; const char tips1256=重置速度的提示:,tips2256=r=重新设置速度;c=取消设置;回车=速度设置完成;整数 且 0V0 & ch =0 & ch0 & ch=8)reset-R=0;if (ch=13)st13=str=0;if (strtod(reset,&endptr)1000)V=strtod(reset,&endptr);R=0;reset0=0;/ 画渐变的天空(通过亮度逐渐增加)H = 190;/ 色相S = (float)1.4;/ 饱和度L = 0.85f;/ 亮度for(y = 300; y 600; y+)L += 0.0005f;setcolor( HSLtoRGB(H, S, L) );line(0, y, 799, y);return true;return false;void init()R=0;reset0=0;price=distance=0;delay_min=delay_sec=0;printf(please press any key to start the system.n);while(!kbhit();getch();system(cls);printf(please set the price before 3 km in day and night .n);scanf(%lf%lf,&price_day,&price_night);system(cls);printf(please set the price more than 3 km in day and night .n);scanf(%lf%lf,&price_day3,&price_night3);system(cls);printf(please set the speed V km/h .n);scanf(%lf,&V);system(cls);printf(please set the oil mass .n);scanf(%lf,&oil);system(cls);printf(please set the oil used per 100km .n);scanf(%lf,&oil_used);system(cls);printf(please press any key to start the taxi.n);while(!kbhit();getch(); /LOGFONT f;/getfont(&f);/ 获取当前字体设置/f.lfHeight = 30;/ 设置字体高度为 48(包含行距)/strcpy(f.lfFaceName, 黑体);/ 设置字体为“黑体”/f.lfQuality = ANTIALIASED_QUALITY;/ 设置输出效果为抗锯齿 /setfont(&f);/ 设置字体样式initgraph(800, 600);/ 设置屏幕尺寸X=20;Y=10;setfont(24, 12, 黑体);/ 设置字体/ 画渐变的天空(通过亮度逐渐增加)H = 190;/ 色相S = (float)1.4;/ 饱和度L = 0.7f;/ 亮度for(y = 0; y tm_year,temp,10); strcpy(str,temp);strcat(str,/);ultoa(1+p-tm_mon,temp,10); strcat(str,temp);strcat(str,/);ultoa(p-tm_mday,temp,10); strcat(str,temp);strcat(str, );strcat(str,wdayp-tm_wday);strcat(str, );ultoa(p-tm_hour,temp,10); strcat(str,temp);strcat(str,:);ultoa(p-tm_min,temp,10); strcat(str,temp);strcat(str,:);ultoa(p-tm_sec,temp,10); strcat(str,temp);outtextxy(X,Y+170,str);setcolor(0x00A800);/GREENif (p-tm_hour=7 & p-tm_hour=22)strcpy(str,起步价格 );ultoa(int(price_day),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(price_day*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+210,str);strcpy(str,每公里单价 );ultoa(int(price_day3),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(price_day3*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+240,str);elsestrcpy(str,起步价格 );ultoa(int(price_night),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(price_night*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+210,str);strcpy(str,每公里单价 );ultoa(int(price_night3),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(price_night3*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+240,str);setcolor(0xA800A8);/MAGENTAstrcpy(str,当前速度 );ultoa(int(V),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(V*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+270,str);setcolor(0x5454FC);/LIGHTREDstrcpy(str,当前价格 );ultoa(int(price),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(price*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+300,str);strcpy(str,当前里程 );ultoa(int(distance),temp,10);strcat(str,temp);strcat(str,.);ultoa(int(distance*10)%10,temp,10);strcat(str,temp);outtextxy(X,Y+330,str);setcolor(0x54FCFC);/YELLOWstrcpy(str,等待时间 );ultoa(delay_min,temp,10);if (delay_min10)strcat(str,0);strcat(str,temp);strcat(str,:);ultoa(delay_sec,temp,10);if (delay_sec10)strcat(str,0);strcat(str,temp);o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论