嵌入式计算器.doc

上传人:yyf 文档编号:8664005 上传时间:2020-12-16 格式:DOC 页数:22 大小:433KB
返回 下载 相关 举报
嵌入式计算器.doc_第1页
第1页 / 共22页
嵌入式计算器.doc_第2页
第2页 / 共22页
嵌入式计算器.doc_第3页
第3页 / 共22页
嵌入式计算器.doc_第4页
第4页 / 共22页
嵌入式计算器.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《嵌入式计算器.doc》由会员分享,可在线阅读,更多相关《嵌入式计算器.doc(22页珍藏版)》请在三一文库上搜索。

1、.xxxxx学院课程结业论文论文题目: 简易计算器设计论文 姓 名: xxx 所在院系: xxxxxxxxx 班 级: xxxx 学 号: xxx 指导教师: xxx xxxxx二一七年五月精品.摘要随着电子科技技术的不断发展在当今社会计算器已深入人们生活中给人们的生活带来了方便推动了社会的发展。 我们主要制作通过采用ARM中的LPC2103芯片为主控单元设计一个能够实现整数的加、减、乘、除基本计算功能的简易计算器。而且要通过 4*4 矩阵键盘输入数值和计算符号来进行运算利用八位数码管进行动态显示。 关键词ARM LPC2103 4*4 键盘 计算器:加、减、乘、除 数码管动态显示精品. 目录

2、一、引言2二、原理与总体方案32.1 系统整体流程图42.2 程序运行流程图52.3 仿真电路图设计62.4加法仿真62.5 减法仿真72.6乘法仿真72.7除法仿真8三、硬件设计83.1元件清单83.2 键盘接口电路93.3显示模块:103.4各模块的特性与作用113.4.1 LPC2103的特性及引脚功能113.4.2 数字式键盘的特性123.4.3 MM74C922的特性及其引脚功能:12四、部分模块程序124.1 LED显示模块124.2矩阵模块134.3算术运算模块14五、心得体会16六、致谢16七、参考文献17精品.一、引言LPC2000系列基于一个支持实时仿真的ARM7TDMI-

3、S CPU,并带有8kB 和32kB 嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最 大时钟速率下运行。这可以使得中断服务程序和DSP 算法中重要功能的性能较Thumb 模式 提高30。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2000 非常小的尺寸和极低的功耗,它们非常适合于那些将小型化作 为主要要求的应用,多个UART、SPI 到SSP 总线组成的混合串行通信接口和片内2kB/4kB/8kB 的SRAM 一起作用,可使得LPC2101/2102/2103 非常适合用来实现通信网

4、 关和协议转换器、数学协处理器以及足够大空间的缓冲区的强大处理功能。而多个32 16位的定时器、一个经改良后的10 位ADC、PWM特性(通过所有定时器上的一个输出匹 配来实现)和 32 个快速 GPIO(含有多达 个边沿或电平有效的外部中断管脚)使它们特别适用于工业控制和医疗系统。近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在 LED 上,或传输到远端 PC 上。本次通过LPC2103 芯片完成的简易计算器,目的是彻底理解和掌握LPC2103和C语言的汇编及仿真软件Proteus的使

5、用。精品.二、原理与总体方案 主程序在初始化后调用键盘程序,再判断返回的值。若为数字09,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字09和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。电路设计与原理:通过LPC2103芯片进行相应的设置来控制LED显示器。而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而让

6、ARM芯片接收。2.1 系统整体流程图精品.2.2 程序运行流程图精品.2.3 仿真电路图设计2.4加法仿真 2+3=5精品.2.5 减法仿真 9-6=32.6乘法仿真 4*6=24精品.2.7除法仿真 56/8=7三、硬件设计3.1元件清单器件件数LPC21031个七段数码管1个KEYPAD1个74HC5952个电阻/电容若干晶振若干电源若干电源地若干电线若干精品.3.2 键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O

7、线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图3-1所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。图3-1 矩阵键盘布局图电路中采用4*4键盘作为输入电路模块的话,电路连线会比较简单,而且这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。但是在硬件电路设计的过程中,实验室没有提供矩阵键盘,所以我们将4*4的矩阵键盘换成了16个独立按键。采用独立按键的方式

8、的话,会占用大量的I/O 口资源,但是在这种情况下,编程会很简单。精品.图3-2 矩阵键盘内部电路图3.3显示模块:本设计采用共阳极的七段数码管LED1显示输出数据。通过D0-D7引脚向LED1写指令字或写数据以使LED1实现不同的功能或显示相应数据。LED1管脚图如图3-3所示。图3-3 LED1管脚图精品.3.4各模块的特性与作用 3.4.1 LPC2103的特性及引脚功能LPC2013系列基于一个支持实时仿真的ARM7TDMI-S CPU,并带有8kB 和32kB 嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行,并具有广泛应

