ram嵌入式计算器报告_第1页
ram嵌入式计算器报告_第2页
ram嵌入式计算器报告_第3页
ram嵌入式计算器报告_第4页
ram嵌入式计算器报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、22项目名称课设报告加减乘除计算器设计说明书 12205235 栗晋鹏二零一五年六月二十六日加减乘除计算器目录1. 需求分析21.1编写目的21.2背景21.3要求31.4工作原理32. 概要设计32.1 功能模块图32.2 计算器功能流程图42.3 设计效果图63. 详细设计63.1界面布置及“清零”73.2 捕获键值93.3数据获取和处理113.4运算符的获取和处理123.5 结果运算134. 调试总结184.1 问题调试184.2 心得体会205. 系统实现201. 需求分析1.1编写目的1)掌握ARM9嵌入式系统的程序设计方法;2)理论联系实际,进一步提高软件开发技术;3)培养自己分析

2、问题解决问题的能力;4)提高实践论文撰写能力。1.2背景 随着科技的飞速发展,人类已经进入信息化时代。信息技术发展日新月异,计算机已经进入人们生活的各个领域,在现代生活中不可或缺,大型复杂的计算是人脑所不能胜任的,而且较易出错.因此计算器得到了广泛发展和应用,包括以嵌入式系统设计的计算器,我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。所以,我们想到可不可以用自己的所学为自己设计开发一个属于自己的简单计算器来完成日常生活的

3、需求。1.3要求(1)数字和结果用数码管和LED显示屏显示。 (2)数字、*/、C用4X4键盘实现。 (3)有清零、退格、累加、累乘功能。1.4工作原理本设计利用LED显示屏和4*4矩阵式键盘实现了简易计算器的功能。程序运行后,LED显示屏显示计算器界面,计算时,通过键盘输入需要计算的数字,该数字在显示屏上会有按键提示,当键入等号时,计算结果显示在LED显示屏上。进行第二次运算时,按C键清除键盘结果。当计算出现错误时,无法准确计算。当计算结果超出数码管显示出现溢出时,报警电路也会报警。2. 概要设计2.1 功能模块图计算器系统 LED显示屏的显示键盘的输入结果的显示数据的显示运算符的输入数据的

4、输入2.2 计算器功能流程图开始键值=15键值=140<=键值<=13计算结果存储数据 显示数据结束2.3 设计效果图3. 详细设计3.1界面布置及“清零”case 15:Set_Color(GUI_GREEN); Fill_Rect(0,0,639,479); Set_Color(GUI_WHITE); Fill_Rect(0,0,639,2); Fill_Rect(0,0,2,479); Fill_Rect(0,477,639,479); Fill_Rect(637,0,639,479); Set_Color(GUI_BLUE);Fill_Rect(100,80,430,400

5、);Set_Color(GUI_WHITE);Fill_Rect(120,100,410,130);for(y=0;y<4;y+) for(j=0;j<4;j+) Set_Color(GUI_YELLOW); Fill_Rect(150+60*y),(150+60*j),(200+60*y),(180+60*j); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("1",170,160); Disp_String ("2",230,160); Disp_String

6、 ("3",290,160); Disp_String ("+",350,160); Disp_String ("4",170,220); Disp_String ("5",230,220); Disp_String ("6",290,220); Disp_String ("-",350,220); Disp_String ("7",170,280); Disp_String ("8",230,280); Disp_String (&q

7、uot;9",290,280); Disp_String ("*",350,280); Disp_String ("0",170,340); Disp_String ("C",230,340); Disp_String ("=",290,340); Disp_String ("/",350,340); L=120; z=110;Loop = FALSE;number = 0;send_byte(cmd_reset);send_byte(cmd_reset); t=0;d=0;m=0;n

8、=0;p=0;s=0;break;case 16: if(p!='0'&&L=120) Set_Color(GUI_WHITE);Fill_Rect(120,100,410,130);L=120; /选择0按键 Set_Color(GUI_WHITE); Fill_Rect(150,270,200,300); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("0",170,280); Disp_String ("0",L,110); L=L+10

9、; at=0+'0' t+; s+; do send_byte(0xA1); send_byte(0xC8); send_byte(0); break; while(s<=8);Loop = TRUE;number = 0;break;3.2 捕获键值void Task_1(void *pdata) INT8U err; INT8U *Key_P; INT8U Key_Val; Timer1_Init(); /打开时钟节拍,让操作系统跑起来 OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2(STACKS

10、IZE) - 1, 9); /在任务里创建另一个任务 OSTaskCreate(Task_3, (void *)0, (OS_STK *)&Stack_Task_3(STACKSIZE) - 1, 10); /在任务里创建另一个任务OSTaskCreate(Task_4, (void *)0, (OS_STK *)&Stack_Task_4(STACKSIZE*3) - 1, 56); /在任务里创建另一个任务 for(;) Key_P = OSMboxPend(Key_Mbox, 0, &err); Key_Val = *Key_P; switch(Key_Val)

11、case 0x01 : GUI_StoreKey(1); break; case 0x02 : GUI_StoreKey(2); break; case 0x03 : GUI_StoreKey(3); break; case 0x04: GUI_StoreKey(4); break; case 0x05: GUI_StoreKey(5); break; case 0x06 : GUI_StoreKey(6); break; case 0x07: GUI_StoreKey(7); break; case 0x08: GUI_StoreKey(8); break; case 0x09: GUI_S

