基于单片机的计算器的设计.docx

上传人:b****7 文档编号:15750216 上传时间:2023-07-07 格式:DOCX 页数:18 大小:222.17KB
下载 相关 举报
基于单片机的计算器的设计.docx_第1页
第1页 / 共18页
基于单片机的计算器的设计.docx_第2页
第2页 / 共18页
基于单片机的计算器的设计.docx_第3页
第3页 / 共18页
基于单片机的计算器的设计.docx_第4页
第4页 / 共18页
基于单片机的计算器的设计.docx_第5页
第5页 / 共18页
基于单片机的计算器的设计.docx_第6页
第6页 / 共18页
基于单片机的计算器的设计.docx_第7页
第7页 / 共18页
基于单片机的计算器的设计.docx_第8页
第8页 / 共18页
基于单片机的计算器的设计.docx_第9页
第9页 / 共18页
基于单片机的计算器的设计.docx_第10页
第10页 / 共18页
基于单片机的计算器的设计.docx_第11页
第11页 / 共18页
基于单片机的计算器的设计.docx_第12页
第12页 / 共18页
基于单片机的计算器的设计.docx_第13页
第13页 / 共18页
基于单片机的计算器的设计.docx_第14页
第14页 / 共18页
基于单片机的计算器的设计.docx_第15页
第15页 / 共18页
基于单片机的计算器的设计.docx_第16页
第16页 / 共18页
基于单片机的计算器的设计.docx_第17页
第17页 / 共18页
基于单片机的计算器的设计.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的计算器的设计.docx

《基于单片机的计算器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算器的设计.docx(18页珍藏版)》请在冰点文库上搜索。

基于单片机的计算器的设计.docx

基于单片机的计算器的设计

题目:

基于单片机的计算器的设计

一、概述2

1.1设计任务及要求2

1.2设计原理2

二、系统总体方案及硬件设计3

2.1计算器总体思想3

2.2硬件的选择与连接-----------------------------------------------------------------------------------4三、软件设计

3.1显示程序设计6

3.2键盘识别程序设计8

3.3运算程序设计9

四、设计体会与总结10

五、参考文献11

附录源程序代码11

基于单片机的计算器的设计

摘要:

本设计是一个实现加减乘除的计算器,它的硬件主要由四部分构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4键盘,它可以实现一位数的加减乘除运算。

显示部分:

采用LED动态显示。

按键部分:

采用4*4键盘。

采用软件识别键值,并执行相应的操作。

关键词:

LED接口;键盘接口;8255A;汇编语言

一、概述

1.1设计要求及任务:

(1)设计4*4的键盘,其中10个数字键0~9,其余六个键“+”、“—”、“*”、“/”、“=”、和“C”键;

(2)设计两位LED接口电路;

(3)实现1位数的简单运算

1.2设计原理:

(1)LED显示器接口技术

LED显示器有共阴极和共阳极两种。

共阴极就是把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地,某端接高电平时才发亮。

共阳极则是把发光二极管的阳极连在一起构成公共阳极,使用时公共阳接十5V端。

某端接低电平时才发亮。

在此次设计中采用共阴极接法。

LED动态显示接口技术:

动态显示中,任意时刻虽只有一位显示器被点亮,但当一个循环周期小于人的视觉暂留时间时,看上去与全部显示器持续点亮的效果相同。

从而提高数码管的利用效率,所以采用LED动态显示接口技术。

多位LED显示器接口电路需要有两个输出口,其中一个用于输出8条段控线(有小数点显示),另一个用于输出位控线,位控线的数目等于显示器的位数。

(2)键盘显示技术

1、测试是否有键按下:

①单片机I/O口向所有列线输出低电平。

即向列口写入00H。

②然后输入各行线状态,即读输入口的字。

③比较:

若行线状态全为高电平,则表明无键按下;若行线状态中有低电

平,则表明有键按下。

2、消抖动

3、扫描键盘以确定被按键的物理位置

4、计算键码

