任永哲(2009061409)嵌入式系统课程设计报告_第1页
任永哲(2009061409)嵌入式系统课程设计报告_第2页
任永哲(2009061409)嵌入式系统课程设计报告_第3页
任永哲(2009061409)嵌入式系统课程设计报告_第4页
任永哲(2009061409)嵌入式系统课程设计报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计报告基于触摸屏的电子计算器班级:20090614学号:2009061409姓名:任永哲教师评语:教师签名:2012年10月课程设计题目 基于触摸屏的电子计算器主要内容通过键盘与LED实现多位数字的连续四则运算以及平方运算,通过键盘输入数字与运算符号,按回车之后显示LED运算结果。图形界面设计,支持触摸屏实现加减乘除平方等简单功能。采用的工具方法以博创UP-NETARM3000实验台和ADS1.2软件为实验环境,仿真器驱动程序,超级终端通讯程序。ARM 嵌入式开发平台、用于ARM7TDMI的JTAG 仿真器、PC机、串口线, 超级终端。进度安排1. 讨论写出核心计算算法。2. 实现通过键

2、盘输入数字与运算符号,按回车之后在超级终端上显示运算结果。3. 通过LED与键盘实现多位数字的连续四则运算以及平方运算4. 研究触摸屏支持的计算器界面,与实现算法。5. 对功能进行简单的测试并修改bug,优化代码,使系统的功能更为完善。 参考资料基于ARM的嵌入式系统设计实验与实践教程嵌入式系统开发原理与实践基于ARM的嵌入式系统开发与实例ARM3000实验指导书1. 题目基于触摸屏的电子计算器2. 系统简介嵌入式系统的计算器已经受广大人民的欢迎,他越来越多的人提供了便利。本系统使用ADS1.2的开发环境,在UP-net3000实验平台实现其具体功能。嵌入式系统具有便利灵活、性能价格比高、嵌入

3、性强等特点,可以嵌入到现有任何信息家电和工业控制系统中。从软件角度来看,嵌入式系统具有不可修改性、系统所需配置要求较低、系统专业性和实时性较强等特点。很显然本计算器也有如上的几个重要特点。本系统的界面由图形来设计的,是一个基于触摸屏的电子计算器,不仅能实现计算器的简单的加法、减法、除法、乘法、平方法,还能通过触摸屏以及键盘的输入对计算器进行控制。 根据基本的功能可以分为三个重要模块:核心计算模块,输入模块,输出模块。输入模块可以分为两种类型,小键盘输入和触摸屏输入信息(包括符号和数字)。核心计算模块主要负责对输进来的数字的计算,根据小键盘和触摸屏上的符号获得值,再根据这个参数值不同做相应的处理

4、,最终可以实现所述的基本计算功能。输出模块主要由LED数码管和触摸屏LCD来输出结果。不管选择输入模块哪一个方式,在输出模块的两个主要显示方式都会运行,也就是说不仅能在屏幕上显示结果,也能通过LED数码管来显示其结果。3. 系统设计一、系统核心算法本系统是支持小键盘,LED和触摸屏的简单计算器,我做的是小键盘和LED显示的模块。不管是什么模块都要用到核心计算算法,算法的思想为如下:(1)写数字函数。设置一个m_second的参数,每当按下按键或触摸某个数字时会用一个m_second的参数来存值,值到出现符号键为止他会反复做m_second = m_second*10 + 数字这个操作,最后的结

5、果也当然存到m_second这个参数里。(2) 写小数点运算函数:跟数字函数类同,不一样的是多了个小数点运算。用m_coff参数来设定小数点参数。也就是说当点击“.”或小数点触摸屏的时候做如下操作,直到出现符号键为止反复做m_second = m_second + 数字*m_coff和m_coff *= 0.1等操作。(3)把(1)(2)功能用if语句来合并。如果想要输入整数型的数字则做(1)操作,若果要输入浮点型的数字则做(2)操作。(4)写符号函数。设定m_first,m_coff参数,他在一个运算里面始终是加数,相反m_second始终是被加数。每次完成一次运算后默认把最终结果赋值给m_

6、first,这样系统就可以满足有记忆功能的特点。当每次按下符号键或触摸屏上的符号时就会根据不同的符号功能来处理计算:m_first 符号=m_second。加法,减法,乘法,平方法类似。由于除法的特殊性除法要考虑的因素就多了点,如果要被除的数字小于等于0.000001的时候他就显示错误,其余情况正常计算。(5)本系统默认有记忆功能,也就是说计算完一次运算后他还保留原先的值。设m_first值为0,m_second是被计算的值。每次算完一次运算后最终计算得出来的值存到m_first里,并把m_second和m_coff值复位,分别写成初始值0.0和1.0,这样他们才能改变为要写入的数字。(6)当

