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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

简易计算器课程设计.docx

1、简易计算器课程设计1、封面P12、目录P23、前言P34、关键字P35、原理与总体方案P36、硬件设计P67、调试P108、测试与分析P119、总结P1310、附件P14前言近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程

2、序处理后,或显示在LCD上,或传输到远端PC上。本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。一、摘要:计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算二、原理与总体方案: 主程序在初始化后调用键盘程序,再判

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

4、化:2)仿真设计 仿真电路图: 仿真图形:1.计算加法 2.计算减法(结果为负数) 3.计算减法(结果为正数) 4.计算乘法 5.计算除法 (除法只能进行整除,无小数) 注:本设计不能进行连续运算,只能进行当次运算,且只能进行单行显示。进行除法时会自动取整,无小数。显示器上不会显示加减乘除等运算符号,只有操作数和操作结果。三、硬件设计:器件件数LPC21061个LED1个KEYPAD1个电源若干电源地若干电线若干 3.1元件清单: 注:无实物,以电路设计图为依准。 3.2键盘接口电路: 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大

5、量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2.1所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。图2.1矩阵键盘布局图 电路中采用4*4键盘作为输入电路模块的话,电路连线会比较简单,而且这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。但是在硬件电路设

6、计的过程中,实验室没有提供矩阵键盘,所以我们将4*4的矩阵键盘换成了16个独立按键。采用独立按键的方式的话,会占用大量的I/O 口资源,但是在这种情况下,编程会很简单。矩阵键盘内部电路图如图2.2所示。图2.2 矩阵键盘内部电路图3.3显示模块:本设计采用LCD1液晶显示屏来显示输出数据。通过D0-D7引脚向LCD1写指令字或写数据以使LCD1实现不同的功能或显示相应数据。LCD1管脚图如图2.3所示。图2.3 LCD1管脚图3.4各模块的特性与作用:3.4.1LPC2106的特性及引脚功能:LPC2106 是基于一个支持实时仿真和跟踪的32 位ARM CPU 的微处理器,并带有256kB 嵌

7、入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够最大时钟速率下运行,并具有广泛应用。含向量中断控制器,多个串行接口,两个三十二位定时器,片内晶振的操作频率范围:10MHZ-25MHZ,两个低功耗模式:空闲和掉电.CPU操作电压范围:1.65V-1.95V图2.4 LPC2106管脚图管脚说明:V3、V18:供电电压Vss、DBGSEL:接地XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。P0.0-P0.14作为GPIO接口,P0.15作为EINT2接口。3.4.2 LCD的特性: LCD 显示屏可以采用字符显

8、示,当使用字符显示方式时,可以直接用外码作为输入数据,由显示屏自动给出显示字模数据,而无需由微处理器提供字模。3.4.3 数字式键盘的特性: 数字式键盘的实质仍是行列式键盘,4 根行线和4 根列线通过下拉电阻接地,在其表面贴有标示对应按键的膜,使得易于观察和操作,更加贴近使用者的需求。3.4.4 MM74C922的特性及其引脚功能: MM74C922具有功耗低,电压为3-5V,三态门输出,与LPTTL兼容,输出锁存按下最后的键,用一个电容器就可以消除键盘抖动,两键轮回,行具有上拉功能,具有芯片内或芯片外时钟,最大开关电阻为管脚说明: A-D为行键扫描电平输出端,1-4为列键输入读取端;OSC为

9、振荡器的外接引线端,可用外部的输入脉冲或电容器;OE为数据输出端,低电平有效;DAV为数据输出有效,高电平有效;VCC为电源端,接3-5V;GND为接地端。本设计中选用LPC2106的P0.0P0.10 与LCD 显示屏相连,它们所输出信号控制显示屏上的显示,其中P0.0P0.7 分别接显示屏的D0D7,P0.8P0.10分别接显示屏的RS、RW、E 接口;选用LPC2106的P0.11P0.14 连续4 个IO口与芯片MM74C922和计算器键盘相连,可通过反转法检测到按下按键的键码,再通过查键盘对应的字符编码使LCD 显示,其中AD依次接键盘的4 根行线,14依次接键盘的4 根列线。管脚说

10、明: A-D为行键扫描电平输出端,1-4为列键输入读取端;OSC为振荡器的外接引线端,可用外部的输入脉冲或电容器;OE为数据输出端,低电平有效;DAV为数据输出有效,高电平有效;VCC为电源端,接3-5V;GND为接地端。本设计中选用LPC2106的P0.0P0.10 与LCD 显示屏相连,它们所输出信号控制显示屏上的显示,其中P0.0P0.7 分别接显示屏的D0D7,P0.8P0.10分别接显示屏的RS、RW、E 接口;选用LPC2106的P0.11P0.14 连续4 个IO口与芯片MM74C922和计算器键盘相连,可通过反转法检测到按下按键的键码,再通过查键盘对应的字符编码使LCD 显示,

11、其中AD依次接键盘的4 根行线,14依次接键盘的4 根列线。四、调试: 4.1 GPIO: LPC2000系列ARM的GPIO具有如下特性:a、可以独立控制每个GPIO口的方向(输入/输出模式);b、可以独立设置每个GPIO的输出状态(高/低电平);c、所有GPIO口在复位后默认为输入状态。每个作为GPIO功能的引脚受到四个寄存器控制,分别为控制方向的IOxDIR、控制输出电平状态的IOxSET和IOxCLR、反映引脚电平状态的IOxPIN。这四个寄存器构成一组,而一组寄存器控制着一个端口(P0、P1、P2或P3)。注意事项:引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作