如果键号是按从左到右,从上到下的顺序编排的,按这种编排规律,各行的首键号依次是00H、08H、10H、18H,如列线按0~7的顺序编号,则可选用键码的计算公式为:

键码=首键号十列号

5、等待键释放

(3)输入输出口的扩展:

在扩展输入/输出端口时,要求输入口能够缓冲,,输出口能够锁存。

常用小规模集成电路芯片74LS244或74LS245等扩展输入端口,用74LS273、74LS373、74LS377扩展输出端口。

这种扩展方法的特点是电路简单,但功能单一、灵活性差。

因而常采用中规模的可编程并行接口芯片8255A或8155扩展输入/输出端口。

二、系统总体方案及硬件设计

2.1计算器总体思想

显示部分:

采用LED动态显示。

按键部分:

采用4*4键盘。

采用软件识别键值,并执行相应的操作。

执行过程:

开机显示零,等待键入数值,当键入数字,经通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

2.2硬件的选择与连接

本设计选用型号为8051的单片机。

锁存电路采用74LS373,8255A连接数码管和4*4键盘。

单片机与8255A的接口设计

8255A中的数据总线缓冲器为三态双向数据缓冲存储器,用于将8255A的数据线D0~D7和单片机的数据总线(P0口)连接,实现单片机和接口间的数据传送。

读写控制部件的接口设计:

(1)/CS为片选信号,接成低电平表示8255A

被选中。

/CS与P2.7相连,用P2口的最高位控制8255A是否工作。

即将P2.7控制为低电平。

(2)RESET-复位信号,高电平有效,接在单片机的RST端。

(3)/RD和/WR为读写控制信号,低电平有效。

分别将两个端口接单片机的/RD和/WR

(4)A1和A0-端口选择信号,分别与单片机的低两位地址线P1.1和P1.0相连。

用于选择不同端口。

采用74LS373三态锁存器,用于分离P0口第八位地址线,将它的Q0和Q1口接至8255A的地址输入端A0和A1。

所以若将P1.2~P1.7和P2.0~P2.6全接为高电平,A口地址为07FFCH,B口地址为07FFDH,C口地址为07FFEH,控制字寄存器地址为07FFFH.

LED显示电路的设计:

简易计算器需要2位8段码LED显示电路。

用8051单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制。

键盘接口设计

89C51单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。

设各口工作于方式零。

则8255A

的工作方式控制字为10000001(81H)键盘接口设计图

键盘接口图

 

三、软件设计

系统总流程图

3.1显示程序设计

利用LED动态显示的方法,设置显示缓冲地址和循环次数,让两个数码管从左到右依次显示,之间要调用延时子程序,但延时时间小于人的视觉暂留。

程序流程图如下

显示程序设计流程图

3.2键盘识别程序设计

实验箱提供6*4的小键盘,只使用前四列,即0-9,A-F键。

A,B,C,D分别为“+”“-”“*”“/”键,E是等于键,F清零。

其他是数字键。

再利用实验箱上的LED显示器,对于即时按下的键和结果进行显示。

向列扫描码逐列输出低电平,然后从行码地址读回。

如果有键按下,则相应的行值应为低,如果无键按下,由于上拉电阻的作用,行码为高。

这样可以通过输出的列码和读取的行码判断按下的是什么键,在判断有键按下后,要有一定的延时,防止键盘抖动。

在接线时将KEY/LEDCS接到CS0上,则列扫描地址为08002H,行扫描地址为08001H。

键盘扫描程序的流程图

3.3运算程序设计

四、设计体会与总结

通过基于8051单片机简易计算器的设计,加深了我对单片机课程的了解,学以致用,不但回顾了过去所学,更使我了解了现在的不足,弥补了一些知识漏洞。

更重要的是在实际设计和试验中形成了更加科学合理的认识,不断形成更为合理和具有科学性的思想方式。

在这次设计中接住了互联网等途径查询相关信息,并在图书馆查阅了大量单片机资料。

这不但扩展了有关单片机领域的眼界,而且完善了以往的知识体系。