7、把所述的函数写完后为了方便用switch语句来分辨符号,设置一个m_operator参数,他是switch语句里的表达式,常量表达式当然分为“+”,“-”,“*”,“”,“s”。根据不同的符号进入case,完成具体的计算。void Calculate() switch(m_operator) case '+': m_first +=m_second;break; case '-': m_first -=m_second;break; case '*': m_first *=m_second;break; case '/': if(

8、fabs(m_second)<= 0.000001) m_display = "除数不能为零"return; m_first /=m_second;break;case 's': m_first *=m_first;break; m_second=0.0;m_coff = 1.0; UpdateDisplay(m_first); 根据思想可以设计出如下几个核心函数:计算函数Calculate( ),OnButton0( )到OnButton9( )的数字函数, 平方函数OnButtonSqrt( ), 反函数OnButtonSign( ), 乘法OnB

9、uttonMutiply( ), 减法函数OnButtonMinus( ),加法函数 OnButtonAdd( ), 除法函数OnButtonDiv( ), 清零函数 OnButtonClear( ), 小数点函数OnButtonPoint( )。二、小键盘模块设计Zlg7289芯片驱动17键的键盘,进入keyboard.c可以设置数字按键0到9的值为11,2,10,18,1,9,17,0,8,16。符号键可以设置成“小数点”为19,“+”为24,“-”为21,“*”为20,“%”为12,“=”为26,“清零”为4。首先设一个key值,定义为键盘输入进去的值,key=Zlg7289_ReadK

10、ey( ),进行判断,大体分为两种情况。第一种在小键盘上按下数字键后根据如上设置的数字,不同的值对应不同的显示。伪代码为 if(key=值)Buffer='数字'Uart_Printf("%cn",Buffer);OnButton数字();第二种根据不同的符号按键的出来的key值来进行判断,对应的值对应不同运算结果。伪代码为 if(key=值)Buffer='符号'Uart_Printf("%cn",Buffer);OnButton符号函数();三、LED模块设计 利用键盘驱动函数来实现LED模块设计。从ZLG7298ZL

11、G7289读取键值的方法为如下:开启zlg7298,用zlg7298.h里的zlg7298ENABLE()控制。接下来要发送读取键值命令,运用WriteSDIO(data)函数。向同步串口发送完数据后读取按键值,由ReadSDIO( )函数来实践。从同步串口读取数据后要关闭zlg7298,由zlg7298DISABLE()函数来完成。当判断有键按下后从zlg7298读取键值,按键值有效后通过键盘映射表得到按键值用GetKey( )函数实现基本数字输入,得到按键值。驱动共阴极LED,LED数码管有八位的显示管,使zlg7289占有同步串口后然后从个位数到千万位依次在0到7的数码管上显示。写到每个

12、数码管的读取数字应当为sum/位数%10。当判断有键按下后从zlg7298读取键值,按键值有效后通过键盘映射表得到按键值根据如上思想可以写出函数,为UpdateDisplay(int sum)。四、触摸屏的理解完成以上的三个主要模块后对触摸屏进行研究,由于分工明确,这部分的内容只是后来两个大模块加在一起后对系统进行优化和修改的时候所理解的。该系统是在基于ucos-ii系统内核的基础上完成电子计算器的开发,因此首先要编写一个电子计算器的任务,定义获取触摸位置的结构体和结构体指针,接着用strChar2Unicode(Num_Button_0_Caption_16, Num_Button_0_Ca

13、ption_8)函数来将字符型转换为unicode型的字符,定义按钮的坐标位置,CreateButton函数来创建一个按钮控件并用DrawButton函数来在LCD屏幕上画出按钮。当发生触摸动作时,系统首先进行获取坐标值的操作,接下来通过函数IsInRect2( )判断触摸的坐标在哪一个按钮区域内。调用函数OnButton0()来响应这次操作。4. 系统实现一、核心算法的实现:通过各种符号来实现对应的计算,计算函数实现完后开始写实现数字的函数:数字项: void OnButton数字() If( m_coff = 1.0) m_second = m_second*10 + 数字; else m

14、_second = m_second + 数字*m_coff; m_coff *= 0.1; UpdateDisplay(m_second);平方函数 void OnButtonSqrt() m_second = sqrt(m_second);加法函数 void OnButtonAdd() Calculate(); m_operator='+'减法,乘法,除法的实现方法类似于加法的函数,把m_operator='符号'代码行的符号改成对应的减法,乘法,除法就可以实现。清空函数 void OnButtonClear() m_first=0.0; m_second=

