计算机硬件技术基础课程设计计程车计价器设计(用计算机系统的输入输出设备完成)姓名:刘亚学号:20085345姓名:周桂锋学号:20085346姓名:袁云军学号:20085347姓名:郭洋成学号:20085349重庆大学自动化学院二O一一年九月目录引言.............................................................................................................11.设计的重要内容和方案...................................................................11.1设计的主要内容..........................................................................11.2设计方案......................................................................................12.任务分工...........................................................................................13.实验中运用的一些实验原理...........................................................22.1键盘按键中断..............................................................................22.2取系统时间..................................................................................22.3扬声器驱动系统原理..................................................................23.操作说明................................................................................................24.主程序及子模块流程图........................................................................35.每个人的心得体会..............................................................................116.参考文献..............................................................................................157.附录.......................................................................................................161引言现今,不管是在那些大城市,还是小县城。出租车早已经成为了一种重要的交通工具。不但解决了公交车较慢的烦恼,也解决了自己开车没停车位的弊端。总之,出租车早已融入了这个城市的生活。既然如此,我们不得不考虑下出租车收费的问题。拥有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。所以我们下面就用汇编语言来设计出租车计价系统。1.设计的重要内容和方案1.1设计的主要内容设计一个计程车计价器,能用计算机系统的输入输出设备完成计程车计价器的基本功能,并在此基础上自行完善和优化系统功能。基本功能具体要求如下:1.以计算机系统的输入输出设备为基础,一键盘作为输入设备,显示器作为输出设备,完成设计;(允许使用PC机的扬声器作为发生设备)2.按键启动计程车和停车,可以在行进过程中按键调整车速。3.按键开始计价和停止计价。开始计价后,3公里内几家结果为起步价,3公里后,根据车速和行进时间计算所行距离,所行距离每达到1公里时,计价结果增加1次单价,要求精确到角。若在计价过程中停车,则每隔一段时间(具体时间间隔自行设置),计价结果增加1次单价。晚上10点到次日早上7点,按晚间起步价和晚间每公里单价计算。4.屏幕上要求显示当前车速,当前计价结果,本次计价时间。停止计价后,本次计价结果保持一段时间后清为0.5.显示当前燃料量,车辆行进过程中反映燃料的消耗,当燃料量低于警戒值时报警。1.2设计方案我们经过组内激烈的讨论,将基本功能分为了几个小模块。如下:1.速度、时间差、油量模块,计算里程计价模块。2.等待计价模块,总油量、每公里耗油模块。3.显示车速、计价结果、时间模块。4.设置起步价、单价,并判断是否白天晚上,并将输入的元,转化为角模块。我们小组四人分别将这四个子模块分别编辑。然后共同构想了主程序模块,以上各个模块的思路请看流程图。2.任务分工袁云军:设置起步价、单价,并判断是否白天晚上模块;输入的起步价和单价的单位元,化为角模块,并共同完成论文。周桂锋:编写取第一次系统时间程序,取系统时间通用程序,计算相邻时间差子程序,计算总里程及总价格子程序,共同完成论文。刘亚:编写子程序每次计程车运行的总时间的提取,换算称实际的时分秒格式并显示;每次运行的总价格的计算,及显示;声音模块的写入及调用;及有关论文的撰写。23.实验中运用的一些实验原理2.1键盘按键中断程序中用到的中断:引发9号中断,键盘的输入到达60h端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽终端信息。CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int9中断例程。编写int9中断例程:①键盘产生扫描码;②扫描码送入60h端口;③引发9号中断;④CPU执行int9中断例程处理键盘输入。2.2取系统时间取当前系统时间采用int21h中断的2ch号功能,分别将当前时刻的时、分、秒和百分之一秒存入对应的寄存器:ch、cl、dh、dl。2.3扬声器驱动系统原理在PC中,8254的通道2与计算机的扬声器相连,由通道2工作于方式3产生一定频率的方波信号去驱动扬声器按一定频率发声。其原理如图1所示。从图中可见,系统使用并行I/O接口8255A中PB端口的最低两位来控制该发声驱动系统:PB0作为8254通道2的门控信号GATE2,控制通道2定时计数启停;PB1与通道2的OUT2信号相与后去控制扬声器的接通和断开。PC中8255A的端口地址为60H~63H,8254的端口地址为40H~43H。可见,要使扬声器发声,PB0置1,通道2才能工作;PB1置1,OUT2上产生的一定频率的方波信号才能通过与门送到驱动器,从而使扬声器发声。图1扬声器驱动电路原理图3.操作说明在程序开始运行后,系统的初始状态是出租车停止,具体操作方式如下:1、按任意“s”键启动系统;2、设置白天的起步价和单价;3、设置晚上的起步价和单价;4、按键选择白天或晚上;5、按加速键“+”调速启动出租车,即速度由0变为正,计价器开始里程计价;36、在计价过程中通过“+”,“-”键实现车速的调节;7、按减速键“-”使车速重新回到0,进入等待计价;8、等待计价时,如果按加速键“+”使速度变为正,则重新进入里程计价9、等待计价时按“q”键,出租车停车,停止计价。4.主程序及子模块流程图主程序流程图4开始显示启动车提示语是否有启动键“s”按下?显示设置提示语分别设置白天、晚上的起步价和单价装入自编键盘中断程序的中断矢量,打开键盘中断1、记录光标的初始位置2、显示初始化检测速度是否为0?车启动,取开始时间主程序中qushi标志行1、置显示光标位置,清楚停车提示语,返回光标到初始位置2、取当前时刻系统时间延时取当前时刻系统时间计算相邻两次取时的时间差调用折算车速jichesu调用计算里程计价price调用计算当前油量youhao调用显示子程序show_zcx,实时显示各项数据速度是否为0?延时主程序中tuichu标行显示本次计价结果显示一段时,清零,即显示初始化返回等待计价时当车速由0变为正时调用等待计价子程序ddjj等待计价时按“q”键当前油量等于0时,跳转到主程序tuichu标志行NYYNYN5按键中断服务程序09号键盘中断入口读取按键扫描码是否按下“+”键?是否按下“-”键?速度是否大于240km/h?速度增加6km/h速度是否小于等于0?发中断结束命令,返回速度减少6km/hNYYNNYNY计算当前油量子模块开始取总油量、每公里耗油量和总里程公里数计算当前油量,即总油量减耗油量当前油量是否大于0?当前油量是否小于等于油量警戒值?是否是第一次小于等于油量警戒值?播放报警声音返回跳转到主程序tuichu标志位,强制停车NYNYNY6等待计价子模块开始1、置光标2、显示停车停止计价提示语3、置光标回初始位置是否有“q”键按下?Y跳到主程序中的tuichi标志行,退出前显示命令车速是否为0?跳到主程序中qushi标志行,取当前系统时间,进入里程计价计算适当延时取第一次系统时间取第二次系统时间计算两次取时的时间差,并记录等待总时间等待总时间是够变化了规定的时间间隔?1、总价跳价一次2、调用显示子程序更新显示内容NYNYN7输入白天和晚上的起步价和单价模块开始提示输入白天起步价输入白天起步价调用erjzzh模块将转化的值存入内存pricing1提示输入白天单价输入白天单价调用erjzzh模块将转化的值存入ppm1提示输入晚上的起步价输入晚上的起步价调用erjzzh模块将转化的值存入pricing2提示输入晚上单价调用erjzzh模块将转化的值存入ppm2判断是有键按下判断按下的键是否是d判断按下的键是否是n将pricing1和ppm1的值分别存入pricing和ppm将pricing2和ppm2的值分别存入pricing和ppm结束NYNNYY8元转化成角模块NY开始送输入字符串的第一位给al转换成十进制数,再乘以10,送给寄存器bl再送字符串的第二位给寄存器al判断是否的小数点再送字符串的第三位给寄存器al转换成十进制数,再乘以10,与寄存器bl相加,最终结果存于bl结束9计算时间差子程序流程图YNYNYN开始是否与系统初始时间比较算法赋值2算法赋值1计算小时数之差差值是否相等小时差化为分,加上最近一次时间的分钟数分钟之差化为秒,存入内存计算百分之一秒之差是否借位借位更新秒数计算百分之一秒之差,然后计算秒数之差,化为1/100s单位10里程计价子程序流程图NYYNNY将求得的时间之差存入表示1/100s的内存空间,即为时间差结束开始取当前车速和时间差计算总里程累加入内存是否需要设起步价设起步价里程是否大于标志位miletest1内存gongli加一,标志位miletest1加1000里程是否大于miletest总价累加每公里单价,miletest加1000结束115.每个人的心得体会小组成员:刘亚1、课程设计的目的本次设计的题目分为两大类,5个题目,只是一种是涉及硬件的题目,一种是纯软件写出的题目。我们小组有4个同学,分别是郭洋成,袁云军,周桂峰,我一起商量以后选择了:计程车计价器设计(用计算机系统的输入输出设备完成),这个题目。选取这个题目大家有这样几点考虑:第一,怎样设计总体方案(思路清晰)第二,分成几个子模块且每个模块怎么融合(连接简单)第三,总程序的调试及功能的实现(显示清晰)2、课程设计的任务拿到题目后,4个同学集思广益,都纷纷开动脑筋,思想的火花一下子全都迸发出来了,最后经过综合后,留下了大家觉得比较合适的、好的、容易实现的思想后,完成了总体方案的设计和定稿。我们的任务是实现计价器的一些基本功能,设置不同时段