硬件(课程设计) LCD版电子计算器Word格式文档下载.docx

上传人:聆听****声音 文档编号:962738 上传时间:2023-04-29 格式:DOCX 页数:33 大小:1.84MB
下载 相关 举报
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第1页
第1页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第2页
第2页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第3页
第3页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第4页
第4页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第5页
第5页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第6页
第6页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第7页
第7页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第8页
第8页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第9页
第9页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第10页
第10页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第11页
第11页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第12页
第12页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第13页
第13页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第14页
第14页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第15页
第15页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第16页
第16页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第17页
第17页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第18页
第18页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第19页
第19页 / 共33页
硬件(课程设计) LCD版电子计算器Word格式文档下载.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

硬件(课程设计) LCD版电子计算器Word格式文档下载.docx

《硬件(课程设计) LCD版电子计算器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《硬件(课程设计) LCD版电子计算器Word格式文档下载.docx(33页珍藏版)》请在冰点文库上搜索。

硬件(课程设计) LCD版电子计算器Word格式文档下载.docx

1设计任务与设计要求

1.1选题

我选的题目是电子计算器,电子计算器的设计主要分为键盘编码、七段数码管显示、和四则运算法则这三部分。

设计时用可编程接口芯片8255A链接4*4键盘和LCD显示器,8255扫描键盘并通过LCD显示相应的数字,这其中需要一定的汇编程序作为核心支撑,才能正确的使各种功能运行正常。

1.2需求分析

通过对选题的深入了解,电子计算器基本功能可以概括为:

1.可以进行简单的加、减、乘、除四则运算;

2.为了显示的人性化,按下每个数字都要进行反馈显示;

3.计算器能判断个别简单的错误,如除数为零,显示报错;

4.计算器要有清零功能,可以在按键失误后重新按键。

在显示屏上可以及时反馈按下数字,这需要扫描程序模块一直运行着,并能够及时调用显示程序模块,当有运算符号按下时还要及时给之前按下的数字进行组装成一个数值,组装键值模块也是程序的重要所在。

等等这些都是在主程序下合理安排、运用流畅的,才能带来较完美的计算器体验。

1.3设计任务

本次实验我分为电路设计和编码设计这两个任务模块来设计的。

电路设计主要研究键盘按键位置设计和各个芯片器件之间的连线。

编码设计主要分为键盘扫描读取编码、LCD显示编码和四则运算编码。

2硬件方案

2.1微处理器8086芯片

当引脚接高电平时,CPU工作于最小模式。

此时,引脚信号24~31的含义及其功能如下:

(1)IO/M:

存储器、I/O端口选择控制信号。

信号指明当前CPU是选择访问存储

器还是访问I/O端口。

为高电平时访问存储器,表示当前要进行CPU与存储器之间的数据传送。

为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。

(2)WR:

写信号,输出,低电平有效。

信号有效时,表明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。

(3)INTA:

可屏蔽中断响应信号,输出,低电平有效。

CPU通过信号对外设提出的可屏蔽中断请求做出响应。

为低电平时,表示CPU已经响应外设的中断请求,即将执行中断服务程序。

(4)ALE:

地址锁存允许信号,输出,高电平有效。

CPU利用ALE信号可以把AD15~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。

(5)DT:

数据发送/接收信号,输出,三态。

DT/信号用来控制数据传送的方向。

DT/为高电平时,CPU发送数据到存储器或I/O端口;

DT/为低电平时,CPU接收来自存储器或I/O端口的数据。

(6)DEN:

数据允许控制信号,输出,三态,低电平有效。

信号用作总线收发器的选通控制信号。

当为低电平时,表明CPU进行数据的读/写操作。

(7)HOLD:

总线保持请求信号,输入,高电平有效。

在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。

(8)HLDA:

总线保持响应信号,输出,高电平有效。

HLDA是与HOLD配合使用的联络信号。

在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。

2.2可编程并行接口8255A芯片

8255A可为8086微处理器与外部设备之间提供并行输入/输出的通道。

