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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

出租车计价器 硬件课程设计.docx

1、出租车计价器 硬件课程设计硬件课程设计报告 题目:出租车计价器目录1 引言 41.1设计目的 41.2设计任务 41.3设计思路 42. 需求分析 42.1芯片原理 42.1.1可编程计数器/定时器8253/8254原理 52.1.2可编程外围接口芯片8255原理 52.1.3 12864液晶显示器ST7920原理 52.2硬件设计 52.3软件设计 52.3.1功能模块图 52.3.2程序流程图 52.3.3模块流程图 53. 详细设计 53.1程序模块分析 83.1.1初始化模块程序分析 83.1.2判断开关程序模块分析 83.1.3圈数统计模块程序分析 83.1.4计算里程模块程序分析

2、83.1.5显示模块程序分析 83.1.6结束模块程序分析 83.2程序代码 84. 程序结果 95. 分析与测试 96. 体会 9附录A:参考文献 10一、引言1.1设计目的现在各大城市出租车已经成为了一种重要的交通工具,当然出租车的收费问题也成了人们关注的焦点,那么怎么样才能实现一种合理的收费方式让大家都认可呢?在这种要求下,出租车自动计价器就走进了人们的生活,当然这就要求有一种合理公正的计价器收费方式。这不仅关系到出租车计价器的市场,也影响这出租车的市场,这就要求我们设计出更好的计价器来满足人们的需求。本设计是关于出租车计价器的设计。在本次设计中,我以计价器的基本功能作为设计的重点。为了

3、完成上述设计,我们采用了8254、8255等芯片,用计算机汇编语言进行软件功能的实现。1.2设计任务1. 实现一个出租车计价器,可以显示起步价。2. 一个键来控制是否到达终点,是否计价要清零。3. 基于路程的出租车计价方式。1.3设计思路利用直流电机来模仿出租车轮子的转动来计算出租车行进的路程。将直流电机的直流端与滑动变阻器相连,通过人工控制滑动变阻器来模拟出租车的行进;并将计数端与8253CLK0端相连,GATE0接高电平,工作方式为方式二。直流电机每转1000圈,8253输出一个高电平,假设出租车已经走了1公里。同时将8253OUT0接入8255方便CPU读取。再将8255与ST7920显

4、示器相连,CPU通过控制8255来控制显示,一旦8255从8253读入一个高电平,则公里数加一,同时价格相应增加。另有一个开关连入8255,用以判断出租车计价器是否启动。二、需求分析2.1芯片原理本节主要在介绍本次设计所用到的芯片的原理,共有可编程计数器/定时器8253/8254、可编程外围接口芯片8255和12864液晶显示器ST7920原理三种芯片。2.1.1可编程计数器/定时器8253/8254原理图2-1 8254内部结构图从图2-1可见,8254内部包含数据总线缓冲器、读/写控制逻辑、控制字寄存器和3个结构完全相同的计数器,这3个计数器分别称为计数器0、计数器1和计数器2。图2-2

5、8254管脚图A1、A0:地址输入线,用来控制8253内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。CLK0-2:时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。GATE0-2:门控输入端,用于外部控制计数器的启动计数和停止计数的操作。两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。OUT0-2:计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。8

6、253的方式控制字图2-3 8254控制字图本设计中8254的功能只是用通道1,采用方式三。采用二进制计数,输入0FFFH。先输入低字节,再输入高字节。当8254从0FFFFH递减到159FH时(即转了60000圈时),8254向总线发信号使程序向下进行。2.1.2可编程外围接口芯片8255原理内部结构如图所示,由以下4个部分组成:图2-4 8255内部结构图(1)输入/输出端口A、B、C 。这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。A口和B口是一个独立的8位I/O口。C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。(2)A组和B组控制电路。这是

7、两组根据CPU命令控制8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位(3)读/写控制逻辑。(同上:它负责管理8255A的数据传输过程。它接收CS*及RD*、WR*、RESET,还有来自系统地址总线的口地址选择信号A0和A1。将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。)(4)数据总缓冲器。(同上:它是8位的双向的三态

8、缓冲器。作为8255A与系统总线连接的界面,输入/输出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。)如图所示8255A的芯片引脚信号。除了电源和地以外,其他信号可以分为两组:图2-5 8255管脚图1.和外设一边相连的:PA7-PA0:A组数据信号PB7-PB0:B组数据信号PC7-PC0:C组数据信号2.和CPU一边相连的:RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器就被清除,同时,3个数据端口被自动设为输入端口。D7-D0:它们是8255A的数据线,和系统数据总线相连。CS*:芯片选择信号,低电平有效。在一个系统中,一

