ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:125.11KB ,
资源ID:15064794      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15064794.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(出租车自动计价器微机实验及课程设计报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

出租车自动计价器微机实验及课程设计报告.docx

1、出租车自动计价器微机实验及课程设计报告东南大学自动化学院微机实验及课程设计课程设计报告综合测试题六:出租车自动计价器姓 名: 学 号: 专 业: 自动化 实 验 室: 运算机硬件技术 组 别: 同组人员: 设计时刻: 2021年05月 16日 2021年5 月28 日评定成绩: 审阅教师: 一 课程设计目的与要求.1二方案论证与原理设计1三详细设计2四方案实现与测试4五分析与总结5一. 课程设计目的与要求一、课程设计目的(1)巩固已学的微机原理与接口的大体知识;(2)锻炼自己分析问题和解决问题的能力;(3)为通过本课程设计让学生更好地将所学知识进行应用,更深刻地明白得微机原理与接口课程的知识。

2、二、大体要求设计一个出租车自动计价器,计费包括起步价、行车里程计费、等待时刻计费三部份,用三只数码管显示总金额,最大值为 元,起步价 元,3 千米之内按起步价计费,超过3 千米,来回双程可设每1 千米 元,单程每千米 元,等待时刻每分钟 元。用两位数码管显示总里程数,最大值99km,用两位数码管显示等待时刻(分钟),最大值99 分钟。用直流电机模拟出租车行驶,里程数与脉冲个数成正比,每1km 脉冲数100 个(可设定),低于每小时5 千米时作为等待状态。(1)假设有计数比较器测定停车与行车状态,转换成开关信号。开关输入行车状态,并用LED 灯显示;同时有空车信号,可用于启动计价并用LED 灯显

3、示;(2)记录里程数,等待时刻,计算总金额,并实时显示;(3)模拟刹车和启动动作,动作后当即停车/行车;(4)简单的标定和检错功能。3、进一步设计要求(1)打印输出功能,在屏幕上打印上下车时刻、里程、价钱;(2)保留最近5次数据,可选择打印在屏幕上以便检查;(3)有语音提示功能。 为实现课程设计中的要求,即完成一个出租车自动计价器,能够将出租车自动计价器系统分成5个模块:操纵模块、计程、计时模块、计费模块和显示模块。出租车自动计价器系统各模块如以下图所示:显示模块控制模块计程模块计费模块计时模块其中操纵模块用来输入出租车的行驶状态:启动、行车、等待、停止;计程模块记录出租车行驶的路程;即便模块

4、记录出租车等待时刻;计费模块实现出租车费用的计算;显示模块将总费用、行驶路程、等待时刻在屏幕和数码管上显示。各个模块之间进行数据互换和处置,实现出租车自动计价器的功能。三. 详细设计 一、操纵模块 操纵模块要紧由逻辑电平操纵,将8255A口设置成输入方式,逻辑电平开关连接至8255A口,K1K7依次如下表示:K1:K1=1表示出租车停止,退出系统;K1=0表示出租车处于计费状态K2:K2=0表示单程,每千米 元;K2=1表示双程,每千米元K3、K4、K5:用于选择在数码管上显示何种数据,其中当K3=1时显示当前里程数;K3=0、K4=1时显示当前的等待时刻;K3=0,K4=0,K5=1时显示当

5、前费用的高两位;K3=0,K4=0,K5=0时显示当前费用的低两位;K7:K7=1表示出租车启动开始计价;K7=0为空车信号二、计程、计时模块当直流电机1S输出的脉冲数大于50时,出租车处于行车状态,现在里程变量distance=distance+脉冲数/100。 当直流电机1S输出的脉冲数小于50时,出租车处于等待状态,此时等待时间变量waitTime加一。 3、计费模块 当计程模块或计时模块完成计数后,挪用计费模块,计算出当前的总费用。计算公式如下:若是是单程状态,那么 元 distance3Km若是是双程状态,那么 元 distance3Km4、显示模块显示模块分为两部份,第一部份是屏幕

6、显示,在屏幕上显示里程数、等待时刻和总费用,最近5次费用等等,这部份通过DOS中断将相关数据显示即可;第二部份是通过数码管显示,由于数码管只有两个,因此能够通过机械开关K3、K4、K5选择显示当前里程数、等待时刻和总费用的高低位,数码管的位选由8255芯片的C口PC0和PC1操纵,数码管的段选由8255芯片的B口操纵。主程序流程图如下所示:开始从8255A口读入开关状态是否单双程选择开关PA2=1?3km以上的距按元/km收费3km以上的距离按元/km收费初始化程序数值更新显示程序数码管显示程序是PA1=1?否否退出程序1s定时信号PA0=1? 是系统启动调用显示程序否载客信号PA7=1?是计

7、价更新程序四. 方案实现与测试项目中利用到的芯片介绍如下:一、8253芯片:计数器0设置成方式3,计数器1设置成方式0,计数器0、1的计数初值均设置为1000,然后将两个计数器级联,计数器0输入1MHz的时钟信号,利用out1产生的1S的周期信号来产生1S的按时中断。计数器2设置成方式0,将直流电机的脉冲输入到CLK2,用来计数直流电机的脉冲数。8253连接方式如以下图所示:二、8255芯片:8255A口设置成输入,PA1-PA7接七位拨码开关用于输入开关状态,PA0接8253的OUT1,用来检测是不是有1s按时。8255B口设置成输出,用于操纵八位数码管的段选。8255C口设置为输出方式,用

8、于操纵八位数码管的位选。8255连接方式如下:出租车自动计价器系统具体实现时以模块为单位进行编程、测试,共分为5个模块:操纵模块、计程模块、计时模块、计费模块和显示模块。其中操纵模块的测试即将开关量输入至8255A口,然后在debug状态下查看PA口的值或将其以ASCII码字符的形式输出到屏幕上显示查验,并观看程序是不是依照操纵要求进行跳转。显示模块那么能够将屏幕显示的数值和数码管显示的数值进行对照,排除错误,其中屏幕显示程序和数码管动态显示程序能够别离独立进行调试;因为显示计程模块、计数模块和计费模块是直接的算数运算,因此能够直接通过屏幕显示或数码管显示的路程、等待时刻依据设定好的计算规那么

9、进行计算,验证三个模块的数据处置是不是正确。碰到的问题:1、调试时发觉不能在软件中点击run运行,必需先点开始调试,再按F5,后来发觉点击run也是能够直接运行的,可是相当慢,调试时一样都采纳后一种方式进行了。2、在实现数据的显示时一直只能显示16进制,显示和念书不方便,于是增加了二进制到BCD码再到十进制的转换。3、直流电机脉冲检测不到,可能跟实验箱有关系,改换实验箱后取得了解决。4、调速过快时状态改变不及时,计费显现错误,跟软件的延时有关,通过调整后取得了必然的好转,可是没能完全解决那个问题。五分析与总结 此课程设计验收时,我完成了5个大体要求和进一步设计要求(1)、(2)。运行程序,通过

10、机械开关操纵出租车的状态, LED灯L7显示行车状态: L7灭表示空车,L7亮表示车里有人且自动计价器在计价。能够通过调剂操纵直流电机的电位器来切换出租车的行驶状态。在屏幕上将动态显示出当前的路程、等待时刻和费用,数码管的显示数据那么能够通过开关来切换。通过量次查验和验证,本项目能正确地计算出租车行驶的费用,实现了出租车自动计价器的大体功能和部份扩展功能。 在这次课程设计中,先是进行了出租车自动计价器的系统设计,采纳化整为零的方式将其划分为5个子模块(操纵模块、计程模块、计时模块、计费模块和显示模块)来实现,参考了各类资料,当程序完成后,进行调试、排错。在此进程中,我碰到了一些困难,当碰到这些

11、问题时我一样是先用Debug进行断点、单步伐试,查找程序中的错误,假设并非程序问题,再进行硬件问题地排查。比如数码管显示错误一样是程序问题,直流电机脉冲检测不到可能确实是硬件问题了。在解决问题的进程中,我踊跃和同组同窗进行探讨、交流,相互学习,确保分工明确,显现错误明白问题在谁负责的部份,碰到不睬解的地址就一路查书查资料进行讨论,实在想不出来就去问教师。 我以为进行在课程设计中应注意一下几个方面:(1)面对一个项目应该认真分析项目中的各类要求,然后进行系统设计,再化整为零,将其分为几个模块,进行模块化设计,如此有利于程序的编写与调试。(2)能够采纳流程图的来理顺程序的运行进程,当画出流程图时,

12、程序的思路就加倍清楚明了,也方便测试的时候理清跳转的关系,有利于测试的进行。 (3)当程序运行有错时应学会用Debug进行单步、断点调试,观看寄放器的值,观看程序是不是依照咱们所假想的一步步运行,若是排除软件问题,那么再进行硬件问题的检查。(4)编程和测试需要耐心和细心。咱们的计费程序到最后仍是有一些缺点,速度改变过快的时候程序反映不灵敏,有一定的延时,才能判定出当前状态是等待仍是行车,在编写和测试的进程中,咱们改动了数次的模块仍是常常显现问题,有时候修改事后终归成效加倍不行了,这时就需要咱们的耐心,不能急躁。(5)应该踊跃和教师、同窗进行交流,在交流进程中将会收成颇丰。(6)程序中注意加注释

13、,如此便于他人明白得,也便于自己查错。(7)注意版本信息,在代码中的提示信息显示时要写上自己的学号(8)要有勇于质疑和认真试探的态度,设计要求中单程元/千米,双程元/千米,其实超级不符合实际,如此单程和双程岂不是总价一样了,固然咱们设计时并无多试探,仅仅是依照要求设置了参数,可是在验收时教师提出了那个问题,反映出来咱们还只是为了完成要求而做课程设计,并无对设计的题目进行认真的试探和研究。 微机实验课程到那个地址就接近尾声了,在这次课程设计中,除碰到上述技术问题,还有着很多麻烦,因为实验室的实验箱有一部份不大好,有时候咱们上一次已经实现了的功能,下次来换了一个实验箱就发觉又实现不了了。咱们的那个

14、项目的原理可能不是最难的,只是要连的线相对比较多,一旦测试不通过要换个箱子就要把线拆下来从头接线,实在费了很多功夫。总的说来,这次课程设计专门好地锻炼了咱们分析问题、解决问题的能力,让咱们把握了一样项目地设计流程,使咱们学会如何对一个新项目进行分析、设计和实现的。同时也让咱们对825五、8253等芯片有了更进一步地了解,将微型运算机系统原理及应用这门课程所学知识学以致用。参考书目:1东南大学微机系统与接口课程组,微机实验及课程设计教程(试用版),2020年2杨素行等,微型运算机原理与应用(第2版),北京,清华大学出版社,2004年附录:附上代码cursor macro row,clm ;*移动

15、光标位置到(row,clm)* io8255c第三口接LED灯用来表示行车等待 push ax push bx push dx mov ah,2 mov bh,0 mov dh,row mov dl,clm int 10h pop dx pop bx pop ax endm data segment ioport equ 0ec00h-0280h io8253a equ ioport+280h ;8253计数器0地址 io8253b equ ioport+281h ;8253计数器1地址 io8253c equ ioport+282h ;8253计数器2地址 io8253d equ iopor

16、t+283h ;8253控制寄存器地址 io8255a equ ioport+288h ;8255A口地址 io8255c equ ioport+28ah ;8255C口地址 io8255b equ ioport+289h ;8255B口地址 io8255d equ ioport+28bh ;8255控制寄存器地址 onekm equ 100 ;一公里对应的脉冲数 waitnum equ 50 ;参考脉冲数,小于此值即为等待 startp equ 80 ;起步价8元 price db 24 ;行车计费,元/公里 waitp equ 2 ;等待计费,元/分钟 str0 db ,0dh,0ah,$

17、; 0DH,0AH,$中0DH和0AH别离是回车和换行的ASCII码,$是DOS功能挪用INT 21H中9号功能要求的要显示字符串的终止标志。 str1 db * Taxi calculating fee machine *,0dh,0ah,$ str6 db *,0dh,0ah,$ str2 db * PRICE: yuan/km yuan/min *,0dh,0ah,$ str12 db * PRICE: yuan/km yuan/min *,0dh,0ah,$ str3 db TIME:0 (M) ,0dh,0ah,$ str4 db DIST:0 (KM) ,0dh,0ah,$ str

18、5 db COST:0 (YUAN) ,0dh,0ah,$ str7 db Five cost:,0dh,0ah,$ str11 db GET OFF THE TAXI end_time:00:00:00,0dh,0ah,$ str14 db start_time:00:00:00,0dh,0ah,$ pnum dw 0 ;总脉冲数 dist db 0 ;总里程 time db 0 ;等待时间 total dw 0000h ;总费用 flag db 11h xdk db 0 feeBuffer dw 0000h,0000h,0000h,0000h,0000h feeCount db 0led

19、db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码 buffer1 db 6,5h ;寄存要显示的个位和十位 bz dw ? ;位码 data endsstacks segment stack db 100 dup(?)stacks endscode segment assume cs:code, ds:data, ss:stacksmain procstart: mov ax,data mov ds,ax mov ax,stacks mov ss,axmov dx,io8255ain al,dxtest al,04hjz bbmov bl,55hmo

20、v flag,blmov bl,12 ;十进制的数字,表示来回双程能够设定为元/千米mov price,blbb: call ini ;调用初始化子程序call dispbegin1: mov di,offset buffer1 ;设di为显示缓冲区 call lll;mov dx,io8255ain al,dxtest al,02hjnz exit;test al,01h ;判断是否有1秒钟定时中断信号,1为start启动jz begin1call beginmov bx,totalmov al,blcall extendBcdmov word ptrbuffer1,axmov dx,io8

21、255ain al,dxtest al,00001000bjz showl1mov al,distcall extendBcdmov word ptrbuffer1,axjmp showl3showl1:mov dx,io8255a in al,dxtest al,00010000b jz showl2 mov al,time call extendBcd mov word ptrbuffer1,ax jmp showl3showl2: mov dx,io8255a in al,dxtest al,00100000b jz showl3 mov bx,total mov al,bh call

22、extendBcd mov word ptrbuffer1,axshowl3: mov dx,io8255ain al,dx and al,b ;判断是否有1秒钟定时中断信号 jz begin1 call gains mov bl,feeCount cmp bl,9 ja aboveCount jmp belowCountaboveCount:mov bl,0belowCount:mov ax,total mov bh,0 mov feeBufferbx,ax inc bl inc bl mov feeCount,bl jmp begin1exit:call off_texi cursor 1

23、1,0 mov ah,4ch ;退出程序 int 21h main endpextendBcd proc push bx push cx mov bl,al mov cl,4 shr al,cl mov ah,al and bl,00001111b mov al,bl pop cx pop bx retextendBcd endp lll proc push di push bx push ax push si mov bh,2ll: mov byte ptr bz,bh;数码管显示程序 push di dec di add di, bz mov bl,di ;bl为要显示的数 pop di

24、mov al,0 mov dx,io8255c ;消隐,全数关闭 out dx,al mov bh,0 mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码 mov al,byte ptr si mov dx,io8255b ;自8255B的口输出 out dx,al mov al,byte ptr bz ;使相应的数码管亮 or al,xdk ;和0进行或运算 mov dx,io8255c out dx,al mov cx,3000delay: loop delay ;延时 mov bh,byte ptr bz shr bh,1 jn

25、z ll pop si pop ax pop bx pop di retlll endpgains proc ;计价更新程序 push ax push bx push cx push dx mov ax,total and ax,ax jz return2 mov dx,io8253c ;读取脉冲数 in al,dx mov bl,al mov dx,io8253a ;计数器0重新计数 mov ax,1000 out dx,al mov al,ah out dx,al mov dx,io8253b mov ax,1000 ;计数器1重新计数out dx,al mov al,ah out dx,

26、al mov al,0 mov dx,io8253c ;计数器2重新计数 out dx,al mov al,0ffh ;计算脉冲数 sub al,bl inc al cmp al,waitnum ;脉冲数小于参考值则为等待状态,否则为行车状态 jb wgain mov ah,00000100b mov xdk,ah mov ah,0 add pnum,ax mov ax,pnum mov bl,100 div bl ;用脉冲数除以100确实是千米数 call num2bcds ;计算行驶里程数并转化为2位压缩BCD码 mov dist,al jmp newcostwgain:mov al,0

27、mov xdk,al mov dx,io8255c mov al,00100011b out dx,al mov al,time ;判断为等待状态,等待时间加1 call bcd2num inc al call num2bcds mov time,al jmp newcostreturn2:jmp returnnewcost:mov al,dist ;计算当前总金额 call bcd2num mov total,startp cmp al,3 jbe cost2 sub al,3 mov bl,price ;大于3千米的花费计算 mul bl add total,axcost2: mov al

28、,time ;加上停车费的计算 call bcd2nummov ah,0 mov bl,waitp mul bl add ax,total call num2bcdl mov total,ax call disp ;数值更新return: pop dx pop cx pop bx pop axretgains endp;*2位紧缩BCD码转换为十进制数*bcd2num proc push bx push cx mov bh,al mov cl,4 shr al,cl mov bl,10 mul bl and bh,00001111b add al,bh pop bx pop cx ret bcd2num endp comma proc push ax push dx mov ah,2 mov dl,. int 21h pop dx pop ax ret comma endp;*显示程序* show proc call show1 cmp dl,1

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2