12、的寄存器决定。LPC2000系列ARM大部分的I/O引脚为推挽方式输出,但是具有总线功能的I/O引脚为开漏输出(P0.2/3和P0.11/14)。使用这些开漏输出的引脚作为GPIO功能,并用于高电平输出或者引脚状态输入时,要接上拉电阻才能正常使用。推挽输出的I/O引脚正常拉出/灌入电流均为4mA,短时间极限值为40mA。复位后,大部分引脚默认作为GPIO功能,并且均为输入状态。但是,有部分引脚在复位后默认作为第二功能(如:P0.27P0.30在复位后默认为A/D输入引脚)。4.2硬件和程序原理:在键盘按键后,产生一个中断,mcu对键盘进行扫描,确定按下的键,如果不是等号,就把按下的字符依次存入

13、数组,并在lcd显示表达式,如果是等号,就计算出数组中存入的表达式的值,并显示在lcd中。计算表达式值的方法:把表达式中的表示数值的字符转成数值存入一个数值数组,把表达式中的表示运算符的字符存入运算符数组;关于四则运算优先级算法:依次检索运算符数组,当遇到 * 号 或者 / 号的时候,就先计算乘法或除法,算出结果后存入数值数组相应位置,然后删除此运算符和多余的数值,再重复检索,直到数值数组中只有一个数值为止,这个数值即是运算结果。调用stdio.h库里的sprintf函数,把数值转化成字符数组,然后显示到lcd中。五、测试与分析:5.1 ADS1.2新建工程:5.2 Proteus实时仿真:六

14、、总结:对我们而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。附件:代码:#include config.h#include math.h/宏

15、定义#define LCD_RS 10#define LCD_RW 11#define LCD_E 12#define D7 10; dly-) for(i=0; i500; i+); /* 名 称:Busy()* 功 能:LCD是否忙碌*void Busy() while(1) IOCLR = LCD_RS; IOSET = LCD_RW; if(!(IOPIN&D7) break; /* 名 称:Command()* 功 能:LCD命令*void Command(char com) Busy(); IOCLR = 0x0FFF; IOCLR = LCD_RS; IOCLR = LCD_RW

16、; IOSET = LCD_E; IOSET = com3; IOCLR = LCD_E;/* 名 称:LCDInit()* 功 能:LCD初始化* 入口参数:* 出口参数:无*void LCDInit() Command(0x0C); /显示开/关控制命令 Command(0x38); /功能设置命令:数据线长度为8位 / Command(0x80); /地址命令 Command(0x06); /输入方式设置/* 名 称:write()* 功 能:LCD写数据*void write(char data) Busy(); IOCLR = 0x0FFF; IOSET = LCD_RS; IOCL

17、R = LCD_RW; IOSET = LCD_E; IOSET = data3; DelayNS(1); IOCLR = LCD_E; /* 名 称:display()* 功 能:LCD显示*void display(long a) long temp,b,c=-1; uint8 lenth=1,i,j; / Command(0x01); if(a0;i-) b=1; for(j=0;ji-1;j+) b=b*10; write(0x30+a/b); a=a%b; /为低电平,其他为高电平。 /主函数int main() system_init(); LCDInit(); while(1)

18、ucKeyScan(); return(0);/* 名称:system_init()* 功能:system初始化函数*void system_init() /引脚功能选择 PINSEL0 = 0x80000000; /设置P0.15为EINT2,其余为GPIO PINSEL1 = 0x00000000; /设置P0.15P0.31为GPIO IODIR = 0x0f007ff; /设置P0.0-P0.10,P0.20-P0.23为输出,其余为输入 IOCLR = 0x80000000; /向量中断初始化 VICIntSelect =0x00; /设置P0.15为IRQ中断 VICVectAdd

19、r0 = (uint32)IRQ_EINT2; VICVectCntl0 = 0x30; VICIntEnable = 116; /使能EINT2 /外部中断初始化 EXTMODE = 12; /设置为EINT2下降沿触发 EXTPOLAR = 0; EXTINT = 12; /清除EINT2中断标志/* 名称:ucKeyScan()* 功能:键盘扫描函数当有外部中断2时调用此函数,使用列扫描的方式获取键码,键码由2位数字组成。高位为行号低位为列号。* int ucKeyScan() unsigned int ucTemp=0; /扫描状态暂存。 for(ucLine=0;ucLine24;

20、if(ucTemp!=0x0F) /判断该列是否有按键按下。 continue; /返回按键编码。格式为2位数,高位为列号,低位为行号。/* 名称:IRQ_EINT2()* 功能:EINT2中断服务程序*void _irq IRQ_EINT2(void) unsigned int ucTemp2=0,a; ucTemp2=IOPIN24; switch(ucTemp2) case 0x0E: ucRow=00;break; /判断列号。 case 0x0D: ucRow=10;break; case 0x0B: ucRow=20;break; case 0x07: ucRow=30;break

21、; default: ucRow=40;break; num=ucRow+ucLine;if(repeat=1&num!=23&x!=3) /计算结束后,若输入数字,在输入前清屏 Command(0x01); add1=add2=sign=0; count=0; repeat=0; DelayNS(10); /延时让LCD反应 switch(num) case 00:write(7);k=8;break; case 01:write(4);k=5;break; case 02:write(1);k=2;break; case 03:Command(0x01);k=0;add1=add2=sig

22、n=0;break; case 10:write(8);k=9;break; case 11:write(5);k=6;break; case 12:write(2);k=3;break; case 13:write(0);k=1;break; case 20:write(9);k=10;break; case 21:write(6);k=7;break; case 22:write(3);k=4;break; case 23: if(repeat=0) /是否重复 write(=); count=1; repeat=1; arithmetic(add1,add2); else count=0; break; case 30: if(sign=0) write(/); sign=1; break; case 31: if(sign=0) write(X); sign=2; break; case 32: if(sign=0) write(-); sign=3; break; case 33: if(sign=0) write

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

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