12、toreKey(9); break; case 0x0A :/+ GUI_StoreKey(10); break; case 0x0B:/- GUI_StoreKey(11); break; case 0x0C :/* GUI_StoreKey(12); break; case 0x0D :/ / GUI_StoreKey(13); break; case 0x0E :/ = GUI_StoreKey(14); break; case 0x0F :/ C GUI_StoreKey(15); break; case 0x00 :/ 0 GUI_StoreKey(16); break; defau

13、lt: break; 3.3数据获取和处理以1为例:switch (number) case 1: if(p!='0'&&L=120) Set_Color(GUI_WHITE);Fill_Rect(120,100,410,130);L=120; /选择1按键Set_Color(GUI_WHITE); Fill_Rect(150,150,200,180); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("1",170,160); Disp_String ("

14、;1",L,110); L=L+10; at=1+'0' gt=1+'0' t+; s+; do send_byte(0xA1); send_byte(0xC8); send_byte(1); break; while(s<=8);Loop = TRUE;number = 0;break;3.4运算符的获取和处理以+为例:case 10: if(p!='0'&&L=120) Set_Color(GUI_WHITE);Fill_Rect(120,100,410,130);L=120; /选择按键A用作+键 Set_C

15、olor(GUI_WHITE); Fill_Rect(330,150,380,180); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("+",350,160); Disp_String ("+",L,110); L=L+10; at='0' cd='+' symbol=cd; m=atoi(a); Uart_Printf("DEBUG am is %sn", a); Uart_Printf("DEBUG m is

16、 %d", m); send_byte(cmd_reset); write7279(decode1+5,10/16*8); write7279(decode1+4,10& 0x0f); t=0; d=0; s=0; Loop = TRUE; number = 0; break;3.5 结果运算case 14: /选择按键B用作 = 键Set_Color(GUI_WHITE); Fill_Rect(270,330,320,360); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("=&qu

17、ot;,290,340); Disp_String ("=",L,110); L=L+10; at='0' n=atoi(a); Uart_Printf("DEBUG an is %sn", a); Uart_Printf("DEBUG n is %d", n); send_byte(cmd_reset); t=0; switch(symbol) case '+': if(n=0|m=0) m=atoi(b); n=atoi(g); Uart_Printf("DEBUG n is %dn&qu

18、ot;, n); p=m+n; k=p; /计算加法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_String (b,350,110); z=z+20;L=120;Uart_Printf("Z is %dn",z); do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k

19、=k/10; while(k!=0); break; p=m+n; k=p; /计算加法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_String (b,350,110); z=z+20;L=120; do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0)

20、; break; case '-': if(n=0|m=0) n=atoi(g); m=atoi(b); Uart_Printf("DEBUG m result is %dn", m); p=m-n; k=p;/计算减法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG p result is %dn", p); Disp_String (b,350,110); z=z+20;

21、do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break; p=m-n; k=p;/计算减法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_String (b,350,110); z=z+20; do x=k%10; send_byte(0xA0

22、); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break; case '*': if(n=0|m=0) n=atoi(g); m=atoi(b); Uart_Printf("DEBUG result is %dn", m); p=m*n; k=p; /计算乘法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG result

23、 is %dn", p); Disp_String (b,350,110); z=z+20; do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break; p=m*n; k=p; /计算乘法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_

24、String (b,350,110); z=z+20; do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break;case '/':if(n=0|m=0) n=atoi(g); m=atoi(b); Uart_Printf("DEBUG result is %dn", m); p=m/n; k=p; /计算除法 sprintf(b,"%d",p); sprintf(h,"%d",m); sprintf(

25、g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_String (b,350,110); Uart_Printf("Z is %dn",z); z=z+20; do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break; p=m/n; k=p; /计算除法 sprintf(b,"%d",p); sprintf(h,"%d"

26、,m); sprintf(g,"%d",n); Uart_Printf("DEBUG result is %dn", p); Disp_String (b,350,110); Uart_Printf("Z is %dn",z); z=z+20; do x=k%10; send_byte(0xA0); send_byte(0xC8+7); send_byte(x); k=k/10; while(k!=0); break; d=0; Loop = TRUE; number = 0; break; 4. 调试总结4.1 问题调试在完成课程设

27、计的过程中,出现了各种各样的问题,总需要自己去仔细寻找问题并纠正。例如:在一次调试运行中,第一次的计算完成后,以后的计算无论加减乘除运算第二个数据等总是等于第一次计算中的第二个数据,而不会随之改变,因此我们猜测是第二个数据的获取上存在问题,于是我们在数据的获取和处理函数中寻找。switch (number) case 1: if(p!='0'&&L=120) Set_Color(GUI_WHITE);Fill_Rect(120,100,410,130);L=120; /选择1按键Set_Color(GUI_WHITE); Fill_Rect(150,150,200,180); Set_Color(GUI_RED); Set_Font (&GUI_Font8x16); Disp_String ("1",170,160); Disp_String ("1",L,110); L=L+10; at=1+'0' t+; s+; do send_byte(0xA1); send_byte(0xC8); send_byte(1); break; while(s<=8);Loop = TRUE;n

温馨提示

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

评论

0/150

提交评论