《基于单片机的计算器.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算器.docx(14页珍藏版)》请在优知文库上搜索。
1、科研训练论文题目:基于单片机的计算器的设计姓名:专业:机械电子工程班级:学号:院(系):机械与电子工程学院指导教师:卢文华完成日期:2023.12.06成绩:目录一、概述21.1设计任务及要求2.2设计原理2二、系统总体方案及硬件设计32.1 计算器总体思想32.2 硬件的选择与连接三、软件设计3.1 显示程序设计63.2 键盘识别程序设计83.3 运算程序设计9四、设计体会与总结10五、参考文献H附录源程序代码11基于单片机的计算器的设计摘要:本设计是一个实现加减乘除的计算器,它的硬件主要由四局部构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4神盘,它可以实现一位数的加减乘除运
2、算。显示局部:采用LED动态显示。按键局部:采用4*4键盘.采用软件识别健值,并执行相应的操作。关罐词:LED接口;健盘接口;8255A:汇编语言一、概述Ij设计要求及任务:(1)设计4*4的键盘,其中10个数字键09,其余六个键+、一、*、“/、“=、和“C键;(2)设计两位LED接口电路;(3)实现1位数的简单运算1.2设计原理;(1)LED显示器接口技术1.ED显示器有共阴极和共阳极两种。共阴极就是把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地,某端接高电平时才发亮。共阳极那么是把发光二极管的阳极连在一起构成公共阳极,使用时公共阳接十5V端。某端接低电平时才发亮。在此次设计中
3、采用共阴极接法。1.ED动态显示接口技术:动态显示中,任意时刻虽只有一位显示器被点亮,但当一个循环周期小于人的视觉暂留时间时一,看上去与全部显示器持续点亮的效果相同。从而提高数码管的利用效率,所以采用LED动态显示接口技术。多位LED显示器接口电路需要有两个输出口,其中一个用于输出8条段控线(有小数点显示),另一个用于输出位控线,位控线的数目等于显示器的位数。(2)键盘显示技术1、测试是否有键按下:单片机I/O口向所有列线输出低电平。即向列口写入00H。然后输入各行线状态,即读输入口的字。比拟:假设行线状态全为高电平,那么说明无键按下;假设行线状态中有低电平,那么说明有键按下。2、消抖动3、扫
4、描键盘以确定被按键的物理位置4、计算键码如果键号是按从左到右,从上到下的顺序编排的,按这种编排规律,各行的首键号依次是OOH、08H、10H、18H,如列线按07的顺序编号,那么可选用键码的计算公式为:键码=首键号十列号5、等待键释放(3)输入输出口的扩展:在扩展输入/输出端口时,要求输入口能够缓冲,输出口能筋锁存。常用小规模集成电路芯片74LS244或74LS245等扩展输入端口,用74LS273,74LS373,74LS377扩展输出端口。这种扩展方法的特点是电路简单,但功能单一、灵活性差。因而常采用中规模的可编程并行接口芯片8255A或8155扩展输入/输出端口。二、系统总体方案及硬件设
5、计2.1 计算器总体思想显示局部:采用LED动态显ZJKo按键局部:采用4*4键盘。采用软件识别键值,并执行相应的操作。执行过程:开机显示零,等待键入数值,当键入数字,经通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次犍入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。2.2 硬件的选择与连接本设计选用型号为8051的单片机。锁存电路采用74LS373,8255A连接数码管和4*4键盘。单片机与8255A的接口设计8255A中的数据总线缓冲器为三态双向数据缓冲存储器,用于将8255A的数据线D0、D7和单片机的数据总线(PO口)
6、连接,实现单片机和接口间的数据传送。读写控制部件的接口设计:(1) /CS为片选信号,接成低电平表示8255A被选中。/CS与P2.7相连,用P2口的最高位控制8255A是否工作。即将P2.7控制为低电平。(2) RESET-复位信号,高电平有效,接在单片机的RST端。(3) /RD和/WR为读写控制信号,低电平有效。分别将两个端口接单片机的/RD和/WR(4) AI和AO-端口选择信号,分别与单片机的低两位地址线PLl和PLO相连。用于选择不同端口。采用74LS373三态锁存器,用于别离Po口第八位地址线,将它的Qo和Ql口接至8255的地址输入端Ao和A1。所以假设将Pl.2PL7和P2.
7、0P2.6全接为高电平,A口地址为07FFCH,B口地址为07FFDH,C口地址为07FFEH,控制字存放器地址为07FFFH.1.ED显示电路的设计:简易计算器需要2位8段码LED显示电路。用8051单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PBO和PBl作为位控制。键盘接口设计89C51单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。设各口工作于方式零。那么8255A的工作方式控制字为10000001(8IH)键盘接口设计图键盘接口图三、软件设计系统总流程图3.1显
8、示程序设计利用LED动态显示的方法,设置显示缓冲地址和循环次数,让两个数码管从左到右依次显示,之间要调用延时子程序,但延时时间小于人的视觉暂留。程序流程图如下显示程序设计流程图3.2键盘识别程序设计实验箱提供6*4的小键盘,只使用前四列,即0-9,A-F键。A,B,C,D分别为+_“*“/键,E是等于键,F清零。其他是数字键。再利用实验箱上的LED显示器,对于即时按下的键和结果进行显示。向列扫描码逐列输出低电平,然后从行码地址读回。如果有键按下,那么相应的行值应为低,如果无键按下,由于上拉电阻的作用,行码为高。这样可以通过输出的列码和读取的行码判断按下的是什么键,在判断有键按下后,要有一定的延
9、时,防止键盘抖动。在接线时将KEY/LEDCS接到CSO上,那么列扫描地址为08002H,行扫描地址为08001Ho键盘扫描程序的流程图3.3运算程序设计四、设计体会与总结通过基于8051单片机简易计算器的设计,加深了我对单片机课程的了解,学以致用,不但回忆了过去所学,更使我了解了现在的缺乏,弥补了一些知识漏洞。更重要的是在实际设计和试验中形成了更加科学合理的认识,不断形成更为合理和具有科学性的思想方式。在这次设计中接住了互联网等途径查询相关信息,并在图书馆查阅了大量单片机资料。这不但扩展了有关单片机领域的眼界,而且完善了以往的知识体系。提高了运用知识的综合能力。五、参考文献【1】郭文川主编.
10、单片机原理与接口技术fM.北京:中国农业出版社,2007【2】何利民。MCS-51系列单片机应用系统设计ML北京:北京航空航天大学出版社,1990.143.-160o3何利民。MCS-51系列单片机应用系统设计M.北京:北京航空航天大学出版社,1990.143.-160.4李华。MCS-51系列单片机实用接口技术【Ml北京:北京航空航天大学出版社,1993.148.-158=5张毅刚、彭喜源、谭晓军编著。MCS-51单片机应用设计。哈尔滨工业大学出版社6蔡明生主编。电子设计。高等教育出版社附录:PAPORTEQU07FFCH;端控制口A口PBPORTEQU07FFDH;位控制口和键盘列线输出口
11、B口PCPORTEQUQ7FFEH;键盘行码读入口C口DATAlEQU70HDATA2EQU71HDIZHIlEQU72HDIZHT2EQU73HLEDBUFEQU60H;置显示缓冲单元首地址LJMF1STARTLEDMAP:DB3FH,0611,5BH,4FH;八段管显示码DB66H,6DH,7DH,07HDB7FH,6FH,77H17CHDB3911,5EH,7911,71HDELAY:MOVR7,#0;延时子程序DELAYLOOP:DJNZR7,DELAYLOOPDJNZ:R6,DELAYLOOPRETDisplayled:MOVRO,井LEDBUFMOVRl1#2;共两个八段管MOVR
12、2,#02H;02H=0000OoIoB从左边开始显示LOOP:MOVDPTR,#PBPORT;位控口地址MOVA,#0MOVX:DPTR,A;将零输出到位控口,关闭所有八段管MOV,ROACALLLEDMAPMoVDPTR,ttPAPORT;段控口地址MOVX:DPTR,A;输出到段控口MOVDPTR1#PAPORTMOVA,R2MoVX:DPTR,A;显示一位八段管MOVR6,#lCALLDELAYMOVA,R2RRAMOVR2,AINCRODJNZRl,LOOPRETTESTKEY:MOVDPTR1#PBPORTMOVA1#0MOVXDPTR,AMOVDPTR1#PCPORTMOVXA,
13、DPTRCPLAANL,#OFHRETKEYTABLE:;1毫秒延时;显示下一位;输出线置零;读入键状态;高四位不用,将高四位清零;定义键码的值DBODH,OCH,OBH,OAHDBOEH503H,06H,09HDBOFH502此05乩08HDB00H,01H,04H,07HGETKEY:MOVDPTR1ttPBPORTMOVP2,DPHMOVRO,#LOW(PCPORT)MOVRl,#0000100OBMOVR2,#4KLOOP:;找出键所在的列MOVA,RlCPLAMOVXDPTR,ACPLARRAMOVRl1AMOVXAfR0CPLAANLA,#OFHJNZGOONlDJNZR2,KLO
14、OPMOVR2,#OFFHSJMPEXITGOONl:MOVRI1AMOVA,R2DECRLARLAMOVR2,MOVA,RlMOVRl,#41.OOPC:RRCAJCEXITINCR2DJNZRljLOOPCEXIT:MOVA,R2MOVDPTR1#KEYTABLEMOVCA,A+DPTRMOVR2,WAITRELEASE:MOVDPTR1#PBPORTCLRMOVXDPTR,AMOVR6,#10CALLDELAYCALLTESTKEYJNZWAITRELEASEMOVA,R2RET;该列有键入;没有键按下,返回OFFH;键值=列X4+行jR2=(R2-l)*4;Rl中为读入的行值;移位找出所在行;R2=R2+行值;取出键码START:MOVSP1#4OHMOVLEDBUF+O,#0MOVLEDBUF+1,#03FHMLOOP:callDisplayledCALLTESTKEYJZMLOOPCALLGETKEYJISUAN:MOVR3