通过编程可以设置芯片的工作方式,因此,用8255A连接外部设备时,通常不用再附加外部电路。

并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。

在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。

接口把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外设的响应。

外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。

数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者

5

向CPU发一个中断请求。

CPU可用查询方式或中断方式从接口中读取数据。

接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且撤消对CPU的中断请求。

在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中

“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。

当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。

外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。

(1)8255A的一些引脚

RESET:

复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的

I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

CS:

片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。

图2-18255A管脚图

RD:

读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:

写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。

D0~D7:

三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

(2)8255A的读写控制:

8255A的读/写控制逻辑电路接受CPU发来的控制口号RD、WR、RESET和地址信号

A1~A0。

然后根据命令端口,控制信号的要求,将端口的数据读出选信CPU或者将

CPU送来的数据写入端口,各端口的工作状态。

通过用输出指令对8255A 的控制字寄存器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作,端口A可工作于3种方式的任一种,端口B只能工作于方式0和方式1,端口C除了用于输入输出端口外,还能配合A口和B口工作,为这两个端口的输入输出操作提供联系信号。

图2-28255A控制字

本次设计实验采用的控制字是,A口输出、B口输出、C口高输出低输入。

2.34*4矩阵键盘

键盘是信息输入元件,由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测。

因为4×

4矩阵键盘有8个管脚,为了扫描键盘判断键值的方便将八个管脚中的列接PA和行接PC。

因为进行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4×

4键盘则要求4个

I/O口输入,另外4个输出,这一点PC口刚好符合,低四位接行作为键盘I/O输入,PA低四位接列作为键盘I/O输出。

键盘有16个按键,我们设计为0~9为数字键,ABCD分别为+、-、*、/,E

为=号,F为清零键CL。

识别键盘上哪个键被压下的过程的扫描步骤:

6

1.检测是否所有键都都松开了,若没有则反复检测。

2.但所有键都松开了,再检测是否有键压下,若无键按下则反复检测。

3.如有键压下,要消除键抖动,确认有键压下。

4.对压下的键位置进行判断,先判断是第几行有键按下,再判断第几列有键按下,键值=行号*4+列号。

至此确定了哪个键按下,再接着进行后面的操作。

1

3

4

7

8

9

+

-

*

/

=

CL

图2-34*4矩阵键盘 表2-1键盘设计

2.4LCD显示屏

LCD12864液晶模块

12864LCD显示块是所说的点阵液晶显示模块,就是由128*64个液晶显示点组成的一个128列*64行的阵列,所以也就叫成了12864。

每个显示点都对应着有一位二进制数,0表示灭,1表示亮。

存储这些点阵信息的RAM被称为显示数据存储器。

如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中。

图形或汉字的点阵信息是由自己设计,这时候问题的关键是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。

带中文字库的TS128X64(图2-6)是一种具有4位/8位并行、2线或3线串行多种接口方式,引脚功能见图表2-2,显示分辨率为128×

64,内置8192个

16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×

4行16×

16点

阵的汉字、也可完成图形显示、低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

图2-6TS12864液晶实物图

2.5电路及其主要功能

2.5.1电路连接实物图

图2-6电路实物图

2.5.3功能模块图

图2-8功能模块图

本计算器开始时先进行键盘扫描,如果有键按下则调用三个子程序,分别是键盘输入子程序,判断数字子程序,判断符号子程序。

判断数字子程序的功能是,判断数字。

如果输入的数字不符合规范则报错显示E。

键盘输入的功能是,把输入的数字按位分解,然后输出。

判断符号子程序的功能是判断是否是符号。

如果是运算符号则把之前输入的数存起来,如果是清零键则清零。

如果是等于则计算结果。

然后返回进行屏幕显示。

3软件方案

3.1流程图

3.1.1键盘扫描流程图

运行

程序初始化

N

有键按下

Y

延时12ms

结束

保存键值

图3-9扫描流程图

按键释放

键位扫描

扫描子程序,先判断有没有键按下,有键按下则延时12ms,防止抖动。

