ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:671.31KB ,
资源ID:17628382      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17628382.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的多功能计算器设计Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的多功能计算器设计Word文档格式.docx

1、基于设计要求,笨设计考虑了两种设计方案,他们均可以实现计算器的功能,但基于设计目的及微控制器的广泛运用,比较两种方案的优劣,最终选择基于51单片机的计算器设计。1.2.1 方案一 采用FPGA控制FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外

2、部存储器芯片 ,且使用方法复杂 ,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,成本太高。1.2.2 方案二 采用STC89C52单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。

3、1.2.3 方案比较及选择通过以上两种方案论证和比较,从设计的实用性,方便性和成本出发,选择了以STC89C52单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位浮点数的加减和三位浮点数的乘除运算。2 单元电路设计2.1 工作原理利用矩阵键盘进行按键的输入,通过对矩阵键盘的扫描,获取用户的输入,并实时的显示在1602液晶上,每次获取到输入时,根据软件设计的相应方法对输入进行处理、运算,输入结束后(以“=“为标志),将最终的运算结果输出的液晶上。系统组成及整体框图如图2.1所示。图2.1 系统组成及总体框图2.2 硬件电路设计2.2.1 单片机电路设计为使单片机正常工作,除电源供电部

4、分外,还需提供晶振电路和复位电路。具体电路如下:图2.2 单片机工作电路由图2.2可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接了上拉电阻。图中EA为外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。在这里,STC89C52单片机8k的程序存储器已经够本设计使用,无需外部程序储存器,故EA直接接高电平。2.2.2 键盘模块电路图2.3是键盘电路,共20个按键,用来实现人机交互和运算表达式的输入,S0S3、S5S8、S10S13

5、、S15S18共16个按键组成一组4*4的矩阵键盘,行线第一行到第四行分别接在P3.0P3.3口,列线第一列到第四列分别接在P3.4P3.7口,这样P3口就完成了对4*4的矩阵键盘的接线。同时,注意到按键数量还达不到要求,故增加了四个独立按键S4,S9,S14,S19。他们依次接在P20P23口。可见,矩阵键盘相对来讲更节省I/O口,但本着学习的目的,加之本设计并不需要太多的I/O口,故为充分学习和利用资源,在这里也设计了4个这样的独立按键。图2.3 键盘模块电路2.2.3 蜂鸣器提示电路蜂鸣器主要用于按键时发出声音,提示当前的按键操作,电路如图2.5所示,三极管主要用于驱动蜂鸣器,因为单片机

6、I/O的驱动能力有限。同时单片机I/O口还在这里还起到开关作用,为0时打开蜂鸣器通道,使蜂鸣器发声。图2.4 蜂鸣器提示电路2.2.4 液晶显示电路LCD也是本次设计的重要组成部分之一,主要用于显示输入和输出。电路如图2.5所示,LCD数据端与单片机P0口相连,控制端与P24P26连接,电位器用于调节对比度。图2.5 LCD显示电路至此,整个电容测量仪的硬件设计部分就基本设计完成,接下来,需要的就是与之相匹配的软件支持了。2.3 软件设计软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为四个模块:延时模块、1602显示

7、模块、用于处理计算表达式的对战模块及主函数模块。采用模块化设计,方便调试与理解。具体程序见附录二。在这里重点介绍软件核心的表达式处理程序算法。2.3.1 键盘扫描独立键盘很好实现,只需不停的检测即可,出现低电平即出现按键,在经过一定的延时消抖,再确认判断即可。矩阵键盘扫描程序,首先读出P3的低四位,然后读出P3口的高四位。然后确定键值并显示缓存,最终将按键的值通过一个预先定义好的数组转换为相应的ASCII码值送给LCD显示和与表达式相应的堆栈进行处理,读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出高电平,从P3口的值读入键盘信息(行信息);第二次所有列

8、线均输出高电平,从P3口的值读入键盘信息(列信息)。2.3.2 表达式的处理表达式包含加、减、乘、除、括号等,必须按照相应的优先级运算,才可能得出正确的结果。在这儿采用栈结构,可以有效的进行表达式的处理。栈结构具有“后进先出”的固有属性,借助这个属性我们可以随时对刚输入的元素进行操作,从而实现边输入边计算。为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操

9、作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为”#”)。在这里,相应的处理指的是,如果当前符号的优先级比栈顶优先级低,则将该符号继续压入堆栈,不做其它操作;如果当前符号的优先级比栈顶优先级高,则依次取出操作数栈的栈顶两个数据和符号栈的栈顶符号进行这两个数的运算,运算结果数据再压入操作数栈中。若优先级相等,则弹出符号栈栈顶符号。算符间的优先关系如下(#表示开始和结束):+-*/()#=表2.1 运算符优先级表2.4 altium designer 原理图设计及PCB制作2.4.1 原理图设计图2.6 原理图设计(1)单片机部分图2.7 原理图设计(2)键盘、蜂鸣器部分2.

10、4.2PCB制作图2.8 PCB设计(1)单片机部分图2.9 原理图设计(2)键盘、蜂鸣器部分注:在此并没有布双层板,红色的线仅仅只是为了标志出跳线或者本质上实物已经连接上了。2.4.3设计结果图2.10 设计结果实物图如图所示,各个按键功能如图中文字说明,电源为5V直流电源。3系统测试测试主要测试其运算是否正确,及检错能力。3.1 整数运算在此以整数运算为例,介绍计算器的使用方法即流程。首先打开电源,看到LCD打开显示,说明运行正常,接着,输入表达式:12*(56+23)*2,其结果本身应为1896。输入结束后,点“=”按键,即可在第二行显示出运算结果,由图可见运算完全正确。在使用时,可以通

