《基于51单片机的计算器—-毕业论文设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的计算器—-毕业论文设计.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘 要近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢。本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用44矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,并在LCD1602上显示操作过程。科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三
2、角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器,使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。关键词:计算器;LCD1602;89c51单片机目录摘 要I第一章 设计要求与方案论证11.1 设计要求:11.2 系统基本方案选择和论证11.2.1 单片机芯片的选择方案和论证11.2.2 显示模块选择方案和论证11.3 电路设计最终方案决定1第二章 系统的硬件设计与实现22.1 电路设计流程图22.2 系统硬件概述22.3 主要单元电路的设计32.3.1 单片机主控制模块的设计
3、32.3.2 显示模块的设计32.3.3 按键模块的设计6第三章 系统的软件设计83.1主程序:8第四章 指标测试154.1 测试仪器154.2 硬件测试154.3 软件测试154.4 测试结果分析与结论154.4.1 测试结果分析154.4.2 测试结论16作品总结17参考文献18附录一 系统电路图19附录二 Proteus仿真图20附录三 系统原理图21附录四 实物图22附录五 系统程序2328 第一章 设计要求与方案论证1.1 设计要求:1. 显示上,相加结果显示要考虑进位的输出显示;输入加数和被加数(减数和被减数、乘数和被乘数、除数和被除数)时,显示器上显示的数字要像平时用的计算器输入
4、一样。2. 注意对“0”-“9”、“+”、“-”、“*”、“/”、“=”以外按键输入的处理。1.2 系统基本方案选择和论证1.2.1 单片机芯片的选择方案和论证采用STC89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于拔插会对芯片造成一定的损坏。片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有STC89C51的功能,且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。当在对电路进行调
5、试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用STC89C51作为主控制系统。1.2.2 显示模块选择方案和论证采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与普通数码管相比功耗较小,硬件连接简单。所以显示部分采用1602液晶显示。1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用STC89C51作为主控制系统;LCD1602液晶作为显示第二章 系统的硬件设计与实现2.1 电路设计流程图图2-1电路设计流程图2.2 系统硬件概述本电路是由STC89C51单片机为
6、控制核心,具有在线编程功能,低功耗,能在3V超低压工作;采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据;显示部分由1602构成。其实排阻就是由8个电阻组成的,其中一端全部接在一起,103为8个10K电阻,102为8个1K电阻,他们在电路中起到“上拉”的作用,又称上拉电阻。上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,下拉同理.上拉是对器件注入电流,下拉是输出电流,弱强只是上拉电阻的阻值不同,没有什么严格区分,对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路
7、输出电流通道。2.3 主要单元电路的设计2.3.1 单片机主控制模块的设计STC89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图2-2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路, 如图2-2图2-2主控制系统2.3.2 显示模块的设计1. 16
8、02介绍字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图2-3:图2-3 1602字符型液晶显示器实物图2. 1602LCD的基本参数及引脚功能1602LCD分为背光和不带背光两种,基控制大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2-1所示:表2-1引脚接口说明表编号符号引脚说明编号符
9、号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为
10、低电平时可以写入指令或者显示地址,当RS为低电平R/W高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设
11、置3. LCD1602液晶原理 如图2-4所示:图2-4 LCD液晶原理图2.3.3 按键模块的设计根据设计要求需要选择四个独立按键分别为选择、加、减、确定,按键模块如图2-5所示:图2-5按键模块设计2.3.4 上拉电阻内容 1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 2、OC门电路必须加上拉电阻,才能使用。 3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。 4、在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻
12、抗,提供泄荷通路。 5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。 6、提高总线的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰。 7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。图2-6 上拉电阻原理图2.3.5自锁开关应用图2-7 自锁开关硬件图图2-8 自锁开关原理图第三章 系统的软件设计3.1主程序:#include#define uint unsigned int#define uchar unsigned char/-LCD1602-/P10-17= D0-7sbit rs=P30; /指令or
13、数据sbit wela=P31; /读or写sbit lcden=P32; /使能信号/-LCD1602-/-KEY-/P2口/-KEY-uchar code table= ;long int data_a,data_b; /第一个数和第二个数long int data_c;/计算结果uchar dispaly10; /显示缓冲/*/ 描述: 延时t us函数/*/void LCD_Delay_us(unsigned int t)while(t-); /t=0,退出/*/ 描述: 延时t ms函数/*/void LCD_Delay_ms(unsigned int t)unsigned int
14、i,j;for(i=0;it;i+) /执行t次循环for(j=0;j999)write_date(0+dispaly3); /显示千位if(data_a99)write_date(0+dispaly2); /显示百位if(data_a9)write_date(0+dispaly1); /显示十位 write_date(0+dispaly0); /显示个位void display_b() /显示数据bwrite_com(0x80+7); /第一行dispaly3=data_b%10000/1000; /千dispaly2=data_b%1000/100; /百dispaly1=data_b%1
15、00/10; /十dispaly0=data_b%10; /个 if(data_b999)write_date(0+dispaly3); /显示千位 if(data_b99) write_date(0+dispaly2); /显示百位 if(data_b9) write_date(0+dispaly1); /显示十位 write_date(0+dispaly0); /显示个位/计算结果void display_c(x)if(data_c-1)/溢出时显示错误dispaly8=data_c%1000000000/100000000; /万万dispaly7=data_c%100000000/10
16、000000; /千万dispaly6=data_c%10000000/1000000; /百万dispaly5=data_c%1000000/100000; /十万dispaly4=data_c%100000/10000; /万dispaly3=data_c%10000/1000; /千dispaly2=data_c%1000/100; /百dispaly1=data_c%100/10; /十dispaly0=data_c%10; /个 write_com(0x80+6+0x40); /第一行if(x=4) if(data_c99999999)write_date(0+dispaly8);
17、/显示万万if(data_c9999999)write_date(0+dispaly7); /千万if(data_c999999)write_date(0+dispaly6); /百万if(data_c99999)write_date(0+dispaly5); /十万write_date(0+dispaly4); /万write_date(.);write_date(0+dispaly3); /千write_date(0+dispaly2); /百write_date(0+dispaly1); /十write_date(0+dispaly0); /个 elseif(data_c99999999
18、)write_date(0+dispaly8); /显示万万if(data_c9999999)write_date(0+dispaly7); /千万if(data_c999999)write_date(0+dispaly6); /百万if(data_c99999)write_date(0+dispaly5); /十万if(data_c9999)write_date(0+dispaly4); /万if(data_c999)write_date(0+dispaly3); /千if(data_c99)write_date(0+dispaly2); /百if(data_c9)write_date(0+
19、dispaly1); /十write_date(0+dispaly0); /个 else /溢出时显示错误write_com(0x80+11+0x40); /第一行write_date(E); /显示 E write_date(r); /显示Rwrite_date(r); /显示Rwrite_date(o); /显示Owrite_date(r); /显示Evoid eql(uchar x)/加减乘除运算switch(x)/*功能键选择*/ case 1:data_c=data_a+data_b;break; /加 /* + S=1 */ /* 数值转换函数 */case 2:if(data_a
20、=data_b)data_c=data_a-data_b; /* - S=2 */减 elsedata_c=data_b-data_a;W_lcd(5,1,-); /负数符号 break; case 3:data_c=(data_a*data_b);break; /* * S=3 */乘case 4:if(data_b=0)LCD_Write_String(0,1,Error !);elsedata_c=(data_a*10000)/data_b;break; /* / S=4 */除/溢出时显示错误case 0:break; void main()uchar key=0xff; /键值初始化
21、uchar n=0; /第1个数可以按1-4次uchar m=5; /第2个数可以按1-4次uchar x=0; data_a=0; /前一个数data_b=0; /后一个数data_c=0; /结果 init_lcd(); /1602液晶初始化display_a(); while(1) key=keycheckdown();/*动态扫描键盘,返回按键对应值,赋给j key=0到f */if(0xff!=key)/*若返回值有效,进入内部处理程序*/ if(key10) if(n4)data_a=data_a*10+key;m=5;display_a();n+; /首先输入第一个数 if(m4
22、)data_b=data_b*10+key;n=5;display_b();m+; /必须按了+-*/才能输入第二个数 else switch(key)/*功能键选择*/case 0xa:n=5;m=0;x=1;W_lcd(5,0,+);break; /加 /* + S=1 */ /* 数值转换函数 */case 0xb:n=5;m=0;x=2;W_lcd(5,0,-);break; /* - S=2 */减case 0xc:n=5;m=0;x=3;W_lcd(5,0,*);break; /* * S=3 */乘case 0xd:n=5;m=0;x=4;W_lcd(5,0,/);break;
23、/* / S=4 */除case 0xe:n=5;m=5;eql(x);W_lcd(12,0,=);display_c(x);break; /* = */case 0xf:n=0;x=0;m=5; data_a=0;data_b=0;data_c=0;LCD_Write_String(0,0,table);LCD_Write_String(0,1,table);W_lcd(0,0,0);break; /* C*/ doP2=0xf0;while(P2!=0xf0);/*等待按键松开*/ /(0xff!=key) /while/main“那破玩 第四章 指标测试4.1 测试仪器测试如表4-1 所
24、示:表4-1 测试仪器序号名称型号1PC机2单片机仿真软件Proteus、keil C3数字万用表DT9205B4ISP在线下载线4.2 硬件测试走锡法焊接的电路,焊接不可轻视,只要出于一处的错误,则会对检测造成很大的不便,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。在可调电子日历的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1)单片机晶振不起振。(2)对可调的元器件,要先调整好所有的数值,以及焊接的正负极的注意解决:根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振,复位正常,程序能够下载。(3)虚焊问题
25、.。4.3 软件测试先用开发板进行程序测试(开发板上附带液晶显示器1602),键盘各个按键按下后,显示器作出相应显示,无法做出显示时,检查程序错误,修改后,程序运行正常4.4 测试结果分析与结论4.4.1 测试结果分析(1)在测试中遇到单片机晶振不起振,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.(2)LCD1602液晶不显示时间和日期,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。然后查看程序是否正确无误,对程序进行认真修改。4.4.2 测试结论经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力,同时在软件的编程
26、方面得到更多的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。作品总结1956年,美国贝尔实验室用进晶体管代替真空管,制成了世界上第一台全晶体管计算器,它使计算器的体积、重量、耗能量都大为减少,但计算能力较差。现在,除了日本、美国以外,欧亚的多功能计算机发展也很迅速。国外电子计算器正向着智能化、高精度、小体积方向发展,所以用单片机实现多功能计算器的设计是很具有推广性的。近年来,国内电子计算机发展也比较迅速,不少厂家推出了与卡西欧科学计算器功能类似的产品,如深圳金泰福的XX产品;广州罗纳多计算器等,一定程度上实现了计算器芯片的国产化,但价格高,扩展功能不足。充分表明,我国的多功能
27、计算器发展中还存在问题,具有很大的发展空间。现在市场计算器类型多样化,功能越趋多功能化。单片机能方便的实现计算器的设计,单片机也越来越多的应用于计算器的设计中。计算器是日常工作和学习生活中的常用工具,人们利用它代替了许多复杂计算,包括加减乘除和其他运算。尤其是小型计算器,它携带方便,在生活中用起来方便快捷,成为了财政、学习、生意上都青睐的必需品。它的需求广泛,在计算器的发展上存在很大的空间和市场意义。单片机在我国的各行各业得到了广泛使用,单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心。如今,它已经广泛应用到我们生活中的各个领域,如:电子、科技、通信、汽车、工业等。一般只需
28、几块钱,有着经济廉价的优势,用单片机可以很方便的实现计算器的设计。 参考文献1:郭天祥,新概念51-单片机C语言教程,电子工业出版社,20092:于枫,李继强微型计算机51-原理及应用技术3:余家春. Protel99SE 电路设计使用教程M.北京:中国铁道出版社, 20014:江宏,李良玉. Protel 电路设计与应用M.北京:机械工业出版社, 20025:朱善军等.单片机接口技术与应用.北京.清华大学出版社,20056:胡学海.单片机原理及应用系统设计.北京.京电子工业出版社,20057:王金明. 数字系统设计M. 北京:电子工业出版社, 20098:谭浩强.C程序设计(第三版).北京.清华大学出版社,2005附录一Proteus仿真图附录二 元件清单附录三 系统原理图附录四 实物图附录五 系统程序源程序如下:#includer