9、般根据全部接口芯片来分配若干较低位地址(比如A5、A4、A3)来组成各种芯片选择码,当这几位地址组成某一个代码时,译码器便往8255A的CS*端输出一个低电平,于是8255A被选中。只有当 CS*有效时,读信号RD*和写信号WR*才对8255A有效。RD*:芯片读出信号低电平有效。WR*:芯片写入信号低电平有效。8255的方式控制字格式图2-6 8255控制字图本设计中8255的功能 8255PA0-PA7和PC0-PC2与ST7920相连,控制输出。PB0与8253的OUT1相连,读入8253OUT1 的数据。PB1与开关K0相连,读入K0的数值用于确定是否开启计价器。2.1.3可编程外围接

10、口芯片8255原理ST7920控制器系列中文图形液晶模块的软件特性主要由ST7920控制驱动器决定。ST7920同时作为控制器和驱动器,它可提供33路com输出和64路seg输出。在驱动器ST7921的配合下,最多可以驱动25632点阵液晶。ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置12864汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。该芯片共内置8192个中文汉字(1616点阵)、128个字符的ASCII字符库(816点阵)及64256点阵显示RAM(GDRAM)。为了能够简单、有效地显示汉字和图形,该模块内部设计有2MB的中文字型CGROM和64256点阵的

11、GDRAM绘图区域;同时,该模块还提供有组可编程控制的1616点阵造字空间;除此之外,为了适应多种微处理器和单片机接口的需要,该模块还提供了4位并行、8位并行、2线串行以及3线串行等多种接口方式。利用上述功能可方便地实现汉字、ASCII码、点阵图形、自造字体的同屏显示,所有这些功能(包括显示RAM、字符产生器以及液晶驱动电路和控制器)都包含在集成电路芯片里,因此,只要一个最基本的微处理系统就可以通过ST7920芯片来控制其它的芯片图2-7 ST7920外观尺寸图本设计中ST7920的功能用于显示出租车行驶路程与应收费用。2.2硬件设计其中,8253GATE1连+5V高电平,直流电机连0+5V,

12、8253连280h287h,8255连288h28fh。8255PA0-PA7连ST7920显示器D0-D7,PC0连DI,PC1连RW,PC2连E。开关K0连8255PB0。8253CLK1连直流电机计数端。图2-8硬件连接图实际连接图如下图所示图2-9硬件实际连接图2.3软件设计2.3.1功能模块图本节先给出一个程序的功能模块图。图2-10软件功能模块图2.3.2程序流程图本节先给出一个程序的整体流程图。图2-11软件程序流程图2.3.3模块流程图如果对整个程序进行细分则可以分为初始化模块,判断开关模块,圈数统计模块,计算里程模块、结束模块和显示模块。其中初始化模块是8253芯片、8255

13、芯片和显示屏的初始化。判断开关模块是对8255的b0端是否有高电平进行判断。圈数统计模块是对直流电机传入8253中高电平的数量进行圈数统计。计算里程模块是对里程及价格进行计算的模块。结束模块是程序结束的操作与方法。显示模块是控制显示屏显示计算模块的结果。图2-12软件模块流程图三、详细设计3.1程序模块分析我们将按模块分析程序的功能并给出模块内的功能流程图。3.1.1初始化模块分析在初始化模块中,我们定义了需要使用的8255和8254的接口,需要使用的变量如JSS,要输出的字符串等,初始化了DS,完成了8255的初始化以及显示屏的初始化。其流程图为图3-1初始化模块流程图3.1.2判断开关模块

14、分析以上为判断开关模块,在判断开关模块中,系统读入8255PB0的电平,如果是高电平则程序继续进行,如果是低电平则程序调用chushi函数,用屏幕显示“空车欢迎乘坐”,并继续度8255PB0直到有高电平为止。其流程图如下所示:图3-2判断开关模块流程图3.1.3圈数统计模块分析在圈数统计模块中,我们将直流电机计数端连入8254CLK1中(8253采用方式三),在CLK1中读所记的数,从0FFFFH向下计,一直计到159FH,即转了6000圈后,进入程序的下一段。其流程图如下所示:图3-3圈数统计模块流程图3.1.4计算里程模块分析我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,

15、同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。我们用地址JSS里表示已经走过的公里,即8254传过来的高电平,同时我们采用价格公式来计算价格,将其里程和价格对应的中文字码表存入要显示的字符串中。计算公式为: 价格=(里程-3)* 2(里程3) 价格= 7.(里程=3)并调用显示模块来显示这些字码其流程图如下所示:图3-4计算里程模块流程图3.1.5显示模块分析在显示模块中,我们使用ST7920显示我们要显示的两行字符串。我们采取先显示第一行,再显示第二行的方法,只是用ST7920的中间两行。图3-5显示模块流程图3.1.6结束模块分析结束模块在程序的尾部在