11、过声音开关按钮控制按键音的打开和关闭,在LCD上也有显示,如果再第二行第一个位置没有显示,则没有打开声音,可以通过按钮打开。若有显示,则声音已经打开,可以通过按钮关闭声音。如图3.1所示,此时已经打开声音。图3.1 整数运算3.2 浮点数运算图3.2 浮点数运算由图可以看出,可以进行浮点数运算,还可以从第二行第一个字符,蜂鸣器处于关闭状态。3.3 输入出错的情况输入一个错误的表达式,如图3.3所示。图3.3 输入错误的情况下再按“=”号,将会出现出错画面。如图3.4所示。图3.4 输入错误的显示由以上测试可知,整个设计运行正常,能够正确的进行运算和出错提示。由此可得,整个设计是成功的。4 结论

12、与心得体会总之,通过一系列仿真和设计,基于单片机的计算器设计还是比较成功的做出来了。一路下来还是比较坎坷,从原理到实物,从调试到调试成功,遇到了很多问题,特别是在软件编程时,开始以为既然单片机具有数据处理与运算的能力,那么用它来做一个计算器应该很简单了,可是,后面实际操作才知道,当计算表达式时,优先级问题非常重要,一开始用了很多if语句来实现,程序繁琐复杂,且效果不是很好,很容易出错,最后通过查阅相关资料,了解到利用数据结构中栈的思想来解决这一问题就很方便。但在实际写程序时也遇到了很多问题,但最终还是克服难关,将整个软件比较完善的实现了。在硬件的原理图及PCB设计中,也遇到了很多问题,先做模块

13、后做主板,导致我后面的布线就很麻烦,这也教会了我一些经验,在PCB分模块设计中,模块与模块之间的连接也是必须考虑到的,从左端连接还是从右端连接,都直接影响到整个PCB板的设计。总之,通过这次设计也收获了很多,知识层面上,学得了很多新知识,解决问题的新方法,思考问题的新方向。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。5 参考文献【1】 单片机基础第三版 李广弟 朱月秀 冷祖祁 编著 北京航天大学出版社,2007【2】 数据结构严蔚敏 编著 清华大学出版社附录1 元器件清单(1)晶振12M一个(2)stc89c

14、52芯片一片(3)30pf 2个;10uf 1个;(4)40脚活动底座一个(5)LCD液晶一个(6)按键21个(7)发光二极管1个(8)9引脚排阻 1个(9)680 1个;10k 2个;1k 1个;10k滑动变阻器 1个; 10 1个;(10) 开关1个(11) 5V有源蜂鸣器1个(12) 三极管S8550一个(13)排针若干,杜邦线若干附录2 程序清单分9个文件:delay.h,delay.c,1602.c ,1602.h,stack.h,stack.c,keyboard.h,keyboard.c,main.c(a) delay.h程序清单:#ifndef _delay_h_#define

15、_delay_h_void delay_us(uint cnt);void delay_ms(uint cnt);#endif(b) delay.c 程序清单:#include delay.hvoid delay_us(unsigned int cnt) while(-cnt);void delay_ms(unsigned int cnt) unsigned int i, j; for (i = 0; i cnt; i+) for (j = 0;j 0;i-) if(s14 = 0 | s14 = . for(j=14;j1;j-) sj = sj-1; else break; while (

16、*s) LCD_write_Data(*s); s+;/* 写入字节函数 */void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data) LCD_write_Data(Data);/* 初始化函数 */void LCD_init(void) LCD_write_com(0x38); /*显示模式设置*/ LCD_write_com(0x08); /*显示关闭*/ /*显示清屏*/ LCD_write_com(0x06); /*显示光标移动设置*/ LCD_write_com(0x0C); /*显示开及光标设置*

17、/(e)按键keyboard.h程序清单:#ifndef _KEYBOARD_H#define _KEYBOARD_Hunsigned char KeyProcess(void); /读按键函数unsigned char keyscan(void); /键盘扫描函数(f)按键keyboard.c程序清单:sbit key0=P20;sbit key1=P21; sbit key2=P22;sbit key3=P23;sbit speak=P27;unsigned char KeyProcess(void)unsigned char key; unsigned char keyvalue = 1

18、6; key=keyscan(); /调用键盘扫描 switch(key) case 0xee:keyvalue = 0;break; /0 按下相应的键显示相对应的码值 case 0xde:keyvalue = 1; /1 按下相应的键显示相对应的码值 case 0xbe:keyvalue = 2; /2 case 0x7e:keyvalue = 3; /3 case 0xed:keyvalue = 5; /4 case 0xdd:keyvalue = 6; /5 case 0xbd:keyvalue = 7; /6 case 0x7d:keyvalue = 8; /7 case 0xeb:keyvalue = 10; /8 case 0xdb:keyvalue = 11; /9 case 0xbb:keyvalue = 12; /10 case 0x7b:keyvalue = 13; /11 case 0xe7:keyvalue = 15; /12

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1