15、0.0; m_operator = '+' m_coff = 1.0;运算浮点运算 void OnButtonPoint() m_coff= 0.1 ;完成系统设计后根据思想写代码,系统小键盘和LED模块的设计流程图具体为如下:图1 系统流程图二、LED模块实现根据上面所设计到的思想,写出函数。由于数码管上显示的是字符型,必须得把得出来的值强行转换成字符型。每次写入一个数据后要有一定时间的延时。具体的代码如下:void UpdateDisplay(int sum) /LED数字显示 ZLG7289_ENABLE();Delay(5);WriteSDIO(ZLG7289_CMD_

16、DATA0|0);/数码管以方式0译码,第一个数码管亮WriteSDIO(sum%10);/显示个位Delay(1);/延时 /键值大于9显示10位WriteSDIO(ZLG7289_CMD_DATA0|1);/发送十位数据WriteSDIO(unsigned char)(sum/10%10);Delay(1); WriteSDIO(ZLG7289_CMD_DATA0|2);/发送百位数据 WriteSDIO(unsigned char)(sum/100%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|3);/发送千位数据WriteSDIO(unsigned

17、char)(sum/1000%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|4);/发送万位数据WriteSDIO(unsigned char)(sum/10000%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|5);/发送十万位数据WriteSDIO(unsigned char)(sum/100000%10);Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|6);/发送百万位数据WriteSDIO(unsigned char)(sum/1000000%10);Delay(1);WriteSDIO

18、(ZLG7289_CMD_DATA0|7);/发送千万位数据WriteSDIO(unsigned char)(sum/10000000%10);Delay(1);WriteSDIO(ZLG7289_CMD_HIDE);/使一、二两位数码管显示ZLG7289_DISABLE();/zlg7289放弃同步串口控制权Delay(5000);三、小键盘模块实现小键盘输入:定义一个pMsg并赋值WaitMessage(0),pMsg->Message可以分为触摸屏的OSM_TOUCH_SCREEN参数和小键盘的OSM_KEY参数。根据上面的设计可以写出死循环的由switch语句来判断所选方式并实现

19、小键盘的函数。第一种在小键盘上按下数字键后根据如上设置的数字,不同的值对应不同的显示。例如我选的数字为“0”的时候,他会进入OnButton0( )函数来获取并在电脑上显示0这个数字;第二种根据不同的符号按键的出来的key值来进行判断,对应的值对应不同运算结果。例如选一个符号“+”的时候,进入OnButtonAdd( )函数来做加法计算,当完成被计算的数字键被按操作后按下“=”符号就会完成加法计算并显示在超级终端上。根据以上分析可以写代码,具体代码为如下:Zlg7289_Reset();for(;) char Buffer;pMsg=WaitMessage(0); switch(pMsg-&g

20、t;Message) case OSM_KEY: key=Zlg7289_ReadKey();key=11的时候按下的数字键是0 if(key=11) Buffer='0'Uart_Printf("%cn",Buffer);OnButton0();如同上述,根据key值可以判断1到9的数字键。else if(key=2) Buffer='1'Uart_Printf("%cn",Buffer);OnButton1();else if(key=10) Buffer='2'Uart_Printf("%c

21、n",Buffer);OnButton2();else if(key=18) Buffer='3'Uart_Printf("%cn",Buffer);OnButton3();else if(key=1) Buffer='4'Uart_Printf("%cn",Buffer);OnButton4();else if(key=9) Buffer='5'Uart_Printf("%cn",Buffer);OnButton5();else if(key=0) Buffer='7

22、'Uart_Printf("%cn",Buffer);OnButton7();else if(key=8) Buffer='8' Uart_Printf("%cn",Buffer); OnButton8();else if(key=16) Buffer='9'Uart_Printf("%cn",Buffer);OnButton9();key=19的时候按下的符号键是“.”else if(key=19) Buffer='.'Uart_Printf("%cn",B

23、uffer);OnButtonPoint();key=24的时候按下的符号键是“+”else if(key=24) Buffer='+'Uart_Printf("%cn",Buffer);OnButtonAdd();key=21的时候按下的符号键是“”else if(key=21) Buffer='-'Uart_Printf("%cn",Buffer);OnButtonMinus();key=20的时候按下的符号键是“*”else if(key=20) Buffer='*'Uart_Printf("

24、;%cn",Buffer);OnButtonMutiply();key=12的时候按下的符号键是“”else if(key=12) Buffer='/'Uart_Printf("%cn",Buffer);OnButtonDiv();key=26的时候按下的符号键是“=”else if(key=26) Buffer='='Uart_Printf("%cn",Buffer);OnButtonEqual();key=4时符号键是“number lock” ,清零键在本系统默认为“number lock”else if(key=4) Buff

温馨提示

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

评论

0/150

提交评论