计算机硬件技术基础课程设计计程车计价器设计重庆大学自动化学院2011年9月计程车计价器设计2目录一、引言……………………………………………3二、任务分工………………………………………3三、设计方案………………………………………43.1系统框图……………………………………43.2基本功能及实现……………………………53.3软件设计基本程序…………………………53.4硬件设计……………………………………5四、程序流程图……………………………………6五、总结体会………………………………………8六、参考文献………………………………………12七、程序清单………………………………………12计程车计价器设计3计程车计价器设计(用计算机硬件实验系统输入输出设备完成)一、引言现在各大城市出租车已经成为了一种重要的交通工具,当然出租车的收费问题也成了人们关注的焦点,那么怎么样才能实现一种合理的收费方式让大家都认可呢?在这种要求下,出租车自动计价器就走进了人们的生活,当然这就要求有一种合理公正的计价器收费方式。这不仅关系到出租车计价器的市场,也影响这出租车的市场,这就要求我们设计出更好的计价器来满足人们的需求。本课题是关于出租车计价器的设计。重点是设计计价器的实用性,并尽量使最后的成品能满足商品的要求,在本次设计中,我们主要以计价器的基本功能作为设计的重点,在满足实用性的同时我们也将考虑设计一些扩展功能,使计价器更加的方便人们的使用。为了完成上述设计,我们采用了8254、8255等芯片,用计算机汇编语言进行软件功能的实现。大体功能有白天、黑夜计价切换,可以自己设置起步价,行驶速度可调,等待计价,LED显示等。二、任务分工1XXX:软件设计、主程序、程序调试、初始化2XXX:报告撰写、数字拆分程序、循环按键程序3XXX:路程计算、价格计算、油耗计算、标志设置4XXX:键盘程序、显示程序、发声报警程序三、设计方案3.1系统框图计程车计价器设计43.2基本功能确定及实现3.2.1白天、夜间单价与起步价可设置在设计过程中我可以通过4*4键盘来对单价、起步价进行输入设置,我们将白天的价格设置成基础价格,夜间的价格可以通过基础价格进行加费,比如夜间单价可在白天的价格基础上加0.1元(每公里单价)和1.0元(起步价)。比如我们设置基础价格为单价0.5元,3公里内起步价3.0元,则白天行车每公里0.5元,3公里内起步价3.0元,夜间行车每公里0.6元,3公里内起步价为4.0元。此功能的设计可以在开车按键之后进行基础价的设置功能,通过键盘输入,并编写键盘功能子程序与白天、夜间价格转换子程序实现。3.2.2行车中可对速度调节为了在行车过程中对不同的速度进行调解,我们设计了三种不同的速度档次,可以在行驶过程按不同的键进行切换速度标志,当然在速度不同是路程的变化速度也不同,自然价格变化的频率也就不同,则需要程序对不同的速度进行响应。具体的速度与按键如下表所示:速度档位速度0档速度1档速度3档按键设置数字键8数字键9字母键A3.2.3路程、总金额与速度、时间的变化关系总路程与总金额的计算是通过时间与速度来计算过的,当路程不足3Km时总金额为起步价,超过3Km后则按每公里加一次单价进行计算,可以用数学公式进行表示:路程S=V*T,当不满3Km是总金额M=M0(S=3)和超过3Km时总金额M=M0+(S-3)*P(S3)作为路程与总金额的逻辑公式来计算。在此部分设计中要求有计价子程序。3.2.4等待计价通过前面对不同速度档位的设计,在堵车或停车等待时可以调用速度0档,通过等待计价子程序来对等待时间进行计价。在等待计价子程序中设定一个时间值,当等待时间超过这个时间值后对总金额加一次单价,同时计数器清零,依次计价,直到速度变为不是0档位的时候程序跳出等待计价子程序,在等待计价过程中速度是为0的,自然路程就不会有变化,金额的变化只与时间有关系,则可以用公式M=M0+K*P(K为时间间隔整次数,M0为堵车之前的总价格,P为单价,计程车计价器设计5其中P我们设计和每公里单价相同)。3.2.5LED显示在本设计中LED需要显示不同的信息(单价、速度、金额、燃料量等),显示不同的信息就要通过切换来实现,可以设置显示标志FLAGXS来进行切换,当FLAGXS=1时显示总金额,当FLAGXS=0时显示速度,而FLAGXS的值可以通过键盘来输入,当然在设计中有很大不同的显示标志,通过对键盘的扫描可以确定应该怎么进行显示切换,可以设计一个子程序专门对标志进行设置,这样可以提高效率简化主程序。3.2.6开、停车在设计过程中对开、停车的切换也要进行相应的设计,至于切换标志可以在标志设置子程序中进行设置。3.3软件设计基本程序3.3.1基本程序通过对基本功能的分析,我们确定了相关的程序,其中包括了主程序、键盘子程序(按键子程序与读键子程序)、显示子程序、标志设置子程序、路程计算子程序、价格计算子程序、等待计价子程序、价格设置子程序、清零子程序等。3.3.2功能键设置下表是对基本功能键的介绍:键名功能键名功能数字键2开始计价数字键8速度0档数字键3停止计价数字键9速度1档数字键4显示速度字母键A速度3档数字键5显示价格字母键B显示油量数字键6切换为白天字母键E开车数字键7切换为夜间字母键F停车3.4硬件设计设计中要求用计算机硬件实验输入输出设备完成,这就要求用JK实验板完成设计,以下是硬件的部分线路连接:A口(J4)——位选口及键盘行控制信号(J8)(J8-1为第一行);B口(J2)——段选口(J7);C口(J3)——键盘列控制信号(J9)(J9-1为第一行);计程车计价器设计68254定时器0与定时器1的GATE门串联后接开关;定时器0的OUT口与定时器1的CLK口连接;定时器1的OUT口接8255的PC7;定时器0的CLK口接脉冲源(J10);四、程序流程图4.1主程序流程图计程车计价器设计74.2计价子程序流程图4.3价格设置子程序流程图计程车计价器设计84.4等待计价子程序流程图五、总结体会1、XXX:在此次计算机硬件技术基础课程设计中,我们小组选择了通过计算机硬件实验系统输入输出设备实现计程车计价器的设计题目。在实验室开放的之前,我作为组长小组就组织小组成员通过讨论进行了需求分析,并确定了实验流程以及实验设计所需的相关硬件,以及小组成员分工。我主要负责程序总体设计、主程序的编写以及程序调试。在设计初始我重新详读了计算机硬件技术教材及其配套试验教材,对以前所学内容进行了回忆和温习,对程序整体输入输出界面进行构思,划分程序模块,整理出主程序流程。相比于程序的编写,作为组长我感觉更需要花功夫的反而在成员之间的协调计程车计价器设计9分配,需要经常召集成员们进行进度分析与问题查找,并且抽出时间帮助解决他们在自己工作范围内遇到的问题。要明确整个程序的数据流向以及各个子程序的入口和出口数据,对程序进行优化,尽量使模块间有更好的耦合性和内聚性。最初完成的程序中会存在非常多的错误,除语法错误之外,仍存在设计思路不足等问题。根据我们小组成员的实际水平,对目标功能作了难度上的修改,比如速度的调整由原计划的连续变动转变为3个档次,晚间起步价及单价由单独设置改为基于白天价格由程序计算,里程计算等拓展功能由于过于繁复也作了删除。软件调试过程中遇到的主要困难在于键盘输入及LED,当程序进行到某些子模块时会出现LED显示不正常的情况,尝试过用开关取代键盘作为输入设备但效果仍然不理想,求助于其他班同样课题小组的同学们后,最后得以解决问题。另外,由于此次的实验硬件系统不能实现8254的定时中断,联系其他小组后发现都有同样的问题,因此我们改变了硬件设计,通过用8255芯片的C口查询8254的定时结束输出地高低电平来实现程序的定时。本次课程设计课题的难度相比于上课时所练习的简单程序,复杂度上升很多,需要对整个功能进行化繁为简的分析拆解,在编程过程中不断加深对汇编语言的理解,能够更加熟练地使用MS-DOS程序进行调试,通过单步运行查找异常的症结所在。限于小组成员们整体上水平仍有不足,无法通过短短两个星期的课程设计达到飞跃性的提高,因此最终成果在功能上仍有不尽如人意之处。尽管如此,这仍是整个小组齐心协力的产物,每个人都需要跳出某些定式思维,给予队友们以信任,也能通过其他人的帮助更快更好的发现自己的问题,这些都是本次课程设计带给我的收获。2、XXX:在本次计算机硬件技术基础课程设计过程我主要负责报告的撰写,同时也负责拆分子程序和循环中按键子程序的编写。报告的撰写是一项比较简单的任务,但同时也要求有足够的细心,以至于不出现或少出现一些不必要的错误。当然报告撰写中也包括了对流程图的设计与绘制,这就要求要对整个系统有详细的了解,同时也要对一些子程序的运行过程做必要的了解,这让我体会到做每一项工作,无论是多少都要对整个系统以致整个工程都有着系统的认识。在编写子程序的过程中,遇到了一些问题,主要原因是对所学知识的掌握不计程车计价器设计10够深,这就说明了对于知识的学习一定要认真,不能带有一丝的疏忽,同时也要对所学过的知识要不定时的加以复习,这样才不会在自己用到时不那么的难堪。对于拆分子程序我采用的是求余的算法,这样的算法比较简单容易理解,那为什么要对数字进行拆分呢?很明显在显示部分不能直接对一个多位数进行显示,这样就只有将一个多位数拆分成若干个一位一位的数字来进行显示,所以这个程序虽然比较简单,但也是和其他程序一样的重要,是不能缺少的。对于循环按键程序我个人认为还是有一定的难度的,因为它涉及到了对各个键的扫描的和判断,通过和小组成员的讨论得出了设计方法,就整个键盘部分程序而言在设计过程中是比较繁琐的,这也就要求我们对整个键盘部分进行系统的分析,从扫描到读键值,再到判断功能调取程序做全面的设计分析。我所写的循环按键程序主要功能是在程序运行过程中对输入的按键进行扫描和判断,为系统提供相应的操作判断。当然在编写的同时对于8255的端口问题要特别的注意,一定要保证和主程序相对应,显然如果8255端口设计出现问题自然整个系统也无法正常运行。在本次设计过程中通过和小组成员之间的讨论以及思考中获得了不少的经验,也学到了怎么样和小组成员对问题和谐的探讨及解决,最后还是顺利的完成了本次课程设计。3、XXX:在这次计算机硬件课程设计的我的主要工作是几个计算程序的编写,在和其他三个组员讨论出整体方案之后我们明确分工,设计进行得有条不紊。计算机硬件这门课程是大三上学期学习的,本人疏懒许多知识忘记,设计之初对程序的编写部分进行了针对复习,许多知识重新记起来了,甚至对以前没有理解的知识进行了重新认识,例如push(压栈)、pop(弹栈)等,我一直认为自己不是编程的好手,对编程也是照书本生拉硬套,在编写程序的过程请教了我们班的编程达人终于完成了计算部分的编程,收获不小。在设计单价过程中本来准备对白天和夜间通过不同的程序设计,但为了设计方便起见我们设置了基本价格,是白天的价格等于基本价格,而夜间的价格只需要在基础价格上加一个熟。当然价格的计算包括很多不同的情况,有等待计价,正常计价,而正常计价又对于不同的速度有不同的计价频率,所以计价过程的程序比较多。同时为了方便各种不同的切换,我们设置了一个标志程序,对速度切换标志,白天夜间切换标志,显示切换标志,计费方式切换标志等进行设置。计程车计价器设计11学院安排的要求我们通过以小组的形式单独完成完整的设计题目,程序的设计已经超出了课程的基本要求,但是却仍能用在硬件课程中所学到的知识完成。它使我了解了在设计程序之前进行需求分析的重要性,以及设计程序的流程。让我熟练地掌握了MS-DOS程序调试过程,对在调试程序是利用F7、F8、F9功能键来分别实现跟踪执行、单步执行以及连续运行的重要性。通过这次的课程设计,我对8255、8254芯片有了更深的了解,虽然在本次试验过程中没有用到8259芯片来实现定时的中断调用,但是我们还是复习了8259芯片的相关资料。而且我也体会到了团队力量的强大性,自己设计的程序在自己眼里是正确的,但通过