基于单片机的计算器的设计.docx
- 文档编号:28015158
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:18
- 大小:222.17KB
基于单片机的计算器的设计.docx
《基于单片机的计算器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算器的设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的计算器的设计
题目:
基于单片机的计算器的设计
一、概述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
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 计算器 设计