之后再检测是否有键按下。

如果这次还有键按下则可以排除抖动的嫌疑。

然后进行键位扫描,通过对每一行分别输出低电平,然后分别检测列的电平值来判断是哪一行哪一列。

之后在册检测是否有键按下,如果没有则表明按键已经松开,这之后保存键值

3.1.2计算器运算流程图

判断?

运算

‘’=’’?

‘’+’’?

‘’--’’?

‘’*’’?

‘’/’’?

乘法运算

加法运算

存储

显示

扫描

除法运算

清零

计算键值

图3-10运算流程图

通过符号判断子程序来检测是否是符号,根据相应的符号来进行对应的运算

4问题与解决方案

11

1.此次课程设计开始时用的时LED,因为很简单,做成功后移植到了LCD上

2.扫描键盘时数字应及时响应显示出来,所以程序代码中设置了栈,每个扫描到的键值都入栈,显示的时候都要扫描数字的位数再显示出来。

3.程序编码中期LCD显示总是闪屏的,研究了好久才知道原来是延时问题。

4.清零的时候总是显示四个零,不知道是哪个地方出错了,几个人看了好久,程序代码长了进行调整改进就越来越困难。

最终发现是代码跳转回来的时候给总程序进行初始化,让其四位都置零。

5.设置报错子程序的时候,一旦程序报错就卡住了,必须重启才能继续运算。

对汇编语言研究了好久才发现原来是代码缺少按键返回触发,报完错程序就进入了死循环,所以在报错子程序中加入了键盘扫描,一旦有键按下就能调用程序返回到之前的键盘扫描中。

这样很巧妙地解决了这一问题。

5成果展示

写1234

图5-12显示55*55的结果

图5-23除数为零是的报错处理

13

6、心得体会

在研究明白本次课题后,我们依据之前微机原理课程中学过的知识,再次通过书籍上对知识点的巩固,深入了解芯片8255及LCD的工作原理及运行流程图,对编写程序的基本思路有了基本的掌握。

通过翻阅书籍,我们也发现,自己对各种器件芯片的了解还不是很深入,对书上的细节还没有看透。

确定好编程基本思路之后,我们开始编写程序,这是本次硬件课程设计实验中最难的环节了,编程体现我们的薄弱环节,对汇编语言的掌握模棱两可,对各器件的连接之间还是很模糊,把我们对平时学习知识不扎实的缺点完全暴露了出来,对我们也是一次打击 经过老师的帮组和我们的努力,最终我们完成了实验要求,成功的运行了实验,并且完成了老师的附加要求。

通过本次实验,我进一步学习了8255,以及LCD的工作原理,并且深入的熟练了汇编语言,对各种命令进行了掌握,这也让我们认识到,作为一名计算机专业的学生,将来想要在本专业有所成就,就一定要学好基础的计算机知识,并且熟练的运用到现实生活中的实践环节,实践是检验真理的唯一标准,同时也是最能考察出我们身上的不足的路径。

在以后的学习中,我们一定会借鉴现在的不足,为我们将来走向工作岗

位打下基础

参考文献

[1]周荷琴、吴秀清《微型计算机原理与接口技术》第四版[M].北京:

中国科学技术大学出版社,2008

[2]朱金钧、麻新旗《微型计算机原理及应用技术》[M].北京:

机械工业出版社,2003

[3]周明德.《微型计算机系统原理及应用》[M].北京:

清华大学出版社,2001

[4]《硬件课程设计(电子计算器)报告》

[5]《微机原理课程设计(用8255A实现4位十进制计算器)》

附录:

5.1程序源代码

port_aequ288Hport_bequ289Hport_cequ28aHport_ctlequ28bHio_addressequ289Hdatasegment

xdb0,0,0,0;

存放数据的每一位

x1dw?

;

存放第一个数据值

x2dw?

存放第二个数据值

ydw?

存放结果

sdb?

存放运算符号

edb?

按下等号键标记

ccdb?

存放运算数据位数

hdb0;

