计算机硬件技术基础课程设计报告《出租车计价器设计PC键盘》.docx
《计算机硬件技术基础课程设计报告《出租车计价器设计PC键盘》.docx》由会员分享,可在线阅读,更多相关《计算机硬件技术基础课程设计报告《出租车计价器设计PC键盘》.docx(67页珍藏版)》请在冰豆网上搜索。
计算机硬件技术基础课程设计报告《出租车计价器设计PC键盘》
计算机硬件技术基础课程设计报告
—出租车计价器设计(PC键盘)
设计任务书
一、设计题目
设计一个计程车计价器,该系统能根据设定单价、设定车速和运行时间实时计算、显示出车费
二、设计要求
1、以PC机标准键盘为基础,设计计价器的专用键盘功能,并实现。
要求用最简单的硬件连接实现最方便的参数设置、模拟启动、模拟停车功能。
2、设计计价器的参数设置功能,包括单价的设定、车速的设定或车轮周长的设定,并实现。
3、设计计价器的实时车费显示功能,并实现。
4、各项的功能的设计应合理可行,人机交流方便,画面美观,声音悦耳。
5、计程车运行公里数的计算方法可采用:
⑴通过设置车轮周长与模拟测试计程车行进过程中车轮的转数得到公里数。
⑵通过设置车速与已知运行时间得到公里数。
一.总体方案设计(附图)………………………….……....3
二.操作说明…………………………………………….…....5
三.硬件设计………………………………………...………..6
四.程序流程图………………………………………..……...7
1.主流程图…………………………………………...…..7
2.重要模块流程…………………………………………..8
五.程序清单………………………………………………...12
六.设计感触………………………………..………………37
一.总体方案设计(附图):
关键词:
汇编语言,模块,动画显示,音乐播放,灵活输入
采用模块化的程序设计思想.模块化的设计具有许多优点:
其一,便于分块细化设计,其二,让整个主程序思路清晰,结构明了;其三,各个模块独立进行调试,当程序出现错误时,以便于纠错。
本方案共分为五个部分:
初始化,启动,音乐播放,运行,结束。
以下逐一进行详细阐述。
初始化:
主要由以下两个部分组成,最初数据的输入和屏幕的初始化。
数据的输入即单价,起步价,车输的设定,在输入时可以输入小数,再经过计算处理后,显示的也可以是小数,这是本方案设计的特色之一;另一部分是屏幕的初始化,显示方式采用320*200图形显示,屏幕上显示的内容有:
单价,起步价,车速,总价,里程以及公路和小车模型。
启动:
在设计本部分时,最初采用一般的中断,无法达到理想的效果,巧妙的运用读入键盘接口的信息进行数据的时时输入,完成对计价器的模拟。
当读键盘接口有启动键(小键盘4)时指引程序往下运行,并修改车辆运行标志(▲),播放一段音乐,将总价显示为起步价的值。
音乐播放:
采用通用发声程序,编译音乐播放宏(music),建立好歌曲的音符音值表,通过宏调用实现音乐的播放。
这里我们总共有三处音乐,分别是启动时,暂停时,结束时,当然,通过对音符音值表的修改,可以设定出自己想要的音乐,本程序都可以给你播放出来。
运行:
这是程序的核心,主要包括计价器数据(单价,起步价,车速,总价,里程)的时时显示,车速的更改,动画显示,也包括计时延迟跟随车速的修改(动画显示和数据的刷新和延迟正相关),运行控制的检测处理(暂停?
暂停后的继续、停止?
停止?
),后面都将进行详略有别的说明
运行结束:
小键盘6为结束键,按下后,数据冻结,中线动画停止,运行标志显示为Π呈橙色,显示小车从右至左的动画,播放一段结束音乐,本次旅行就结束了。
然后切换到提示再次启动(此时沿用前次输入参数)的界面。
按4再次启动,按6退出程序
二.操作说明:
开始后,程序提示输入信息,这需要你输入单价,起步价,车速,可以是不大于999.9的小数(当然,最好还是给出实际的价格吧,不合理的价格是用来检测程序的极限值的),最后以回车结束。
届时屏幕初始化显示数据以及小车,公路的模型,这时你按下小键盘4,启动计价器运行,播放启动完音乐后,计价器正式工作,你将发现,公路中央的白线向右移动,表示小车正向左行驶,同时里程和总价有刷新。
本程序有部分灵活性,由小键盘的7,1键可增减速度(范围0~300km/h),速度有变,与之相关联的动画及数据的刷新有连锁响应(经过合理的处理,数据计算的精准不受影响),给人一种真实的感受。
一次搭乘完毕,还可以按提示继续服务,或者退出。
这里有美中不足,没有采用中断,其直接后果是:
键盘的检测总及处理总在每次延时之后,所以延时较长时,按键需停滞一会,等待程序响应呵)。
乘客要求暂停可按小键盘5(按4可再次运行),结束可按6,你会发现相应的变化。
三.硬件设计:
PC对键盘的管理采用了中断方式,来自键盘的中断信号接到了系统内部主8259A的IR1中断请求输入线,其中断类型号为09H,
计时功能可以用PC系统板上8254的通道0完成。
系统板上8254通道0是一个产生实时时钟信号的系统计时器,利用它可以完成日历时钟计数。
该通道工作在方式3,输出周期性方波。
其计数初值启动时由BIOS设置为0,输出信号OUT0连接到系统板上8259A的IR0。
由于CLK0接入的脉冲信号频率为1.1931816MHz,则OUT0引脚上输出的方波脉冲序列的周期为Y=65536/1.1931816MHz≈55ms。
即每经过55ms产生一次0级中断请求(中断类型号为08H)。
系统设置INT1CH的目的在于建立一个用户可用的定时操作服务程序入口。
若用户没有编制新的INT1CH中断服务程序,并修改1CH的中断向量地址,则调用了1CH中断后立即从INT1CH中断返回,因为系统原来的INT1CH中断服务程序仅由一条中断返回指令IRET组成..
四.程序流程图:
1.主流程图:
好了,这里我们看到与总体方案设计中类似的主流程图,不过这里不侧重于总体的功能说明,而是具体的运行细节。
从左边的一级结结初步展开二级结构,也是主程序对过程调用的大略说明。
2.重要模块流程:
在程序清单中你将发现设计的宏,子程序较多,计4+33个,不可能一一作出流程加以详述,我们在这儿择要图列。
初始化:
在数据输入时最多输入五位(整数位,小数点,小数位),不适格会要求重输,合适的输入会及时加以处理,后台处理而矣,用户不需理睬。
键盘输入增减速流程图:
由于避免对中断的应用,特设计键盘检测程序,在大循环中调用,当calldelay0较长(是由车速大小决定的),你将感到按键变得不灵敏,因为程序还未运行到这里,这个不太人性化的设计要求我们的用户按键多保持一会,多多见谅呵。
计算并处理里程:
里程在总的程序中的地位较为重要,除了显示有里程这一项,总价的计算也是以它不基础的,当这两个量的显示出错的时候,我们总要从里程计算这个模块开始检查。
在程序纠错中,找到错误所在,然后才是查出错因。
对于程序逻辑错误,找到错处不算太容易。
计算并显示总价:
总价最大值为999.9元(实际没多少人打的也要花1000大洋,只是程序完善的需要罢了)在此值附近将暂停,之后就算再按小键盘4启动也将再次进入暂停,唯有6键退出,结束本次行程.
五.程序清单:
.486
;*****设置显示方式宏****
setdistypemacrotypenum
movah,00h
moval,typenum;分辨率为320*200
int10h
endm
;*****数据初始输入宏****
;提示输入,接受输入,并判断数据是否适格,均为三位整数
;strings指向提示信息
;string指向输入变量(第三个单元开始才是实际输入的数据)
chushidamacrostrings,string
locallpcs,lpcs1,exitcs,exitcs2,exitcs3,ispoint,ispoint2,lpzheng,lpxiao,nexchsh
lpcs:
leadx,strings;显示输入提示信息
movah,09h
int21h
leadx,buffervar;输入变量名
movah,0ah
int21h
moval,0
movflagpoint,al;输入小数点标志置0
leasi,buffervar+2
movcx,0
lpcs1:
moval,[si]
cmpal,0dh
jzexitcs
cmpal,'.'
jzispoint
cmpal,'0'
jblpcs
cmpal,'9'
jalpcs
incsi
inccx
jmplpcs1
ispoint:
movbl,1
movflagpoint,bl
inccx
incsi
moval,[si]
cmpal,0dh
jzexitcs
cmpal,'.'
jzexitcs2
cmpal,'0'
jbexitcs2
cmpal,'9'
jaexitcs2
inccx
jmpexitcs
exitcs2:
moval,0
movflagpoint,al
deccx
;jmpnexchsh
exitcs:
;cmpcx,1
;jzexitcs3
;nexchsh:
moval,flagpoint
cmpal,1
jzispoint2
leasi,buffervar+1
addsi,cx
leadi,string+2
lpzheng:
cmpcx,0
jzexitcs3
moval,[si]
mov[di],al
deccx
decsi
decdi
jmplpzheng
ispoint2:
leasi,buffervar+1
addsi,cx
moval,[si]
cmpal,'.'
jzexitcs3
leadi,string+4
lpxiao:
cmpcx,0
jzexitcs3
moval,[si]
mov[di],al
deccx
decsi
decdi
jmplpxiao
exitcs3:
endm
;*****字符串转成数字宏****
;string1是字符串,string2为对应数值*10
daconvermacrostring1,string2
locallpdac,nextdac,nextdac1,nextdac2
leasi,string1
movax,0
movbx,0
lpdac:
movbl,[si]
cmpbl,'.'
jznextdac2
cmpbl,'0'
jbnextdac
cmpbl,'9'
janextdac
jmpnextdac1
nextdac:
incsi
jmplpdac
nextdac1:
subbl,30h
movdx,10
muldx
addax,bx
incsi
jmplpdac
nextdac2:
incsi
movbl,[si]
subbl,30h
movdx,10
muldx
addax,bx
movstring2,ax
endm
;*****音乐播放宏****
musicmacrofrequency,timetable
localmusic1,leng,dl10ms,exitmu
leasi,frequency
leabp,timetable
music1:
movdi,[si]
cmpdi,-1
jeexitmu
movbx,ds:
[bp]
moval,10110110b
out43h,al
movdx,12h
movax,3280h
divdi
out42h,al
moval,ah
out42h,al
inal,61h
movah,al
oral,3
out61h,al
leng:
movecx,0ffffffh
dl10ms:
loopddl10ms
decbx
jnzleng
moval,ah
out61h,al
addsi,2
addbp,2
jmpmusic1
exitmu:
endm
DATASSEGMENT
;....................................暂存器
time1dw0;计时器1的时分
time2dw0;计时器1的秒百分之一秒
time3dw0;计时器2的时分
time4dw0;计时器2的秒百分之一秒
subtimedd0;两次计时时差暂存器
x0dw?
;字符字模输出的起始横坐标
y0dw?
;字符字模输出的起始列坐标
colordb?
;字模的颜色
flagdisdb0;动画显示标志,为1显中线1,为0显中线2
distypedb0;显示方式号
qibujiasdb0ah,0dh,'pleaseinputqibujia[yuan]:
$',0ah,0dh
danjiasdb0ah,0dh,'pleaseinputdanjia[yuan/km]:
$',0ah,0dh
chesusdb0ah,0dh,'pleaseinputchesu[km/h]:
$',0ah,0dh
demanddb0ah,0dh,'presskey4totryagain,key6toexit:
$',0ah,0dh
;输入提示语句
buffervardb6,?
6dup(?
),'$'
qibujiadb'','','0','.','0','$';起步价,单位:
元
qibujia2dw0;起步价(数值),单位:
角
danjiadb'','','0','.','0','$';单价,单位:
元
danjia2dw0;单价(数值),单位:
角
chesudb'','','0','.','0','$';车速
chesu2db0;将车速换到[m/(1/100)s]尺度
chesu3dw0;车速(数值),单位:
bm/h
zongjiadb'','','0','.','0','$';总价
lichengdb'','','0','.','0','$';里程
licheng2dd0;保存里程的二进制值,单位m
licheng3dw0;保存里程,0.1km为基本单位
licheng4dw10;初值10是起步里程,并作每次里程比较的暂存器
flagpointdb0;输入小数点标志
;....................................字模表
charptrdw30h,30h,03,40h,30h,03,50h,30h,03;'起步价'
dw30h,40h,03,40h,40h,03;'单价'
dw30h,50h,03,40h,50h,03;'车速'
dw0b0h,30h,03,0c0h,30h,03;'总价'
dw0b0h,40h,03,0c0h,40h,03;'里程'
charptr2:
dw0b0h,09bh,03;小车车体
;每三个数据一组,分别为待显示字模起始横纵坐标,颜色
dw0ffffh;显示结束标志
buffer1dw0eh,8,0fh,8,7,9,8,9,9,9,0ah,9,0bh,9,0ch,9,0dh,9,3,0ah,4,0ah
dw5,0ah,6,0ah,2,0bh,0,0ch,1,0ch,0,0dh,1,0dh,1,0eh,2,0fh
dw3,0fh,4,0fh,5,0fh,6,0fh,7,0fh,8,0fh,9,0fh,0ah,0fh,0bh,0fh
dw0ch,0fh,0dh,0fh,0eh,0fh,0fh,0fh;一区
dw1bh,2,1ch,2,1dh,2,1eh,2,1fh,2,1bh,3,1fh,3,13h,4,14h,4,15h
dw4,16h,4,17h,4,18h,4,19h,4,1ah,4,1bh,4,1ch,4,1dh,4,1eh,4,1fh,4
dw12h,5,11h,6,10h,7;二区
dw15h,0ch,16h,0ch,17h,0ch,14h,0dh,18h,0dh,13h,0eh,19h,0eh
dw10h,0fh,11h,0fh,12h,0fh,1ah,0fh,1bh,0fh,1ch,0fh,1dh,0fh,1eh,0fh
dw1fh,0fh,16h,10h;三区
dw20h,4,21h,4,22h,4,23h,4,24h,4,25h,4,26h,4,27h,4,28h,4,29h,4,2ah
dw4,2bh,4,2ch,4,2dh,4,2eh,4,2fh,4;四区
dw2ah,0ch,2bh,0ch,2ch,0ch,29h,0dh,2dh,0dh,28h,0eh,2eh,0eh
dw20h,0fh,21h,0fh,22h,0fh,23h,0fh,24h,0fh,25h,0fh,26h,0fh,27h
dw0fh,2fh,0fh,2bh,10h;五区
dw30h,4,31h,5,32h,5,33h,6,34h,6,35h,7,36h,7;六区
dw37h,8,38h,8,39h,8,3ah,8,3bh,9,3ch,0ah,3ch,0bh,3dh,0ch
dw3dh,0dh,3eh,0dh,3fh,0dh,3dh,0eh,3eh,0eh,3fh,0eh,30h,0fh,31h,0fh
dw32h,0fh,33h,0fh,34h,0fh,35h,0fh,36h,0fh,37h,0fh,38h,0fh,39h,0fh
dw3ah,0fh,3bh,0fh,3ch,0fh,3dh,0fh;七区
dw0ffh,0ffh;小车车体的字模
buffer2dw5,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
dw3,9,4,9,5,9,6,9,7,9,9,9,10,9,5,10,9,10,12,10,3,11,5,11,6,11,7
dw11,9,11,10,11,11,11,3,12,4,12,5,12,3,13,6,13,7,13,14,13,2,14,8
dw14,9,14,10,14,11,14,12,14,13,14;起
dw0ffh,0ffh
buffer3dw8,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
dw7,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
dw10,11,10,5,11,8,11,10,11,9,12,8,13,7,14,6,15
dw0ffh,0ffh;步
buffer4dw9,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
dw10,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
dw10,4,11,7,11,10,11,4,12,6,12,10,12,4,13,10,13
dw10,14,10,15;'价'的字模,以0ffh结束
dw0ffh,0ffh
buffer5dw11,1,5,2,11,2,6,3,10,3,7,4,9,4,5,5,6,5,7,5,8,5,9,5,10,5,11,5,5
dw6,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
dw10,9,8,10,7,11,8,11,9,11,10,11,3,12,4,12,5,12,6,12,8,12,11,12
dw12,12,13,12,14,12,8,13,8,15,8,14
dw0ffh,0ffh;单
buffer6dw8,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
dw7,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
dw11,6,11,7,11,8,11,9,11,3,12,4,12,8,12,8,13,8,14,8,15
dw0ffh,0ffh;车
buffer7dw9,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
dw11,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
dw11,9,4,10,7,10,9,10,11,10,4,11,7,11,9,11,11,11,3,12,4,12,5,12
dw6,12,7,13,8,13,9,13,10,13,11,14,12,14,13,14,14,14
dw0ffh,0ffh;速
buffer8dw10,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
dw7,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
dw11,2,12,5,12,6,13,12,13,7,14,8,14,9,14,10,14,11,14,12,14,13,14
dw0ffh,0ffh;总
buffer9dw5,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
dw6,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
dw11,8,8,9,8,10,6,11,7,11,8,11,9,11,10,11,8,12,8
dw13,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14
dw0ffh,0ffh;里
buffer10dw6,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
dw6,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
dw3,9,5,9,6,9,9,9,10,9,11,9,12