9、用。含向量中断控制器,多个串行接口,两个三十二位定时器,片内晶振的操作频率范围:10MHZ-25MHZ,两个低功耗模式:空闲和掉电.CPU操作电压范围:1.65V-1.95V图3-4 LPC2103管脚图精品.管脚说明:V3、V18:供电电压Vss、DBGSEL:接地XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。P0.0-P0.14作为GPIO接口,P0.15作为EINT2接口。3.4.2 数字式键盘的特性 数字式键盘的实质仍是行列式键盘,4 根行线和4 根列线通过下拉电阻接地,在其表面贴有标示对应按键的膜,使得易于观察和操作,更加贴近使用者的需

10、求。3.4.3 MM74C922的特性及其引脚功能: MM74C922具有功耗低,电压为3-5V,三态门输出,与LPTTL兼容,输出锁存按下最后的键,用一个电容器就可以消除键盘抖动,两键轮回,行具有上拉功能,具有芯片内或芯片外时钟,最大开关电阻为管脚说明: A-D为行键扫描电平输出端,1-4为列键输入读取端;OSC为振荡器的外接引线端,可用外部的输入脉冲或电容器;OE为数据输出端,低电平有效;DAV为数据输出有效,高电平有效;VCC为电源端,接3-5V;GND为接地端。四、部分模块程序4.1 LED显示模块void Hc595_SendBits(unsigned int bits)int i;

11、IO0CLR = HC595_CS;for(i = 0; i 12; +i)精品.IO0CLR = HC595_CLK;if(bits & 0x80000000)IO0SET = HC595_DATA;elseIO0CLR = HC595_DATA;bits = 1;IO0SET = HC595_CLK;IO0SET = HC595_CS;void Show(int x) Static unsigned cha rzk=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18; /共阳型段码unsigned int i, t, bit;for(i =

12、0; i 4; +i)t = x % 10;bit = 0x8 32 - 4 - i | zkt 32 - 12; /bits高4位形成位码, 接下来的8位段码Hc595_SendBits(bit);x /= 10;Sleep();if(x = 0) break;4.2矩阵模块void KeyScan()int i=0,a=0;for(i=0;i=3;i+)精品.switch(i)case 0:IO0SET=c4;IO0CLR=c5|c6|c7;break;case 1:IO0SET=c5;IO0CLR=c4|c6|c7;break;case 2:IO0SET=c6;IO0CLR=c4|c5|

13、c7;break;case 3:IO0SET=c7;IO0CLR=c4|c5|c6;break;if(IO0PIN&c0)a=i+1;break;if(IO0PIN&c1)a=i+5;break;if(IO0PIN&c2)a=i+9;break;if(IO0PIN&c3)a=i+13;break;4.3算术运算模块while(IO0PIN&c0|IO0PIN&c1|IO0PIN&c2|IO0PIN&c3);switch(a)case 1:x=10*x+7;value=x;break;case 2:x=10*x+8;value=x;break;case 3:x=10*x+9;value=x;br

14、eak;case 4:y=x,b=a,x=0;break;精品.case 5:x=10*x+4;value=x;break;case 6:x=10*x+5;value=x;break;case 7:x=10*x+6;value=x;break;case 8:y=x,b=a,x=0;break;case 9:x=10*x+1;value=x;break;case 10:x=10*x+2;value=x;break;case 11:x=10*x+3;value=x;break;case 12:y=x,b=a,x=0;break;case 13:value=0;y=0;x=0;b=0;break;

15、case 14:x=10*x+0;value=x;break;case 15:switch(b)case 16:y+=x; break;case 12:y-=x; break;case 8:y*=x; break;case 4:y/=x; break;value=y,x=y;break;case 16: y=x,b=a,x=0;break;精品.正确图纸可以仿真程序完整程序#include #define HC595_CS (1 10)#define HC595_DATA (1 9)#define HC595_CLK (1 8)#define c0 10#define c1 11#define

16、 c2 12#define c3 13#define c4 14#define c5 15#define c6 16#define c7 17int count=0,export=0,x=0,b=0; void Sleep()unsigned int i;for (i = 0; i 2000; i+); void Hc595_SendBits(unsigned int bits)int i;精品.IO0CLR = HC595_CS;for(i = 0; i 12; +i)IO0CLR = HC595_CLK;if(bits & 0x80000000)IO0SET = HC595_DATA;el

17、seIO0CLR = HC595_DATA;bits = 1;IO0SET = HC595_CLK;IO0SET = HC595_CS;void Show(int x) static unsigned char zk=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18; /共阳型段码unsigned int i, t, bit;for(i = 0; i 4; +i)t = x % 10;bit = 0x8 32 - 4 - i | zkt 32 - 12; /bits高4位形成位码, 接下来的8位段码Hc595_SendBits(bit);x /