提高了运用知识的综合能力。

 

五、参考文献

【1】郭文川主编.单片机原理与接口技术[M].北京:

中国农业出版社,2007

【2】何利民。

MCS-51系列单片机应用系统设计【M】。

北京:

北京航空航天大学出版社,

1990.143.-160。

【3】何利民。

MCS-51系列单片机应用系统设计【M】。

北京:

北京航空航天大学出版社,

1990.143.-160。

【4】李华。

MCS-51系列单片机实用接口技术【M】。

北京:

北京航空航天大学出版社,

1993.148.-158。

【5】张毅刚、彭喜源、谭晓军编著。

MCS-51单片机应用设计。

哈尔滨工业大学出版社

【6】蔡明生主编。

电子设计。

高等教育出版社

附录:

PAPORTEQU07FFCH;端控制口A口

PBPORTEQU07FFDH;位控制口和键盘列线输出口B口

PCPORTEQU07FFEH;键盘行码读入口C口

DATA1EQU70H

DATA2EQU71H

DIZHI1EQU72H

DIZHI2EQU73H

LEDBUFEQU60H;置显示缓冲单元首地址

LJMPSTART

LEDMAP:

DB3FH,06H,5BH,4FH;八段管显示码

DB66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH

DB39H,5EH,79H,71H

DELAY:

MOVR7,#0;延时子程序

DELAYLOOP:

DJNZR7,DELAYLOOP

DJNZR6,DELAYLOOP

RET

DISPLAYLED:

MOVR0,#LEDBUF

MOVR1,#2;共两个八段管

MOVR2,#02H;02H=00000010B从左边开始显示

LOOP:

MOVDPTR,#PBPORT;位控口地址

MOVA,#0

MOVX@DPTR,A;将零输出到位控口,关闭所有八段管

MOVA,@R0

ACALLLEDMAP

MOVDPTR,#PAPORT;段控口地址

MOVX@DPTR,A;输出到段控口

MOVDPTR,#PAPORT

MOVA,R2

MOVX@DPTR,A;显示一位八段管

MOVR6,#1;1毫秒延时

CALLDELAY

MOVA,R2;显示下一位

RRA

MOVR2,A

INCR0

DJNZR1,LOOP

RET

TESTKEY:

MOVDPTR,#PBPORT

MOVA,#0

MOVX@DPTR,A;输出线置零

MOVDPTR,#PCPORT;读入键状态

MOVXA,@DPTR

CPLA

ANLA,#0FH;高四位不用,将高四位清零

RET

KEYTABLE:

;定义键码的值

DB0DH,0CH,0BH,0AH

DB0EH,03H,06H,09H

DB0FH,02H,05H,08H

DB00H,01H,04H,07H

GETKEY:

MOVDPTR,#PBPORT

MOVP2,DPH

MOVR0,#LOW(PCPORT)

MOVR1,#00001000B

MOVR2,#4

KLOOP:

MOVA,R1;找出键所在的列

CPLA

MOVX@DPTR,A

CPLA

RRA

MOVR1,A

MOVXA,@R0

CPLA

ANLA,#0FH

JNZGOON1;该列有键入

DJNZR2,KLOOP

MOVR2,#0FFH;没有键按下,返回0FFH

SJMPEXIT

GOON1:

MOVR1,A;键值=列X4+行

MOVA,R2

DECA

RLA

RLA

MOVR2,A;R2=(R2-1)*4

MOVA,R1;R1中为读入的行值

MOVR1,#4

LOOPC:

RRCA;移位找出所在行

JCEXIT

INCR2;R2=R2+行值

DJNZR1,LOOPC

EXIT:

MOVA,R2;取出键码

MOVDPTR,#KEYTABLE

MOVCA,@A+DPTR

MOVR2,A

WAITRELEASE:

MOVDPTR,#PBPORT

CLRA

MOVX@DPTR,A

MOVR6,#10

CALLDELAY

CALLTESTKEY