存放行号

ldb0;

存放列号

discode DW

0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7HDW

15

0A3B8H,0A3B9H,0A3C1H,0A3C2H,0A3C3H,0A3C4H,0A3C5H,0A3C6H,0A3ADH

HZ_ADR DB ?

;

存放显示行起始端口地址dataends

codesegment

assumecs:

code,ds:

data

start:

movax,datamovds,ax

moval,81h ;

A口输入B口输出C口输出 B即

movdx,port_ctloutdx,al

movdi,offsetx+3;

di指向X[3]

kkk:

callkey;

扫描按键

jmpkkk;

keyproc ;

按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号

check:

calldisp;

等待按键,按下的同时进行显示

moval,10h;

PA0-PA3对应行号,输出低电平movdx,port_a

outdx,al

movdx,port_c

inal,dx ;

读列值,即PC0-PC3的值andal,0fh

cmpal,0fh;

jzcheck ;

ZF=1,即运算结果为0,相等,都为高电平则无键按下,等待

movcx,50

loop$;

消除键抖动

inal,dx;

重复读列值andal,0fh

cmpal,0fh

jzcheck;

若无键按下则一直等待

movh,0;

有键按下,先把行列号清0

movl,0movbl,01h

movbh,0feh;

扫描键值,从第一行开始检测,PA0输出低电平

next:

moval,bhmovdx,port_aoutdx,al

nextl:

读列值,判断第几列有键按下

testal,bl;

判断是否是第1列

jzwaito ;

是则跳转

rolbl,1 ;

左移一位

cmpbl,10h;

当前行状态下没有任何列有键按下,则转为对下一行的测试

jznexth

incl;

每判断一列,列号加1

jmpnextl;

再对下一列进行判断

nexth:

movl,0movbl,01hrolbh,1;

cmpbh,0efhjzexit

inchjmpnext

waito:

movdx,port_c ;

若有键按下,则等该键松开后再计算键值

andal,0fhcmpal,0fhjnzwaito

callkeyvalue;

调计算键值子程序

exit:

retkeyendp;

keyvalueproc ;

计算键值子程序,通过行列号计算键值(键值=行号*4+

列号)

17

movdl,h ;

键值存放在DL寄存器中movdh,l

xorax,ax

moval,4muldlmovdl,aladddl,dhcmpdl,9

jngnum_call ;

小于等于,则转移即按下的是数字键

cmpdl,14

jlcont_call;

大于9小于14,即加减乘除的时候,运算键

cmpdl,14 ;

等于15,即等于键jzoutp_call;

cmpdl,15

jzclr_call;

按下清零键num_call:

callnumber;

调用数字键处理子程序jmpexit1

cont_call:

movs,dl;

存放运算键的键值

move,0

callcount;

调用运算键处理子程序,计算

jmpexit1

outp_call:

calloutp;

调用等号键处理子程序

clr_call:

callclear;

调用清除键处理子程序

exit1:

retkeyvalueendp;

clearproc ;

一下为清除键处理子程序,按下清除键后,X变量全部

清0

movx[3],0

movx[2],0

movx[1],0

movx[0],0callbitp

calldisp

calldely ;

分析数据位数ret

clearendp;

outpproc ;

等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量

pushax ;

并根据运算符号,调用相应的运算子程序pushdx

pushbx

ince

callcount ;

调用运算键处理子程序,计算第二个运算数据cmps,10

jzadd_call;

加号

cmps,11

jzsub_call ;

减号cmps,12

jzmul_call;

乘号

cmps,13

jzdivp_call ;

除号

add_call:

calladdpjmpstore1sub_call:

callsubpjmpstore1mul_call:

callmulpjmpstore1

divp_call:

cmpx2,0 ;

判断除数是否为零,为零跳入报错子程序

jzdisp1calldivpjmpstore1

disp1proc ;

报错显示子程序pushbx

19

pushaxmovbh,0

callclear2

leasi,discode;

si指向段码表头movdx,port_a

movbh,00hmovbl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

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

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