16、结束模块中,我们规定只要在键盘上按任意一个键就会结束整个程序。如果无键按下,则程序自动跳转到程序头部。其程序流程图如下图所示:图3-6结束模块流程图3.2程序代码IO8253A EQU 280HIO8253B EQU 281HIO8253C EQU 283HDATA SEGMENTHZ DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH DW BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放原始输出HZ_TAB DW 0C2B7H,0B3CCH,0A3B0H,0A

17、3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH DW 0BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH ;存放要输出的值HZ_BG DW 0BFD5H,0B3B5H,0A2A0H,0A2A0H,0BBB6H,0D3ADH,0B3CBH,0D7F8H DW 0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H;存放“空车欢迎乘坐”HZ_ADR DB ? ;存放显示行起始端口地址JSS DW 0000HDII DW 0000HGAO DW 0000HZHE DW

18、 0000HNUMBER DW 0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H,0A3B9HDATA ENDSIO_ADDRESS EQU 288HCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV DX,IO_ADDRESSADD DX,3MOV AL,82HOUT DX,AL ;8255初始化MOV AL,0FFHMOV DX,300HOUT DX, ALCALL CLEAR ;LCD 清除LLL: MOV DX,IO_ADDRESS

19、ADD DX,1IN AL,DX ;判断开关是否打开AND AL,01HCMP AL,01HJZ F0CALL CHUSHI JMP LLLF0:MOV AL,01110110BMOV DX,IO8253COUT DX,AL ;8254初始化MOV AL,0FFHMOV DX,IO8253BOUT DX,ALMOV AL,0FFH ;设置计数初值0FFFFHOUT DX,ALF1:MOV AL,01000000B MOV DX,IO8253COUT DX,ALMOV DX,IO8253B IN AL,DXMOV AH,ALIN AL,DXXCHG AH,ALCMP AX,159FH ;查看是否

20、下降到159FHJA F1 ;不满足条件继续读值MOV AL,01110110B ;重置8253MOV DX,IO8253COUT DX,ALMOV AL,0FFHMOV DX,IO8253BOUT DX,ALMOV AL,0FFHOUT DX,ALCALL DISP ;调显示子程序CALL DDSPCALL DELAYPUSH DX MOV AH,06H MOV DL,0FFHINT 21HPOP DX JZ LLL MOV AH,4CH ;退出 INT 21HL1: JMP START ; L1CHUSHI PROC NEARLEA SI, HZ_TABLEA DI,HZMOV CX,0F

21、HF3:ADD SI,2ADD DI,2MOV AX,DIMOV SI,AXLOOP F3 ;重置HZ_TABMOV AX,0000HLEA BX,JSSMOV BX,AXLEA BX, HZ_BGMOV CH,2 CALL LCD_DISPLEA BX, HZ_BGMOV CH,3 ;显示“空车欢迎乘坐”CALL LCD_DISPRETCHUSHI ENDPDDSP PROC NEARLEA DI,HZ_TABLEA BX,JSSLEA SI,NUMBERMOV AX,WORD PTRBXMOV BP,AXAND BP,00FFHADD BP,BP MOV DX,WORD PTRBP+SIM

22、OV WORD PTRDI+6,DX ;将JSS中低八位传入HZ_TABMOV BP,AXAND BP,0FF00HROR BP,8ADD BP,BPMOV DX,WORD PTRBP+SIMOV WORD PTRDI+4,DX ;将JSS中高八位传入HZ_TAB LEA BX, HZ_TAB MOV CH,2 ;显示第2行信息 CALL LCD_DISPLEA DI,HZ_TABLEA BX,JSSLEA SI,NUMBERMOV AX,WORD PTRBXCMP AX,0003H ;比较路程与3的大小JBE L3 CALL BJLEA BX,JSSJMP L4L3:MOV BP,0007H

23、 ;路程比3小的情况ADD BP,BPMOV DX,WORD PTRBP+SI MOV WORD PTRDI+24,DXJMP L4L4: LEA BX, HZ_TAB MOV CH,3 ; 显示第3行信息 CALL LCD_DISPRETDDSP ENDPBJ PROC NEAR LEA DI,HZ_TABLEA BX,JSSLEA SI,NUMBERMOV AX,WORD PTRBXCMP AL,03HJAE BJ1SUB AH,01HADD AL,0AHSUB AL,03HAAS ;路程减三并十进制化JMP BJ2BJ1: SUB AX,0003HBJ2:MOV CX,AXAND AX,