JNZWAITRELEASE

MOVA,R2

RET

START:

MOVSP,#40H

MOVLEDBUF+0,#0

MOVLEDBUF+1,#03FH

MLOOP:

CALLDISPLAYLED;显示

CALLTESTKEY;有键入?

JZMLOOP;无键入,继续显示

CALLGETKEY;读入键码

JISUAN:

MOVR3,A

CJNER3,#0FH,QU;判断是否为清零键?

MOVR3,#00H;清零

MOVR4,#00H

MOVR5,#00H

MOVDATA1,#00H

MOVDATA2,#00H

MOVDIZHI1,#00H

MOVDIZHI2,#00H

MOVLEDBUF+0,#0

MOVLEDBUF+1,#03FH

LJMPMLOOP

QU:

CLRC

CJNER3,#0AH,FOLLOW;判断是数字键还是功能键?

FOLLOW:

JCSHUZI;R3<10,说明是数字键

LJMPGN

SHUZI:

MOVA,R4;判断是否有运算符输入,

JNZSHUZI1;有就将数值存在DATA2

MOVA,R3

MOVDATA1,A

LJMPXS;显示第一次输入的数值

SHUZI1:

MOVA,R3

MOVDATA2,A

LJMPXS;显示第二次输入的数值

GN:

MOVR4,#01H;将01H给R4,说明已有运算符输入

CJNER3,#0EH,JIA;判断键值是否为“=”?

MOVR4,#00h;将R4清零

MOVA,DIZHI1;执行“=”

MOVDPH,A

MOVA,DIZHI2

MOVDPL,A

MOVA,#00H

JMP@A+DPTR;转到本次输入的算法程序

JA:

CJNER3,#0AH,JN;若键值为“+”则将“+”的程序首地址

MOVDPTR,#JIA;存在DIZHI1和DIZHI2中

MOVA,DPH

MOVDIZHI1,A

MOVA,DPL

MOVDIZHI2,A

LJMPMLOOP

JN:

CJNER3,#0BH,CE;若键值为“-”则将“-”的程序首地址存

MOVDPTR,#JIAN;DIZHI1和DIZHI2中

MOVA,DPH

MOVDIZHI1,A

MOVA,DPL

MOVDIZHI2,A

LJMPMLOOP

CE:

CJNER3,#0CH,CU;若键值为“*”则将“*”的程序首地址存在

MOVDPTR,#CHENG;址存在DIZHI1和DIZHI2中

MOVA,DPH

MOVDIZHI1,A

MOVA,DPL

MOVDIZHI2,A

LJMPMLOOP

Cu:

CJNER3,#0DH,ZHUAN;若键值为“/”则将“/”的程序首地址存在

MOVDPTR,#CHU;存在DIZHI1和DIZHI2中

MOVA,DPH

MOVDIZHI1,A

MOVA,DPL

MOVDIZHI2,A

ZHUAN:

LJMPMLOOP

JIA:

MOVA,DATA1;加法程序

ADDA,DATA2

LJMPXS

JIAN:

MOVA,DATA1;减法程序

SUBBA,DATA2

LJMPXS

CHENG:

MOVA,DATA1;乘法程序

MOVB,DATA2

MULAB

LJMPXS

CHU:

MOVA,DATA1;除法程序

MOVB,DATA2

DIVAB

XS:

MOVB,#10;显示个位数字

DIVAB

MOVR5,A

MOVA,B

MOVDPTR,#LEDMAP

MOVCA,@A+DPTR

MOVLEDBUF+1,A

MOVA,R5

FRIST:

CJNEA,#0,NEXT

LJMPMLOOP;运算完后继续扫描键盘

NEXT:

MOVB,#10;显示十位数字

DIVAB

MOVR5,A

MOVA,B

MOVDPTR,#LEDMAP

MOVCA,@A+DPTR

MOVLEDBUF+0,A

MOVA,R5

LJMPFRIST

END

 

.

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

当前位置:首页 > 自然科学 > 物理

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

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