《计算机硬件课程设计出租车计价器设计.doc》由会员分享,可在线阅读,更多相关《计算机硬件课程设计出租车计价器设计.doc(59页珍藏版)》请在三一办公上搜索。
1、计算机硬件技术基础课程设计报告出租车计价器设计(PC键盘)设计任务书一、设计题目设计一个计程车计价器,该系统能根据设定单价、设定车速和运行时间实时计算、显示出车费二、设计要求1、 以PC机标准键盘为基础,设计计价器的专用键盘功能,并实现。要求用最简单的硬件连接实现最方便的参数设置、模拟启动、模拟停车功能。2、 设计计价器的参数设置功能,包括单价的设定、车速的设定或车轮周长的设定,并实现。3、 设计计价器的实时车费显示功能,并实现。4、 各项的功能的设计应合理可行,人机交流方便,画面美观,声音悦耳。5、 计程车运行公里数的计算方法可采用:通过设置车轮周长与模拟测试计程车行进过程中车轮的转数得到公
2、里数。通过设置车速与已知运行时间得到公里数。目录一总体方案设计(附图).3二操作说明.5三硬件设计.6四程序流程图.71 .主流程图.72.重要模块流程.8五程序清单.12六设计感触. 37一总体方案设计(附图):修改并显示总价结束停止音乐停止停止继续暂停动画停止 播放音乐延时计算总价里程增加0.5KM计算里程动画改变移动速度加速度改变显示动画启动开始初始化启动音乐NNYYNNNYYYYNNY关键词:汇编语言,模块,动画显示,音乐播放,灵活输入采用模块化的程序设计思想.模块化的设计具有许多优点:其一,便于分块细化设计,其二,让整个主程序思路清晰,结构明了;其三,各个模块独立进行调试,当程序出现
3、错误时,以便于纠错。本方案共分为五个部分:初始化,启动,音乐播放,运行,结束。以下逐一进行详细阐述。初始化:主要由以下两个部分组成,最初数据的输入和屏幕的初始化。数据的输入即单价,起步价,车输的设定,在输入时可以输入小数,再经过计算处理后,显示的也可以是小数,这是本方案设计的特色之一;另一部分是屏幕的初始化,显示方式采用320*200图形显示,屏幕上显示的内容有:单价,起步价,车速,总价,里程以及公路和小车模型。启动:在设计本部分时,最初采用一般的中断,无法达到理想的效果,巧妙的运用读入键盘接口的信息进行数据的时时输入,完成对计价器的模拟。当读键盘接口有启动键(小键盘4) 时指引程序往下运行,
4、并修改车辆运行标志(),播放一段音乐,将总价显示为起步价的值。音乐播放:采用通用发声程序,编译音乐播放宏(music),建立好歌曲的音符音值表,通过宏调用实现音乐的播放。这里我们总共有三处音乐,分别是启动时,暂停时,结束时,当然,通过对音符音值表的修改,可以设定出自己想要的音乐,本程序都可以给你播放出来。运行:这是程序的核心,主要包括计价器数据(单价,起步价,车速,总价,里程)的时时显示,车速的更改,动画显示,也包括计时延迟跟随车速的修改(动画显示和数据的刷新和延迟正相关),运行控制的检测处理(暂停?暂停后的继续、停止?停止?),后面都将进行详略有别的说明 运行结束:小键盘6为结束键,按下后,
5、数据冻结,中线动画停止,运行标志显示为呈橙色,显示小车从右至左的动画,播放一段结束音乐,本次旅行就结束了。然后切换到提示再次启动(此时沿用前次输入参数)的界面。按4再次启动,按6退出程序二操作说明:开始后,程序提示输入信息,这需要你输入单价,起步价,车速,可以是不大于999.9的小数(当然,最好还是给出实际的价格吧,不合理的价格是用来检测程序的极限值的),最后以回车结束。届时屏幕初始化显示数据以及小车,公路的模型,这时你按下小键盘4,启动计价器运行,播放启动完音乐后,计价器正式工作,你将发现,公路中央的白线向右移动,表示小车正向左行驶,同时里程和总价有刷新。本程序有部分灵活性,由小键盘的7,1
6、键可增减速度(范围0300km/h),速度有变,与之相关联的动画及数据的刷新有连锁响应(经过合理的处理,数据计算的精准不受影响),给人一种真实的感受。一次搭乘完毕,还可以按提示继续服务,或者退出。这里有美中不足,没有采用中断,其直接后果是:键盘的检测总及处理总在每次延时之后,所以延时较长时,按键需停滞一会,等待程序响应呵)。乘客要求暂停可按小键盘5(按4可再次运行),结束可按6,你会发现相应的变化。三硬件设计: PC对键盘的管理采用了中断方式,来自键盘的中断信号接到了系统内部主8259A的IR1中断请求输入线,其中断类型号为09H, 计时功能可以用PC系统板上8254的通道0完成。系统板上82
7、54通道0是一个产生实时时钟信号的系统计时器,利用它可以完成日历时钟计数。该通道工作在方式3,输出周期性方波。其计数初值启动时由BIOS设置为0,输出信号OUT0连接到系统板上8259A的IR0。由于CLK0接入的脉冲信号频率为1.1931816MHz,则OUT0引脚上输出的方波脉冲序列的周期为Y=65536/1.1931816MHz55ms。即每经过55ms产生一次0级中断请求(中断类型号为08H)。系统设置INT 1CH的目的在于建立一个用户可用的定时操作服务程序入口。若用户没有编制新的INT 1CH中断服务程序,并修改1CH的中断向量地址,则调用了1CH中断后立即从INT 1CH中断返回
8、,因为系统原来的INT 1CH中断服务程序仅由一条中断返回指令IRET组成.G1 Y0G2A G2B Y1C BACS A1 PB1A0 D0D7 PB0 WRRD RESETCS GAT0A1 CLK0A0 OUT0D0D7 GAT1 WR CLK1RD OUT1 GAT2 CLK2OUT2与门IOWIORA4A3A5A6A8A9A7A2A1A0D0D7与非门驱动器扬声器825582541.1931816MHz74LS138IRQ18254端口地址:40H43H8254端口地址:60H63H8259A的地址为:20H21HIRQ0四程序流程图:1 .主流程图:Call Inputdata设定
9、起步价 单价 车速子程序Call Chushisc屏幕初始化Call Disdatas显示即时起步价 单价 车速 总价 里程信息Call Txtlined画纵列Call Dischars显示汉字及图形Call Disflag运行 暂停 停止标志显示Call Distexts显示数字及其它单列文本字符Call Txtliner画横线Call getstart车辆启动显示动画Call Varyspeed键盘输入增减速度Call Delay0延时(程序修改延时时间)Call Jizongjia 计算并显示总价Call Chulilicheng处理里程Call Checkkey 检测键盘输入命令开始初
10、始化启动运行动画结束好了,这里我们看到与总体方案设计中类似的主流程图,不过这里不侧重于总体的功能说明,而是具体的运行细节。从左边的一级结结初步展开二级结构,也是主程序对过程调用的大略说明。2.重要模块流程: 在程序清单中你将发现设计的宏,子程序较多,计4+33个,不可能一一作出流程加以详述,我们在这儿择要图列。Inc sisibl bl-30hbl10dxmul dxadd ax,bxaxstring2是09的数Si指最高位 0axbl是小数点sibl bl-30hbl10dxmul dxadd ax,bxInc si图2 daconver字符串转成数字宏 初始化:在数据输入时最多输入五位(整
11、数位,小数点,小数位),不适格会要求重输,合适的输入会及时加以处理,后台处理而矣,用户不需理睬。YN提示输入起步价信息输入起步价合法输入输入单价,车速并如上处理转化为字符串图1Chushida宏完成数据输入YNYN键盘输入增减速流程图:YNYNYNYNYN图3键盘输入增减速度是小键盘1车速减10车速为0吗车速为0减少后的车速存到chesu3检测键盘接口是小键盘7车速增加10车速为300吗车速给300增加后的车速存到chesu3将车速转化为字符串并显示由于避免对中断的应用,特设计键盘检测程序,在大循环中调用,当call delay0较长(是由车速大小决定的),你将感到按键变得不灵敏,因为程序还未
12、运行到这里,这个不太人性化的设计要求我们的用户按键多保持一会,多多见谅呵。计算并处理里程:NY Call shicha;计算时差,修改subtimecalljichesu车速折算存于chesu2车速为0吗licheng2= licheng2+shicha*jichesu将licheng2转化为字符并显示图4计算并处理里程里程在总的程序中的地位较为重要,除了显示有里程这一项,总价的计算也是以它不基础的,当这两个量的显示出错的时候,我们总要从里程计算这个模块开始检查。在程序纠错中,找到错误所在,然后才是查出错因。对于程序逻辑错误,找到错处不算太容易。计算并显示总价:YNYN图5计算并显示总价Zon
13、gjia转化为字符串并显示Licheng3大于10吗Licheng4大于Licheng3吗Licheng4+5 Licheng4Licheng410 axdanjia2*ax+qibujia2zongjiaqibujia zongjia总价最大值为999.9元(实际没多少人打的也要花1000大洋,只是程序完善的需要罢了)在此值附近将暂停,之后就算再按小键盘4启动也将再次进入暂停,唯有6键退出,结束本次行程.五程序清单:.486;*设置显示方式宏*setdistype macro typenum mov ah,00h mov al,typenum ;分辨率为320*200 int 10h end
14、m;*数据初始输入宏*;提示输入,接受输入,并判断数据是否适格,均为三位整数;strings指向提示信息;string指向输入变量(第三个单元开始才是实际输入的数据)chushida macro strings,string local lpcs,lpcs1,exitcs,exitcs2,exitcs3,ispoint,ispoint2,lpzheng,lpxiao,nexchshlpcs: lea dx,strings ;显示输入提示信息 mov ah,09h int 21h lea dx,buffervar;输入变量名 mov ah,0ah int 21h mov al,0 mov fla
15、gpoint,al;输入小数点标志置0 lea si,buffervar+2 mov cx,0lpcs1: mov al,si cmp al,0dh jz exitcs cmp al,. jz ispoint cmp al,0 jb lpcs cmp al,9 ja lpcs inc si inc cx jmp lpcs1 ispoint: mov bl,1 mov flagpoint,bl inc cx inc si mov al,si cmp al,0dh jz exitcs cmp al,. jz exitcs2 cmp al,0 jb exitcs2 cmp al,9 ja exitc
16、s2 inc cx jmp exitcsexitcs2: mov al,0 mov flagpoint,al dec cx ;jmp nexchshexitcs: ;cmp cx,1 ;jz exitcs3;nexchsh: mov al,flagpoint cmp al,1 jz ispoint2 lea si,buffervar+1 add si,cx lea di,string+2lpzheng: cmp cx,0 jz exitcs3 mov al,si mov di,al dec cx dec si dec di jmp lpzhengispoint2: lea si,bufferv
17、ar+1 add si,cx mov al,si cmp al,. jz exitcs3 lea di,string+4lpxiao: cmp cx,0 jz exitcs3 mov al,si mov di,al dec cx dec si dec di jmp lpxiaoexitcs3: endm;*字符串转成数字宏*;string1是字符串,string2为对应数值*10daconver macro string1,string2 local lpdac,nextdac,nextdac1,nextdac2 lea si,string1 mov ax,0 mov bx,0lpdac: m
18、ov bl,si cmp bl,. jz nextdac2 cmp bl,0 jb nextdac cmp bl,9 ja nextdac jmp nextdac1nextdac: inc si jmp lpdacnextdac1: sub bl,30h mov dx,10 mul dx add ax,bx inc si jmp lpdacnextdac2: inc si mov bl,si sub bl,30h mov dx,10 mul dx add ax,bx mov string2,ax endm;*音乐播放宏*music macro frequency,timetable local
19、 music1,leng,dl10ms,exitmu lea si,frequency lea bp,timetablemusic1:mov di,si cmp di,-1 je exitmu mov bx,ds:bp mov al,10110110b out 43h,al mov dx,12h mov ax,3280h div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,alleng: mov ecx,0ffffffhdl10ms: loopd dl10ms dec bx jnz leng mo
20、v al,ah out 61h,al add si,2 add bp,2 jmp music1 exitmu: endm DATAS SEGMENT;.暂存器time1 dw 0 ;计时器1的时分time2 dw 0 ;计时器1的秒百分之一秒time3 dw 0 ;计时器2的时分time4 dw 0 ;计时器2的秒百分之一秒subtime dd 0 ;两次计时时差暂存器x0 dw ? ;字符字模输出的起始横坐标y0 dw ? ;字符字模输出的起始列坐标color db ? ;字模的颜色flagdis db 0 ;动画显示标志,为1显中线1,为0显中线2distype db 0 ;显示方式号qi
21、bujias db 0ah,0dh,please input qibujiayuan:$,0ah,0dhdanjias db 0ah,0dh,please input danjiayuan/km:$,0ah,0dhchesus db 0ah,0dh,please input chesukm/h:$,0ah,0dhdemand db 0ah,0dh,press key 4 to try again,key 6 to exit:$,0ah,0dh ;输入提示语句buffervar db 6,?,6 dup(?),$qibujia db , ,0,.,0,$;起步价,单位:元qibujia2 dw
22、0 ;起步价(数值),单位:角danjia db , ,0,.,0,$;单价,单位:元danjia2 dw 0 ;单价(数值),单位:角chesu db , ,0,.,0,$;车速chesu2 db 0 ;将车速换到m/(1/100)s尺度chesu3 dw 0 ;车速(数值),单位:bm/hzongjia db , ,0,.,0,$;总价licheng db , ,0,.,0,$;里程licheng2 dd 0 ;保存里程的二进制值,单位m licheng3 dw 0 ;保存里程,0.1km为基本单位 licheng4 dw 10 ;初值10是起步里程,并作每次里程比较的暂存器flagpoi
23、nt db 0 ;输入小数点标志;.字模表charptr dw 30h,30h,03, 40h,30h,03, 50h,30h,03;起步价 dw 30h,40h,03, 40h,40h,03 ;单价 dw 30h,50h,03, 40h,50h,03 ;车速 dw 0b0h,30h,03, 0c0h,30h,03 ;总价 dw 0b0h,40h,03, 0c0h,40h,03 ;里程charptr2: dw 0b0h,09bh,03 ;小车车体 ;每三个数据一组,分别为待显示字模起始横纵坐标,颜色 dw 0ffffh ;显示结束标志 buffer1 dw 0eh,8,0fh,8, 7,9,8
24、,9,9,9,0ah,9,0bh,9,0ch,9,0dh,9,3,0ah,4,0ah dw 5,0ah,6,0ah, 2,0bh,0,0ch,1,0ch, 0,0dh,1,0dh, 1,0eh, 2,0fh dw 3,0fh,4,0fh,5,0fh,6,0fh,7,0fh,8,0fh,9,0fh,0ah,0fh,0bh,0fh dw 0ch,0fh,0dh,0fh,0eh,0fh,0fh,0fh ;一区 dw 1bh,2,1ch,2,1dh,2,1eh,2,1fh,2, 1bh,3,1fh,3, 13h,4,14h,4,15h dw 4,16h,4,17h,4,18h,4,19h,4,1ah,
25、4,1bh,4,1ch,4,1dh,4,1eh,4,1fh,4 dw 12h,5, 11h,6, 10h,7 ;二区 dw 15h,0ch,16h,0ch,17h,0ch, 14h,0dh, 18h,0dh, 13h,0eh,19h,0eh dw 10h,0fh,11h,0fh,12h,0fh,1ah,0fh,1bh,0fh,1ch,0fh,1dh,0fh,1eh,0fh dw 1fh,0fh, 16h,10h ;三区 dw 20h,4,21h,4,22h,4,23h,4,24h,4,25h,4,26h,4,27h,4,28h,4,29h,4,2ah dw 4,2bh,4,2ch,4,2dh,
26、4,2eh,4,2fh,4 ;四区 dw 2ah,0ch,2bh,0ch,2ch,0ch, 29h,0dh,2dh,0dh, 28h,0eh,2eh,0eh dw 20h,0fh,21h,0fh,22h,0fh,23h,0fh,24h,0fh,25h,0fh,26h,0fh,27h dw 0fh,2fh,0fh, 2bh,10h ;五区 dw 30h,4, 31h,5,32h,5, 33h,6,34h,6, 35h,7,36h,7 ;六区 dw 37h,8,38h,8,39h,8,3ah,8, 3bh,9, 3ch,0ah, 3ch,0bh, 3dh,0ch dw 3dh,0dh,3eh,0d
27、h,3fh,0dh,3dh,0eh,3eh,0eh,3fh,0eh, 30h,0fh,31h,0fh dw 32h,0fh,33h,0fh,34h,0fh,35h,0fh,36h,0fh,37h,0fh,38h,0fh,39h,0fh dw 3ah,0fh,3bh,0fh,3ch,0fh,3dh,0fh ;七区 dw 0ffh,0ffh ;小车车体的字模 buffer2 dw 5,2,5,3,5,4,5,5,3,6,4,6,5,6,6,6,10,6,11,6,5,7,11,7,5,8,11,8,2,9 dw 3,9,4,9,5,9,6,9,7,9,9,9,10,9,5,10,9,10,12,1
28、0,3,11,5,11,6,11,7 dw 11,9,11,10,11,11,11,3,12,4,12,5,12,3,13,6,13,7,13,14,13,2,14,8 dw 14,9,14,10,14,11,14,12,14,13,14 ;起 dw 0ffh,0ffh buffer3 dw 8,2,8,3,8,4,5,5,8,5,9,5,10,5,11,5,5,6,8,6,5,7,8,7,11,7,12,7,13 dw 7,5,8,7,8,8,8,9,8,10,8,4,9,5,9,6,9,8,9,11,9,2,10,3,10,6,10,8 dw 10,11,10,5,11,8,11,10,1
29、1,9,12,8,13,7,14,6,15 dw 0ffh,0ffh ;步buffer4 dw 9,2,5,3,9,3,5,4,9,4,4,5,8,5,3,6,7,6,9,6,10,6,2,7,4,7,6,7,7,7 dw 10,7,11,7,12,7,4,8,5,8,7,8,10,8,13,8,4,9,7,9,10,9,4,10,7,10,10 dw 10,4,11,7,11,10,11,4,12,6,12,10,12,4,13,10,13 dw 10,14,10,15 ;价的字模,以0ffh结束 dw 0ffh,0ffh buffer5 dw 11,1,5,2,11,2,6,3,10,3,
30、7,4,9,4,5,5,6,5,7,5,8,5,9,5,10,5,11,5,5 dw 6,8,6,11,6,5,7,7,7,8,7,9,7,11,7,5,8,8,8,11,8,6,9,7,9,8,9,9,9 dw 10,9,8,10,7,11,8,11,9,11,10,11,3,12,4,12,5,12,6,12,8,12,11,12 dw 12,12,13,12,14,12,8,13,8,15,8,14 dw 0ffh,0ffh ;单 buffer6 dw 8,1,8,2,8,3,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,7,5,6,6,8,6,5,7,8 dw 7
31、,5,8,6,8,7,8,8,8,9,8,10,8,8,9,8,10,10,10,11,10,12,10,13,10,5 dw 11,6,11,7,11,8,11,9,11,3,12,4,12,8,12,8,13,8,14,8,15 dw 0ffh,0ffh ;车 buffer7 dw 9,2,9,3,3,4,7,4,8,4,9,4,10,4,11,4,4,5,9,5,4,6,7,6,8,6,9,6,10,6 dw 11,6,4,7,6,7,9,7,12,7,4,8,7,8,8,8,9,8,10,8,11,8,4,9,8,9,9,9 dw 11,9,4,10,7,10,9,10,11,10,4
32、,11,7,11,9,11,11,11,3,12,4,12,5,12 dw 6,12,7,13,8,13,9,13,10,13,11,14,12,14,13,14,14,14 dw 0ffh,0ffh ;速buffer8 dw 10,2,4,3,10,3,5,4,9,4,6,5,8,5,5,6,6,6,7,6,8,6,9,6,10,6,5,7,10 dw 7,5,8,9,8,6,9,7,9,8,9,11,10,12,10,2,11,4,11,7,11,8,11,9,11,13 dw 11,2,12,5,12,6,13,12,13,7,14,8,14,9,14,10,14,11,14,12,14
33、,13,14 dw 0ffh,0ffh ;总buffer9 dw 5,3,6,3,7,3,8,3,9,3,10,3,11,3,4,4,8,4,12,4,4,5,8,5,12,5,4,6,6 dw 6,7,6,8,6,9,6,10,6,12,6,4,7,8,7,12,7,5,8,6,8,7,8,8,8,9,8,10,8 dw 11,8,8,9,8,10,6,11,7,11,8,11,9,11,10,11,8,12,8 dw 13,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14 dw 0ffh,0ffh ;里 buffer10
34、dw 6,1,6,2,5,3,4,4,9,4,10,4,11,4,12,4,13,4,2,5,3,5,5,5,9,5,13,5,5 dw 6,9,6,13,6,2,7,3,7,4,7,5,7,6,7,7,7,9,7,10,7,11,7,12,7,4,8,5,8 dw 3,9,5,9,6,9,9,9,10,9,11,9,12,9,13,9,2,10,5,10,7,10,11,10,2,11 dw 5,11,11,11,5,12,10,12,11,12,12,12,5,13,11,13,5,14,8,14,9,14,10 dw 14,11,14,12,14,13,14,14,14,5,15 dw
35、0ffh,0ffh ;程;.文本字符表buffertxt1 db 5,5,218, 5,34,170, 12,5,192,12,34,217 ;边框四角 db 7,12,58,9,12,58,11,12,58, 7,26,58,9,26,58 ;: db 7,18,157, 9,18,157,9,19,47,9,20,107,9,21,109;¥,¥/km db 11,18,107,11,19,109,11,20,47,11,21,104 ;km/h db 7,32,157, 9,32,107,9,33,109 ;¥/km db 0ffh,0ffh ;0ffh为文本结束标志bufferflag db 11,28,17,1,11,30,14,1, 11,32,254,2 ;运行,暂停,停止() ;依次为行值,列值,字符值,颜色 db 0ffh,0ffh ;0ffh为文本结束标志 liner db 196,89h,5,6,34, 196,89h,12,6,34, 196,8ah,19,0,40, 196,8ah,22,0,40 ;依次为字符值,颜色,行值,起始与终止列值 db 0ffh,0ffh ;0ffh为结束标志linel db 179,89h,5,6