24、00FFHADD AL,ALAAAADD AX,07HAAA ;路程加七并十进制化LEA BX,DIIMOV BX,AX ;DIIMOV BP,AXAND BP,00FFHADD BP,BPMOV DX,WORD PTRBP+SIMOV WORD PTRDI+24,DX ;先计算个位MOV AX,CXSHR AX,8AND AX,00FFHADD AL,AL ;十位相加AAALEA BX,GAOMOV BX,AX ;GAOLEA BX,DIIMOV DX,BX ;DIIAND AX,00FFHAND DX,0FF00HSHR DX,8AND DX,00FFHADD AL,DL ;再加进位AAA

25、LEA BX,ZHEMOV BX,AX ;ZHEMOV BP,AXAND BP,00FFHADD BP,BPMOV DX,WORD PTRBP+SIMOV WORD PTRDI+22,DX ;再计算十位LEA BX,ZHEMOV DX,BXLEA BX,GAOMOV AX,BXAND DX,0FF00HAND AX,0FF00HSHR AX,8SHR DX,8ADD DL,AL ;百位加进位AAAMOV BP,DXAND BP,00FFHADD BP,BPMOV DX,WORD PTRBP+SIMOV WORD PTRDI+20,DX ;最后计算百位RET BJ ENDPDISP PROC N

26、EAR ;显示子程序 PUSH DX LEA BX, JSS MOV AX,WORD PTRBX ADD AL,01H CMP AL,09H ;判断是否=9 JLE NUM ;若是则为0-9,ASCII码加30H MOV AL,00H ADD AH,01H CMP AH,0AH JZ L2NUM: MOV WORD PTRBX,AX ADD AL,30H ADD AH,30H MOV DL,AH MOV DH,AL MOV AH,02H ;屏幕显示 INT 21H MOV DL,DH MOV AH,02H ;屏幕显示 INT 21H MOV DL,0DH ;加回车符 INT 21H MOV D

27、L,0AH ;加换行符 INT 21H POP DX RET ;子程序返回DISP ENDPL2: MOV AH,4CH ;退出 INT 21HCLEAR PROC MOV AL,0CH MOV DX, IO_ADDRESS OUT DX,AL ;设置CLEAR命令 CALL CMD_SETUP ;启动LCD执行命令 RETCLEAR ENDPFUNCUP PROC ; MOV AL, 0FH ;LCD功能设置命令 ; OUT DX, AL ; CALL CMD_SETUP MOV AL, 34H ;LCD显示状态命令 OUT DX, AL CALL CMD_SETUP RETFUNCUP E

28、NDPLCD_DISP PROC; LEA BX, HZ_TAB CMP CH, 2 JZ DISP_SEC MOV BYTE PTR HZ_ADR, 88H ;第三行起始端口地址 ADD BX,16 ;指向第二行信息 JMP NEXTDISP_SEC: MOV BYTE PTR HZ_ADR,90HNEXT: MOV CL,8CONTINUE: PUSH CX MOV AL,HZ_ADR MOV DX, IO_ADDRESS OUT DX, AL CALL CMD_SETUP ;设定DDRAM地址命令 MOV AX,BX PUSH AX MOV AL,AH ;先送汉字编码高位 MOV DX,

29、IO_ADDRESS OUT DX,AL CALL DATA_SETUP ;输出汉字编码高字节 CALL DELAY ;延迟 POP AX MOV DX,IO_ADDRESS OUT DX, AL CALL DATA_SETUP ;输出汉字编码低字节 CALL DELAY INC BX INC BX ;修改显示内码缓冲区指针 INC BYTE PTR HZ_ADR ;修改LCD显示端口地址 POP CX DEC CL JNZ CONTINUE RETLCD_DISP ENDPCMD_SETUP PROC MOV DX,IO_ADDRESS ;指向8255端口控制端口 ADD DX,2 NOP MOV AL,00000000B ;PC1置0,PC0置0 (LCD I端=0,W端0) OUT DX, AL CALL DELAY NOP MOV AL,00000100B ;PC2置1 (LCD E端1) OUT DX, AL NOP CALL DELAY MOV AL, 00000000B ;PC2置0,(LCD E端置0) OUT DX, AL CALL DELAY RETCMD_SETUP ENDPDATA_SETUP PROC MOV DX,IO_ADDRESS ;指向8255控制端口 ADD DX,2 MOV AL,00000001B ;PC1置0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1