基于ARM的计算器系统设计嵌入式系统开发课程设计_第1页
基于ARM的计算器系统设计嵌入式系统开发课程设计_第2页
基于ARM的计算器系统设计嵌入式系统开发课程设计_第3页
基于ARM的计算器系统设计嵌入式系统开发课程设计_第4页
基于ARM的计算器系统设计嵌入式系统开发课程设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式系统开发课程设计目录1 目的及意义- 3 -2 系统的基本原理及设计思想- 3 -2.1 基本原理- 3 -2.2 设计思想- 5 -3 核心程序设计- 7 -3.1 程序流程图- 7 -3.2 源代码- 8 -4 结果及分析- 14 -5 总结- 15 -参 考 文 献- 15 -1 目的及意义l 学习键盘接口的原理l 掌握通过输入输出端口扩展键盘的方法l 编写矩阵键盘的扫描程序,并将按键键值在数码管中显示,实现简单计算器的功能2 实验要求基于jxarm9-2410实验箱实现计算机器,要求可实现带括号以及优先级的计算器。可运算加减乘除等基本运算。3 系统的基本原理及设计思想3.1 基本

2、原理l 键盘原理jxarm9-2410教学实验系统的键盘电路由一块74hc273锁存器和74lvch244缓冲器完成键盘识别。在没有按键的情况下,row0-row3通过上拉来保持高电平。检测时通过将col0-col3中的某一列输入低电平,如果该列没有键按下时,通过74lvch244读取到的行值应该为高电平,如果该列某行位置有键按下,那么该行读到的值应为低电平。因此,采用轮询方式检测键盘的方法为:循环往各列输入低电平,然后读取行值,如果为高电平,则判断下一列,否则,该行有键按下,此时已经读取到了该键的行值和列值,然后根据行值和列值得到键码。l led原理jxarm9-2410拥有六位7段共阳数码

3、管。要在某位数码管上显示一个段码表中的字符,需要使用地址空间0x10000006选择位码,并将待显示的数据存储在地址空间0x10000004中。jxarm9-2410教学实验系统段码表字符01234567段码0xc00xf90xa40xb00x990x920x820xf8字符89abcdef段码0x800x900x880x830xc60xa10x860x8ejxarm9-2410教学实验系统位码表位数123456位码0x3e0x3d0x3b0x370x2f0x1fjxarm9-2410教学实验系统地址空间分配地址空间说明数据宽度读/写(属性)0x10000004数码管数据寄存器8位w0x100

4、00006数码管扫描控制寄存器8位wl 计算原理定义一个操作数栈opnd,一个操作符栈optr 。思想是:置操作数栈为空,操作符栈压入元素#(它具有最高优先级),依次读入表达式中的每个字符ch,如果ch是操作数,则ch压入操作数栈,如果ch是操作符,那么将ch和操作符栈顶元素进行优先级比较(如优先级高于)。如果优先级大于当前栈顶元素,那么将其压栈,如果其优先级小于当前栈顶元素,那么执行op=optr.pop();(取当前栈顶操作符),a=opnd.pop()(取当前栈顶操作数存入临时变量a);b=opnd.pop()(取当前栈顶操作数存入临时变量b);c=计算(a op b); opnd.pu

5、sh(c);如果优先级相等,则当前操作符出栈。重复上述操作直到表达式处理完毕。最后操作数栈剩余的操作数就是计算的最终结果。3.2 设计思想l 系统结构框图小键盘模块处理模块显示模块键盘键值待显示数值l 系统设计思想小键盘模块:计算器的输入部分,用于得到用户输入的待的表达式,该模块调用系统提供的key_getkeypoll();函数,得到当前采集到的键值的ascii码。并将ascii码传递到处理模块。处理模块:计算器的核心部分,该模块接收小键盘模块传递的ascii码值,进行处理,将待显示数值的段码和位码传递到显示模块。显示模块:计算器的显示部分,用于显示计算机的中间数据和最终结果,该模块接收处理

6、模块待显示的数据,将有效数据显示在led上。完成计算机器的功能。l 设计方案小键盘模块和显示模块采用上述方法,处理模块采用上述双栈结构的表达式计算器思想。l 备选方案方案一:小键盘模块和显示模块采用上述方法,处理模块采用单栈结构的逆波兰式算法。方案二:小键盘模块和显示模块采用上述方法,处理模块采用运算符号触发。l 用户说明计算器键盘说明:123+456789ce0()=系统采用jxarm9-2410教学实验箱提供的44键盘,布局如左图,由于数量限制,故只能进行加法和乘法两种运算。计算器led显示部分说明:系统采用jxarm9-2410教学实验箱提供的6位7段数码管,布局如上图,计算时可显示99

7、9999999999之间的任何数。4 核心程序设计4.1 程序流程图num = (num*10)+(ch-0);开始nnnnnnnyyyyyy调用ch=key_getkeypoll()函数ch=0&ch=0&ch=65&ch999999)for(i=0;i=5;i+)*(u8*) 0x10000006) = seg1;*(u8*) 0x10000004) = seg7table14;delay(delaytime);*(u8*) 0x10000006) = seg0;*(u8*) 0x10000004) = seg7table14;delay(delaytime);else for(i=0;i

8、=5;i+) flag=0;if(cur=(num/100000)%10)flag=1;*(u8*) 0x10000006) = seg5;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/10000)%10) | flag)flag=1;*(u8*) 0x10000006) = seg4;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/1000)%10) | flag)flag=1;*(u8*) 0x10000006) = seg3;*(u

9、8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/100)%10) | flag)flag=1;*(u8*) 0x10000006) = seg2;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/10)%10) | flag)flag=1;*(u8*) 0x10000006) = seg1;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);*(u8*) 0x10000006) = seg0;*(u

10、8*) 0x10000004) = seg7tablenum%10;delay(delaytime);/*-栈处理-*/void push(int * stack,int * top,int val)if(stack=num)printf(push val %dn,val);else printf(push sym %cn,val);if(*top = stack_size) return;stack(*top)+ = val;int pop(int * stack,int * top)if(*top=0)return -1;return stack-(*top);5 结果及分析l 实验结果小

11、键盘输入:7+8*6led依次显示:7,8,6,55小键盘输入:(7+8)*6led依次显示:7,8,6,90l 实验结果分析由实验结果可看出,本次系统可以完成简单计算器的功能,可识别乘法优先,并可以对括号进行配对和优先操作。能正确显示结果,以及中间输入过程。6 总结本次的嵌入式课程设计我们小组的题目是简单计算器,系统主要分为处理模块(主模块),led模块(显示模块),小键盘(输入模块),我们小组根据成员的自身能力情况分工,除三个模块外,另有一人负责容错处理和资料整理等一些事项。从抽取题目到课程设计验收完毕,我们小组一直共同进退,一起分析问题,解决问题,当前,在课程设计中遇到不少的困难,这些困难我们都通过老师指点,共同讨论或查阅资料一一解决,在验收通过后,我们感觉到,这些课

温馨提示

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

评论

0/150

提交评论