基于LPC2124的简易计算器设计_第1页
基于LPC2124的简易计算器设计_第2页
基于LPC2124的简易计算器设计_第3页
基于LPC2124的简易计算器设计_第4页
基于LPC2124的简易计算器设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于lpc2124的计算器设计一、 设计要求(一)总体目标使用飞利浦lpc2124处理器和显示器在proctus环境下设计一个计算器硬件电路,并利用rvds开发工具实现相关软件。(二)基本要求1、电路包括44键盘,能够通过按键编辑数据2、显示部件使用lcd或led,显示内容不少于4个字符3、能够完成1位以上十进制整数的加、减、乘、除功能(三)扩展要求1、能完成2位以上十进制数的加、减、乘、除功能。2、能完成小数的加、减、乘、除功能。3、能够连续进行运算。4、使用lcd进行数据显示。二、 创意扩展功能1.浮点数的加减乘除2三角函数,取sin(),为代表3.清零5对数进行取负4.连续两个运算符用后

2、面一个取代前面一个6.取百分数7.开方5.算式显示三、 设计目标实现上述的计算显示功能,并优化程序使程序结构明了,代码简洁。四、 硬件电路的设计(一) 控制芯片按要求选用飞利浦lpc2124处理器。(二) 由于要进行小数的加减乘除运算再加上清零键已经超出了16个键因此选用proctus自带的23键的键盘,如:图一 键盘。此键盘为计算器功能的扩展提用了充足的案件资源。 注意:键盘默认电平为高电平所以要用高电平扫描。图一 键盘键盘在程序中的的映射: 扫描程序返回值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11 12, 13, 14, 15, 16,1718, 19, 2

3、0, 21, 22, 23 code_keyvalue 'a','7','8','9','*','/', 'b','4','5','6','-','q', '%','1','2','3',' ','s', 'c','0','.','=','

4、+','d'int keyvalue 14, 7, 8, 9, 16, 20, 11, 4, 5, 6, 17, 21, 12, 1, 2, 3, 18, 22, 13, 0, 10, 15, 19, 23(三) 显示部分采用课程中已经调试好的lm032l。lm032l为20*2的液晶显示屏,对于一个简易的计算器的显示部分完全满足要求,而且控制简单。如:图二 液晶图二 液晶(四)总体电路设计:用lpc2124的p0.0到p0.10十一个端口来对lm032l进行控制,其中p0.0到p0.7为数据线,p0.8到p0.10为控制线。用lpc2124的p0.16到p0.25十个

5、端口来控制键盘进行扫描,来实现键盘值的读取,其中p0.16到p0.19送扫描数据,可以确定按下的键在矩阵键盘中的行,p0.20到p0.25读键盘的值来确定按下的键在矩阵键盘中的列。连着结合起来就可以判断出所按下的键的值。总体电路如图三 计算器电路图二 计算器电路五、 软件的设计的设计(一) 键盘扫描程序的设计扫描部分:往四根行线依次送入高电平,从列线读取数据来扫描键盘是否有键按下,并通过送出和读入的端口值来计算出一个返回值,利用这个返回值查表可得出键盘对应的符号和对键盘的指代值。延时去抖:检测到右键按下时,按时10ms,再读键值,如果有键按下,然后等待按键释放之后,对端口值进行分析。键盘扫描程

6、序基本结构,如 图三 键盘扫描程序框图图三 键盘扫描程序框图相关函数:void delay(uint32 dly);/延时函数int keyscan(void); /键盘扫描函数(二) lcd驱动程序的设计 先对控制lcd进行初始化设置。然后通过相应的命令将要显示的字符或字符串送到显示器。 相关函数: void chkbusy(void);/lcd忙检测函数 void wrop(char dat); /对lcd送命令函数 void wrdat(char dat);/ 对lcd送数据函数,显示一个字符 void lcd_init(void); /lcd初始化函数 void distext(cha

7、r addr,char *p);/字符串显示函数(三) 计算程序的设计程序的基本框架如下:图三 计算程序框图图三 计算程序框图程序的基本原理是采用3个字符型的数组来存放三个数据,2个sign空间来放运算符。(1)有一个数据时可以进行单数据运算符的计算,如%、开方等;(2)有两个数据时,此时符号如果为*或/可以开始计算把这两个数计算成一个数储存,有=时都得计算出来;(3)有三个数据时判断两符号的优先级,总可以计算一级是数据变为两数据一运算符,经过第二步后剩下的前面的运算符肯定为-或+因此如果后面一个运算符为+或-时可以将前一运算符算出,如果后面一个运算符为*或/时可以将后一运算符算出。从而可知数

8、据一定在三个以内,运算符一定在两个以内。计算过程如:输入:8*2+6/3+5= 输入过程 计算过程 第一步:8*2+ 16+ 第二步:8*2+6 16+6 第三步:8*2+6/ 16+6/ 第四步:8*2+6/3 16+6/3 第五步:8*2+6/3+ 16+2+ 第六步:8*2+6/3+5 18+5 第七步:8*2+6/3+5= 23相关函数:char *clrarry(char *src);/清空一个数组void strcpyf(char *str1,char *str2);/将一个字符串复制到/另一个字符串中 void ftoa(float n,unsigned char decimal

9、s,char *str)/将浮点数转化为字符串函数void calculate(void);/计算函数六功能说明及实验结果:(一)浮点数的加减乘除 输入:5.2*1.2= 输入:82.54/8.1= 输入:4.23+82.1235= 输入:0.025-1.8=(二)连续运算和优先级 输入:1.2/3.2=+8.2= 输入:8.6*1.2+4=输入:2.3*5+1.2/2-5=(二)开方 取负 百分数输入:12*8.4=q= (键“mrc”用q表示代表开方)输入:45b+5= (键 “+/-”用b表示代表开方)输入:2.3s= (键 “m-”用s表示代表求弧度正弦)输入:3.1415926s=

10、(如图右)输入:485.22%=(四) 连续两个运算符用后面一个取代前面一个输入:4+-*/8= (最后一运算符有效)七、 总结由于以前做过一个计算器,但那时没有自己写程序只是修改被人的程序。虽然如此对计算程序还是有一个大体的了解,因此决定完全不看别人的程序也不查阅书籍就拿几张纸和一笔先规划出程序的框架然后再一步一步实现。其实框架比程序还要麻烦。在程序设计时像三角函数、平方开方等类型都是选取其中一两个作为代表。其他的可以按相同的方式扩展。在此过程中我和我的组员设计了总体的程序结构,开始是用两个数组储存接收到的数据,然后用数据前的字符是不是字符来判断是否一个数据输入完成达到数据个数的管理,在此基础上我们实现了比如:按一下键清除一位输入的数据或字符等功能。后来发现大多计算器的设计没有考虑到优先级,因此经过讨论改为用3个数组来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论