18、= 10;Sleep();if(x = 0) break;void computer()int i=0,a=0;for(i=0;i=3;i+)switch(i)case 0:IO0SET=c4;IO0CLR=c5|c6|c7;break;case 1:IO0SET=c5;IO0CLR=c4|c6|c7;break;case 2:IO0SET=c6;IO0CLR=c4|c5|c7;break;case 3:IO0SET=c7;IO0CLR=c4|c5|c6;break;精品.if(IO0PIN&c0)a=i+1;break;if(IO0PIN&c1)a=i+5;break;if(IO0PIN&c

19、2)a=i+9;break;if(IO0PIN&c3)a=i+13;break;while(IO0PIN&c0|IO0PIN&c1|IO0PIN&c2|IO0PIN&c3);switch(a)case 1:x=10*x+0;export=x;break;case 2:x=10*x+1;export=x;break;case 3:x=10*x+2;export=x;break;case 4:x=10*x+3;export=x;break;case 5:x=10*x+4;export=x;break;case 6:x=10*x+5;export=x;break;case 7:x=10*x+6;ex

20、port=x;break;case 8:x=10*x+7;export=x;break;case 9:x=10*x+8;export=x;break;case 10:x=10*x+9;export=x;break;case 11:switch(b)case 0:count=x; break;case 1:count=count+x; break;case 2:count=count-x; break;case 3:count=count*x; break;case 4:count=count/x; break;default :break;b=1;x=0;break;case 12:switc

21、h(b)case 0:count=x; break;case 1:count=count+x; break;case 2:count=count-x; break;case 3:count=count*x; break;case 4:count=count/x; break;default :break;b=2;x=0;break;case 13:switch(b)case 0:count=x; break;case 1:count=count+x; break;精品.case 2:count=count-x; break;case 3:count=count*x; break;case 4:

22、count=count/x; break;default :break;b=3;x=0;break;case 14:switch(b)case 0:count=x; break;case 1:count=count+x; break;case 2:count=count-x; break;case 3:count=count*x; break;case 4:count=count/x; break;default :break;b=4;x=0;break;case 15:switch(b)case 0:count=x; break;case 1:count=count+x; break;cas

23、e 2:count=count-x; break;case 3:count=count*x; break;case 4:count=count/x; break;default :break;export=count;x=0;b=0;break;case 16:export=0;count=0;x=0;b=0;break;default :break;int main()PINSEL0=0x00;IO0DIR=IO0DIR|0xff0;while(1)computer();Show(export);精品.五、心得体会 我选的题目是基于LPC2103设计一个简易的计算器要求是通过 4*4 矩阵键

24、盘输入八位数码管动态显示能实现加、减、乘、除等基本运算功能我我基本完成了设计要求的基本功能并实现了扩展部分的连续运算功能。我收获很大积累了许多经验和知识。本次实训共分为三步即通过网络、相关书籍等各种途径查找资料电路板的设计和程序的编写调试三部分。首先实训的第一步就是查找相关资料做好设计制作前的准备。在这个过程中我深刻地领悟到查找资料是一个大学生获取知识拓宽知识面最重要的一坏。 通过查找资料我们可以学到许多课本上所没有的这也是锻炼一个大学生自学能力的关键。在此期间我查找了不少有关嵌入式的书籍学到了许多有关嵌入式的知识。同时也了解到嵌入式芯片广泛应用于工业控制和电子产业中所以学好嵌入式知识对我们来

25、说是很重要的。通过上网搜索找到了对设计有帮助的资料。在网络上我找到了许多有关基于嵌入式LPC21xx的简易计算器的设计资料虽然没找到与我的设计要求完全符合的资料但通过对相关资料的学习和分析基本明确了计算器的设计思路为下一步原理图的绘制和程序的编写做好了准备,因此网络也是我们获得知识的一个途径。虽然这次设计有一定的难度让我有了充分锻炼自己地机会。最重要的是要自己亲自动若一味地照搬或抄袭他人的作品不加思考领会那也就达不到锻炼自己的目的。我们可以参考他人的制作成功资料但要去领悟并加以改进创新制作出属于自己的作品。制作过程中遇到的问题要深入的思考加以解决。通过这次设计嵌入式计算器提高了对lpc2103

26、的应用能力通过自己动手写程序提高了自己运用 C 语言编写程序的能力。总之这次实训锻炼了我们的动手能力将理论运用到实践中。同时让我深深地感受到理论和实践是有差距的只有将理论运用到实践中才能检验其是否正确并将理论知识加以巩固和理解。同学的鼓励和支持下我顺利地完成了这次设计。精品.六、致谢非常感谢老师对我们的悉心教导为我们讲解知识和写程序应该注意的事项。同时也非常感谢我们班的同学在我不理解的时候给我耐心的讲解和建议。七、参考文献 1、ARM嵌入式系统开发-软件设计与优化,Andrew N.Sloss,沈建华(译),北京航空航天大学出版社,2005; 2、ARM体系结构与编程,杜春雷,清华大学出版社,2007;3、周立功. ARM嵌入式系统基础教程M. 北京航空航天大学出版社,2005;4、LPC2102/03/04使用指南. 广州周立功单片机发展有限公司,2005;5、嵌入式原理及接口技术:递阶学习之LPC2103/张开生,程红英,翟岁兵主编,北京航空航天大学出版社,2015; 如有侵权请联系告知删除,感谢你们的配合!精品

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1