嵌入式--计算器--实验报告

合集下载

嵌入式实验报告二(精选合集)

嵌入式实验报告二(精选合集)

嵌入式实验报告二(精选合集)第一篇:嵌入式实验报告二嵌入式实验报告二二实验时间2013/6/9报告人一、实验目的:1.学习cygwin;2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式Linux 的工具链,掌握基于 Linux 的 C 程序设计。

二、实验要求:1.安装 cygwin;2.学习 GCC 的使用和 Makefile 的编写。

3.编程实现文件拷贝功能。

三、问题:1.简述 Gcc 的常用选项并举例说明。

Gcc 基本使用格式:$ gcc[ 选项 ]<文件名> 命令行中 gcc 表示我们是用 gcc 来编译我们的源程序,[选项]表示我们要求编译器给我们输出的文件为何种类型,相当于一种约束。

常见选项:-o ::将源文件经过gcc 处理过的结果输出,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。

比如:gcc hello.c –o hello 把源文件 hello.c 经 gcc 编译后生成可执行的文件输出为 hello-E ::只激活源程序的预处理,这个不生成文件,你需要把它重新定向到一个输出文件里面。

比如:gcc –E hello.c –o hello.i 把源文件 hello.c 经gcc 预处理后的文件输出为 hello.i。

-c ::只激活源程序的预处理,编译,和汇编,也就是他只把程序生成 obj 文件。

比如:gcc –c hello.c –o hello.o 把源文件 hello.c 经 gcc 预处理,编译,和汇编后的文件输出为 hello.o。

-S ::只激活源程序的预处理和编译,就是指把文件编译成为汇编代码。

比如:gcc –S hello.c –o hello.s 把源文件 hello.c 经 gcc 预处理,编译后的文件输出为 hello.s。

-g ::表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。

嵌入式实验报告-简易计算器

嵌入式实验报告-简易计算器

一目的及要求1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器。

2实验要求(1)数字和结果用数码管显示。

(2)数字、+-*/、=、C用4X4键盘实现。

(3)计算结果正确,有出错提示。

二实验原理框图基本工作原理:本设计利用数码管和4*4矩阵式键盘实现了简易计算器的功能。

接通电源,数码管显示全0。

计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。

进行第二次运算时,按C键清除键盘结果。

当计算出现错误时,LED灯亮报警。

当计算结果超出数码管显示出现溢出时,报警电路也会报警。

报警输出为--。

四系统软件设计1.数据输入模块原理:通过4*4矩阵模块输入数字,在数码管上显示出来。

2.运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。

3.输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。

当输出结果溢出是LED亮四次,同时数码管显示都为--。

五实验调试首先按清零键清零。

然后进行调试。

输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88。

若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警,同时数码管显示都为--。

如输入999999加上2 ,结果就溢出,LED灯亮四次报警。

六程序#include "LPC2468.h" /* LPC24xx definitions */ #include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h"extern BYTE seg_buf[50]; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];unsigned long Num1 =0;/*第一个输入的数字*/unsigned long Num2 =0;/*第二个输入的数字*/unsigned long Num3 =0;/*第二个输入的数字*/extern BYTE KEY; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6enum {Add =1,Dec,Mut,Div,nofuntion}funtion;/******************************************************************** *********** Main Function main()********************************************************************* *********/int main (void){unsigned char counter = 0; /*计算输入的数字的个数,超过6个则报警,运算结果超过6位数也报警*/unsigned char cal_allow = 1; /*允许输入数字标志*/unsigned char input_allow = 1;/*允许输入数字标志*/unsigned char funtion_type = 0;/*运算功能*/unsigned char Ne_num = 0;/*负数标志*/DWORD value=0,i=0;TargetResetInit();enable_timer(1);SPI_Init(8); // SPI总线速率为28.8/8 = 3.6 MHz Seg_Init(); // 数码管初始化LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1;funtion_type = nofuntion;while ( 1 ){value = KEY;/*输入数字*/if(value>0 && value<11){if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){seg_buf[counter+1-i] = seg_buf[counter-i]; }seg_buf[1] = value-1;}counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/*如果是“C”键,则清除显示,清除计算标志*/if(value == 11){for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/*负数标志*/funtion_type = nofuntion;}/*如果是“+”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Add;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/}/*如果是“-”键,则显示结果*/if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Dec;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“X”键,则显示结果*/if(value == 15 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“/”键,则显示结果*/if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“=”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/*拷贝第二次输入的数字*/}/*把输入的数字串1合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+seg_copy1[4]*1000 +seg_copy1[3]*100+seg_copy1[2]*10 +seg_copy1[1];/*把输入的数字串2合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+seg_copy2[4]*1000 +seg_copy2[3]*100+seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:{Num1 = Num1+Num2;/*计算结果存在Num1中*/break;}case Dec:{if(Num1==Num2) Num1 = 0;else if(Num1>Num2){Num3 = Num1-Num2;/*计算结果存在Num1中*/ Num1 = Num3;}else if(Num2 > Num1){Num3 = Num2-Num1;Ne_num =1;Num1 = Num3;}break;}case Mut:{Num3 = Num1*Num2;/*计算结果存在Num1中*/ Num1 = Num3;break;}case Div:{if(Num1>=Num2&&Num2!=0){Num3 = Num1/Num2;/*计算结果存在Num1中*/}Num1 = Num3;break;}default:break;}/*显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/*显示横杠表示计算溢出错误!*/}for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/*显示负号*/}}}delayMs(1,200);}}/******************************************************************** *********** End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图二图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告引言嵌入式系统作为一种广泛应用于各行各业的计算机系统,其本身具有一定的难度与挑战。

本实验报告将围绕嵌入式系统的设计、开发以及应用展开讨论,旨在总结并分享在实验中所获得的经验与知识。

一. 实验背景嵌入式系统是指以特定功能为目标的计算机系统,其设计与开发过程相较于传统的计算机系统更为复杂和精细。

本次实验的主要目标是通过设计一个基于嵌入式系统的智能家居控制器,来探索嵌入式系统的应用与实践。

二. 实验内容2.1 硬件设计嵌入式系统的硬件设计是整个实验的基础,其合理性与稳定性直接影响系统的性能和可靠性。

在本次实验中,我们选择了一块主频为xx的处理器作为核心,配备了丰富的外设接口,如GPIO、串口等。

我们还为系统增加了一块液晶显示屏和一组按键,以实现简单的用户交互。

2.2 软件开发在硬件设计完成后,我们开始进行软件开发。

首先,我们需要选择一个合适的操作系统作为嵌入式系统的基础。

针对本次实验,我们选择了xx操作系统,其具备较强的实时性和稳定性,能够满足我们对系统性能的要求。

接着,我们进行了嵌入式系统的驱动程序开发。

通过编写各个外设的驱动程序,我们实现了与液晶显示屏和按键的交互,并将其与处理器进行了适当的接口配置。

另外,我们还开发了嵌入式系统的应用程序。

通过编写智能家居控制器的代码,我们成功实现了对家居设备的远程控制和监测。

用户可以通过液晶显示屏和按键进行交互,实现对家居设备的开关、调节和状态查看等操作。

三. 实验结果与分析经过实验测试,我们发现嵌入式系统在智能家居领域的应用具有较高的可行性与实用性。

通过嵌入式系统的控制,用户可以方便地实现对家居设备的远程操控,提升了家居智能化的程度。

同时,嵌入式系统的实时性和稳定性使得智能家居控制器具备了较高的安全性和可靠性。

然而,在实验过程中我们也遇到了一些挑战。

其中,系统的驱动程序开发是较为复杂的一环,需要仔细理解硬件接口和协议,并进行合理的配置。

此外,系统的稳定性和功耗管理也是需要重点关注的问题。

ram嵌入式计算器报告

ram嵌入式计算器报告

[加减乘除计算器]设计说明书12205235栗晋鹏[二零一五年六月二十六日]加减乘除计算器目录1. .............................................................................................................................. 需求分析 ..................................................................2..1.1编写目的 ........................................................2. 1.2冃^景1.3要求 ..1.4工作原理2. 概要设计 ............................................................3..2.1功能模块图 ......................................................3.2.2计算器功能流程图 ............................................... 4.2.3设计效果图 ...................................................... 6.3. 详细设计 ............................................................ 6..3.1界面布置及“清零” ............................................. 7.3.2捕获键值 ........................................................ 9.3.5结果运算 ....................................................... 1.34. ............................................................................................................................ 调试总结 (18)4.1问题调试 ....................................................... 1.84.2心得体会 (20)5. ................................................................................................................................ 系统实现 (20)1.需求分析1.1编写目的1) 掌握ARM9嵌入式系统的程序设计方法;2) 理论联系实际,进一步提高软件开发技术;3) 培养自己分析问题解决问题的能力;4) 提高实践论文撰写能力。

嵌入式技术及应用实验报告

嵌入式技术及应用实验报告

嵌入式技术及应用实验报告嵌入式技术及应用实验报告一、实验目的本实验旨在通过学习嵌入式技术及应用,掌握嵌入式系统的基本原理和应用方法,培养学生的嵌入式系统设计和开发能力。

二、实验内容1. 嵌入式系统的概念和特点2. 嵌入式系统的硬件平台和软件开发环境3. 嵌入式系统的应用案例分析4. 嵌入式系统的设计和开发实践三、实验原理1. 嵌入式系统的概念和特点嵌入式系统是一种专门设计用于特定应用领域的计算机系统,它通常由硬件和软件两部分组成。

嵌入式系统的特点包括:实时性要求高、资源受限、功耗低、体积小、成本低等。

2. 嵌入式系统的硬件平台和软件开发环境嵌入式系统的硬件平台通常由处理器、存储器、输入输出设备等组成。

常用的处理器有ARM、MIPS等,存储器包括RAM、ROM、Flash等,输入输出设备有键盘、显示器、传感器等。

嵌入式系统的软件开发环境包括编译器、调试器、仿真器等工具。

3. 嵌入式系统的应用案例分析嵌入式系统广泛应用于各个领域,如智能手机、汽车电子、医疗设备、工业控制等。

以智能手机为例,它是一种集成了通信、计算、娱乐等功能的嵌入式系统,通过操作系统和应用软件实现各种功能。

4. 嵌入式系统的设计和开发实践嵌入式系统的设计和开发包括硬件设计和软件开发两个方面。

硬件设计主要包括电路设计、PCB设计等,软件开发主要包括驱动程序开发、应用程序开发等。

在设计和开发过程中,需要考虑系统的性能、可靠性、安全性等因素。

四、实验步骤1. 学习嵌入式系统的概念和特点,了解嵌入式系统的基本原理。

2. 学习嵌入式系统的硬件平台和软件开发环境,掌握常用的处理器、存储器和输入输出设备。

3. 分析嵌入式系统的应用案例,了解不同领域的嵌入式系统的设计和开发方法。

4. 进行嵌入式系统的设计和开发实践,包括硬件设计和软件开发两个方面。

5. 调试和测试嵌入式系统,验证系统的功能和性能。

6. 总结实验结果,撰写实验报告。

五、实验结果与分析通过本次实验,我对嵌入式系统的概念和特点有了更深入的了解。

[arm]嵌入式系统计算器设计

[arm]嵌入式系统计算器设计

嵌入式系统设计报告题目:触摸式计算器设计姓名:姜涛学号:x05610117班级:05电子(11)班指导老师:沈军民一、课程任务本电子系统的功能是借助ARM 7教学实验箱,使用S3C44B0三星处理器能及触摸屏及LCD显示屏等硬件编写程序来实现计算器的设计。

实验要求:1、要用触摸屏来实现2、能够具有触摸按键选择功能,并且具有显示数字功能3、可以实现四则运算功能二、软件实现流程图三、主程序:#include "44b.h"#include"uhal.h"#include "option.h"#include"def.h"#include "tchScr.h"#include"myuart.h"#include "tchScr.h"#include "maro.h"#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihostingextern U32 LCDBuffer[240][320];U32 jcolor;int number =0;//记录数字int number1=0;char signal;int main(void){int i,j,k;int m,n;ARMTargetInit(); //开发版初始化LCD_Init(); //LCD初始化/* for (i=0;i<9;i++){ switch (i){ case 0: jcolor=0x00000000; //RGB均为0 黑色break;case 1: jcolor=0x000000e0; //R 红色break;case 2: jcolor=0x0000d0e0; //R and G 橙色break;case 3: jcolor=0x0000e0e0; //R and G 黄break;case 4: jcolor=0x0000e000; //G 绿色break;case 5: jcolor=0x00e0e000; //G B 青色break;case 6: jcolor=0x00e00000; //B 蓝色break;case 7: jcolor=0x00e000e0; //R and B 紫色break;case 8: jcolor=0x00e0e0e0; //RGB 白色break;}*/jsqInit();getNum(235,7,0);LCD_Refresh() ;while(1){TchScr_Test();Delay(1000);}return 0;}getNum(int x,int y,int num){int i,j;for(i=x;i<=x+8;i++)for(j=y;j<=y+14;j++){LCDBuffer[j][i]=0x00000000;switch(num){case 0:if(i==x||i==x+8) LCDBuffer[j][i]=0x0000e000;if(j==y||j==y+14) LCDBuffer[j][i]=0x0000e000;break;case 1:if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 2:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j>=y+7)||(i==x+8&&j<=y+7))LCDBuffer[j][i]=0x0000e000;break;case 3:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 4: if(j==y+7) LCDBuffer[j][i]=0x0000e000;if(i==x&&j<=y+7) LCDBuffer[j][i]=0x0000e000;if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 5:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j<=y+7)||(i==x+8&&j>=y+7))LCDBuffer[j][i]=0x0000e000;break;case 6:if(j==y||j==y+7||j==y+14)LCDBuffer[j][i]=0x0000e000;if(i==x||(i==x+8&&j>=y+7))LCDBuffer[j][i]=0x0000e000;break;case 7:if(i==x+8) LCDBuffer[j][i]=0x0000e000;if(j==y) LCDBuffer[j][i]=0x0000e000;break;case 8:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if(i==x||i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 9:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j<=y+7)||i==x+8)LCDBuffer[j][i]=0x0000e000;break;}}}getOp(){int i,j;for(i=235;i<=243;i++)for(j=7;j<21;j++){switch(signal){case '+':if(j==14||i==239) LCDBuffer[j][i]=0x00e00000;break;case '-':if(j==14) LCDBuffer[j][i]=0x00e00000;break;case'*':if(j+i==245||j-i==221)LCDBuffer[j][i]=0x00e00000;break;case '/':if(j-i==221)LCDBuffer[j][i]=0x00e00000;break;}}}jsqInit(){int k,i,j;for (k=0;k<260;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[2][k+10]= 0x00e00000;LCDBuffer[42][k+10]= 0x00e00000;LCDBuffer[215][105]= 0x00e00000;//'.'LCDBuffer[107][235]= 0x00e00000;//'/'LCDBuffer[117][235]= 0x00e00000;//'/'}for (k=0;k<10;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[57][k+100]= 0x00e00000;//‘2’的位置 LCDBuffer[67][k+100]= 0x00e00000;LCDBuffer[77][k+100]= 0x00e00000;LCDBuffer[57][k+165]= 0x00e00000;//‘3’的位置 LCDBuffer[67][k+165]= 0x00e00000;LCDBuffer[77][k+165]= 0x00e00000;LCDBuffer[112][k+35]= 0x00e00000;//‘4’的位置LCDBuffer[102][k+100]= 0x00e00000;//‘5’的位置 LCDBuffer[112][k+100]= 0x00e00000;LCDBuffer[122][k+100]= 0x00e00000;LCDBuffer[102][k+165]= 0x00e00000;//‘6’的位置 LCDBuffer[112][k+165]= 0x00e00000;LCDBuffer[122][k+165]= 0x00e00000;LCDBuffer[147][k+35]= 0x00e00000;//‘7’的位置LCDBuffer[147][k+100]= 0x00e00000;//‘8’的位置 LCDBuffer[157][k+100]= 0x00e00000;LCDBuffer[167][k+100]= 0x00e00000;LCDBuffer[147][k+165]= 0x00e00000;//‘9’的位置 LCDBuffer[157][k+165]= 0x00e00000;LCDBuffer[167][k+165]= 0x00e00000;LCDBuffer[192][k+35]= 0x00e00000;//‘0’的位置 LCDBuffer[212][k+35]= 0x00e00000;LCDBuffer[157][k+230]= 0x00e00000;//‘-’的位置LCDBuffer[202][k+165]= 0x00e00000;//‘+’的位置LCDBuffer[200][k+230]= 0x00e00000;//‘=’的位置 LCDBuffer[204][k+230]= 0x00e00000;LCDBuffer[112][k+230]= 0x00e00000;//'/'}for (k=0;k<60;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[47][k+10]= 0x00e00000;LCDBuffer[87][k+10]= 0x00e00000;LCDBuffer[47][k+75]= 0x00e00000;LCDBuffer[87][k+75]= 0x00e00000;LCDBuffer[47][k+140]= 0x00e00000;LCDBuffer[87][k+140]= 0x00e00000;LCDBuffer[47][k+205]= 0x00e00000;LCDBuffer[87][k+205]= 0x00e00000;LCDBuffer[92][k+10]= 0x00e00000; LCDBuffer[132][k+10]= 0x00e00000;LCDBuffer[92][k+75]= 0x00e00000; LCDBuffer[132][k+75]= 0x00e00000;LCDBuffer[92][k+140]= 0x00e00000; LCDBuffer[132][k+140]= 0x00e00000;LCDBuffer[92][k+205]= 0x00e00000; LCDBuffer[132][k+205]= 0x00e00000;LCDBuffer[137][k+10]= 0x00e00000; LCDBuffer[177][k+10]= 0x00e00000;LCDBuffer[137][k+75]= 0x00e00000; LCDBuffer[177][k+75]= 0x00e00000;LCDBuffer[137][k+140]= 0x00e00000; LCDBuffer[177][k+140]= 0x00e00000;LCDBuffer[137][k+205]= 0x00e00000; LCDBuffer[177][k+205]= 0x00e00000;LCDBuffer[182][k+10]= 0x00e00000; LCDBuffer[222][k+10]= 0x00e00000;LCDBuffer[182][k+75]= 0x00e00000; LCDBuffer[222][k+75]= 0x00e00000;LCDBuffer[182][k+140]= 0x00e00000; LCDBuffer[222][k+140]= 0x00e00000;LCDBuffer[182][k+205]= 0x00e00000; LCDBuffer[222][k+205]= 0x00e00000;}jcolor=0x00e00000;for (i=0;i<40;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+2][10]=0x00e00000; LCDBuffer[i+2][270]=0x00e00000;LCDBuffer[i+47][10]=0x00e00000;LCDBuffer[i+47][70]=0x00e00000; LCDBuffer[i+47][75]=0x00e00000; LCDBuffer[i+47][135]=0x00e00000; LCDBuffer[i+47][140]=0x00e00000; LCDBuffer[i+47][200]=0x00e00000; LCDBuffer[i+47][205]=0x00e00000; LCDBuffer[i+47][265]=0x00e00000;LCDBuffer[i+92][10]=0x00e00000; LCDBuffer[i+92][70]=0x00e00000; LCDBuffer[i+92][75]=0x00e00000; LCDBuffer[i+92][135]=0x00e00000; LCDBuffer[i+92][140]=0x00e00000; LCDBuffer[i+92][200]=0x00e00000; LCDBuffer[i+92][205]=0x00e00000; LCDBuffer[i+92][265]=0x00e00000;LCDBuffer[i+137][10]=0x00e00000;LCDBuffer[i+137][70]=0x00e00000;LCDBuffer[i+137][75]=0x00e00000;LCDBuffer[i+137][135]=0x00e00000;LCDBuffer[i+137][140]=0x00e00000;LCDBuffer[i+137][200]=0x00e00000;LCDBuffer[i+137][205]=0x00e00000;LCDBuffer[i+137][265]=0x00e00000;LCDBuffer[i+182][10]=0x00e00000;LCDBuffer[i+182][70]=0x00e00000;LCDBuffer[i+182][75]=0x00e00000;LCDBuffer[i+182][135]=0x00e00000;LCDBuffer[i+182][140]=0x00e00000;LCDBuffer[i+182][200]=0x00e00000;LCDBuffer[i+182][205]=0x00e00000;LCDBuffer[i+182][265]=0x00e00000;}}jcolor=0x00e00000;for (i=0;i<10;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+67][100]=0x00e00000;// ‘2’ LCDBuffer[i+57][110]=0x00e00000;LCDBuffer[i+102][35]=0x00e00000;// ‘4’LCDBuffer[i+102][100]=0x00e00000;// ‘5’LCDBuffer[i+112][110]=0x00e00000;LCDBuffer[i+112][175]=0x00e00000;// ‘6’LCDBuffer[i+147][165]=0x00e00000; // ‘9’LCDBuffer[i+197][170]=0x00e00000; // ‘+’}}jcolor=0x00e00000;for (i=0;i<20;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+62][40]=0x00e00000;//‘1’LCDBuffer[i+57][175]=0x00e00000;//‘3’LCDBuffer[i+102][40]=0x00e00000;//‘4’LCDBuffer[i+102][165]=0x00e00000;//‘6’LCDBuffer[i+147][45]=0x00e00000;//‘7’LCDBuffer[i+147][100]=0x00e00000;//‘8’ LCDBuffer[i+147][110]=0x00e00000;LCDBuffer[i+147][175]=0x00e00000;//‘9’LCDBuffer[i+192][35]=0x00e00000;//‘0’ LCDBuffer[i+192][45]=0x00e00000;}}//return;// }}tchNum(int x,int y){int i;int x1,y1;x1=(x-5)/65;y1=(y-42)/45;if(number<99999999||(x1==1&&y1==3)||(x1==2&&y1==3)||x1==3){switch(x1){case 0:switch(y1){case 0:number=number*10+1;return;case 1:number=number*10+4;return;case 2:number=number*10+7;return;case 3:number=number*10;return;}case 1:switch(y1){case 0:number=number*10+2;return;case 1:number=number*10+5;return;case 2:number=number*10+8;return;case 3:signal='*';clear();getOp();number1=number;number=0;return;}case 2:switch(y1){case 0:number=number*10+3;return;case 1:number=number*10+6;return;case 2:number=number*10+9;return;case 3:signal='+';clear();getOp();number1=number;number=0;return;}case 3:switch(y1){case 0:number=0;number1=0;clear();getNum(235,7,0);return;case 1:signal='/';clear();getOp();number1=number;number=0;return;case 2:signal='-';clear();getOp(); number1=number;number=0;return;case 3:operation();return;}}}}showNum(){//tchNum();int ws=1;int n;n=number;Uart_Printf("$$$$$$$$number=%d",n);Uart_Printf("$$$$$$$$number=%d",number);if(number<0) {isFu();n=-n;}while(n!=0||n/10!=0){switch(ws){case 1:getNum(235,7,n%10);break;case 2:getNum(220,7,n%10);break;case 3:getNum(205,7,n%10);break;case 4:getNum(190,7,n%10);break;case 5:getNum(175,7,n%10);break;case 6:getNum(160,7,n%10);break;case 7:getNum(145,7,n%10);break;case 8:getNum(130,7,n%10);break;case 9:getNum(115,7,n%10);break;}ws++;n=n/10;}}clear(){int i,j;for(i=115;i<=235;i=i+15)getNum(i,7,10);for(i=100;i<=108;i++)for(j=7;j<21;j++){if(j==14) LCDBuffer[j][i]=0x00e0e0e0;break;}}operation(){switch(signal){case '+': number = number+number1;clear();break;case '-':number = number1-number;clear();break;case '*':number = number*number1;clear();break;case '/':number = number1/number;clear();break;}}isFu(){int i,j;for(i=100;i<=108;i++)for(j=7;j<21;j++){if(j==14) LCDBuffer[j][i]=0x00e0e0e0;break;}}四、实验结果显示五、实验心得1、在做计算器时,第一步关键是要将触摸屏校准,使用触摸屏实验程序,通过超级终端将坐标打印出来,从而去调整TchScr_Xmax, TchScr_Xmin, TchScr_Ymax, TchScr_Ymin四个坐标值,使得触摸屏与LCD显示屏能够正确的对应2、在坐标对应的过程中,首先要确定实际触摸屏的X、Y坐标方向,以及程序中的X、Y坐标方向是不是已经和实际坐标对应起来,否则容易出现后面按键时出现按键错位。

嵌入式运算器实验报告

嵌入式运算器实验报告

实验二运算器组成实验1.算术逻辑运算实验一.实验目的1.了解简单运算器的数据传输通路。

2.验证运算功能发生器的组合功能。

3.掌握算术逻辑运算加、减、与的工作原理。

4.验证实验台运算的8位加、减、与、直通功能。

5.按给定数据,完成几种指定的算术和逻辑运算。

二.实验内容1.实验原理算术逻辑单元ALU的数据通路如图2-1所示。

其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。

参加运算的两个8位数据分别为A[7..0]和B[7..0],运算模式由S[3..0]的16种组合决定,而S[3..0]的值由4位2进制计数器LPM_COUNTER产生,计数时钟是Sclk(图2-1);此外,设M=0,选择算术运算,M=1为逻辑运算,C N为低位的进位位;F[7..0]为输出结果,C O为运算后的输出进位位。

两个8位数据由总线IN[7..0]分别通过两个电平锁存器74373锁入,ALU功能如表2-1所示。

表2-1 ALU181的运算功能注1、* 表示每一位都移至下一更高有效位, “+”是逻辑或,“加”是算术加注2、在借位减法表达上,表2-1与标准的74181的真值表略有不同。

三.实验步骤(1)设计ALU元件在Quartus II 环境下,用文本输入编辑器Text Editor输入ALU181.VHD算术逻辑单元文件,编译VHDL文件,并将ALU181.VHD文件制作成一个可调用的原理图元件。

(2)以原理图方式建立顶层文件工程选择图形方式。

根据图2-1输入实验电路图,从Quartus II的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。

将所设计的图形文件ALU.bdf保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的操作就都是对当前工程文件进行的。

根据表2-1,从键盘输入数据A[7..0]和B[7..0],并设置S[3..0]、M、Cy,验证ALU运算器的算术运算和逻辑运算功能,记录实验数据。

嵌入式课程设计报告--电子计算器

嵌入式课程设计报告--电子计算器

重庆科技学院《嵌入式体系结构与接口技术》课程设计报告学院:_电气与信息工程学院_ 专业班级:计科2012-04学生姓名:杜江龙学号: 2012442090设计地点(单位):电气与信息工程学院I302实验室设计题目:_________________ 电子计算器_____ ___ __完成日期: 2014 年 7 月 4 日指导教师评语: ______________________ _________________ ___________________________________________________________________________________ ___________________________________________________________________________________ ___________________________________________________________________________________成绩(五级记分制):指导教师(签字):课程设计任务书设计题目:电子计算器教研室主任:指导教师:冯骊骁2014年6月30日摘要嵌入式系统是后PC时代被广泛使用的计算机平台,它通常都具有低功耗、体积小、功能强、集成度高等优点。

此设计一个具有加减乘除功能的计算器,硬件采用TQ2440板子LCD触摸屏,此计算器能够实现整数和小数的加减乘除的计算功能,并且动态显示,操作简单、实用。

通过此课程设计,对TQ2440板子操作更加熟悉,对ADS1.2的编程和调试更加灵活。

较好的熟悉并掌握了对LCD的操作显示原理和编程,对以后学习有一定的帮助。

关键词:TQ2440 ADS1.2 LCD目录课程设计任务书 (I)摘要 (I)目录 (II)1 系统需求分析 (1)1.1 设计内容与要求 (1)1.2 设计参数 (1)2 概要设计 (2)3 详细设计 (3)3.1 键盘部分和显示部分 (3)3.2 流程图 (4)3.3 功能函数 (5)4 测试 (13)5 总结致谢 (14)6 参考文献 (15)1 系统需求分析1.1 设计内容与要求设计一个具有能进行加减乘除运算,操作数可为整数、小数,可进行连续运算,比如按键输入“1+2*3”,按下“*”后应该显示1+2的运算结果,系统无明显bug的简易计算器。

嵌入式课程设计实验报告-计算器

嵌入式课程设计实验报告-计算器

华南师范大学嵌入式综设实验报告选题:基于ARM和UCOS-II系统的小型计算器指导老师:王剑x组员(学号):(20122302xxx)(20122302xxx)一、实现功能实现五位整数的加减乘除带括号的运算,由于实验箱的键盘数量有限,于是我们将键盘设置为虚拟的两层结构,其使用方法如下:(1(2二、系统流程图计算原理计算原理定义一个操作数栈sym,一个操作符栈um 。

思想是:置操作数栈为空,操作符栈压入元素"#"(它具有最高优先级),依次读入表达式中的每个字符CH,如果CH是操作数,则CH压入操作数栈,如果CH是操作符,那么将CH和操作符栈顶元素进行优先级比较(如‘×’优先级高于‘+’)。

如果优先级大于当前栈顶元素,那么将其压栈,如果其优先级小于当前栈顶元素,那么执行op=sym.pop();(取当前栈顶操作符),a=um.pop()(取当前栈顶操作数存入临时变量a);b=sym.pop()(取当前栈顶操作数存入临时变量b);c=计算(a op b); sym.push(c);如果优先级相等,则当前操作符出栈。

重复上述操作直到表达式处理完毕。

最后操作数栈剩余的操作数就是计算的最终结果。

三、程序#include "Includes.h" /* uC/OS interface */#include "option.h"#include "2410lib.h"#include "uhal.h"/* 任务栈*/OS_STK StackLED[STACKSIZE]= {0, }; // 任务LED任务栈OS_STK StackSEG[STACKSIZE]= {0, }; // 任务SEG任务栈/* 任务ID */char IdLED = '1'; // 任务LED IDchar IdSEG = '2'; // 任务SEG ID/* 任务处理函数*/void TaskLED(void *Id); // 任务LED任务处理函数void TaskSEG(void *Id); // 任务SEG任务处理函数void TmrFunc1(INT8U arg);/* 定时器1*/OS_TMR *Tmr1;char ch,ch2;char print_1[1];char print_2 [6]; /*用于串口输出*/int Page=0; /* 键盘的页面标志*//*------------------------------------栈定义---------------------------------*/ #ifndef STACK_SIZE#define STACK_SIZE 64#endifint Num[STACK_SIZE];/*数字栈*/int NumTop=0;int Sym[STACK_SIZE];/*字符栈,用来储存操作符*/int SymTop=0;void Push_(int * stack,int * top,int val);int Pop_(int * stack,int * top);/*------------------------------------声明-------------------------------------*/#define DELAYTIME 1extern unsigned char seg7table[16];int Calculate(int right,int left,int symbol);#define DELAYTIME 1void product(void);int a,b,c;char number[255];char sign;int now=0;int num=0;int SymTmp;/*对操作符处理时的中间变量*/int ResTmp;/*得数的中间变量*/int Flag = 0;/*表示数字不为空的标识符*/int count=0;/** 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮*/void User_LED_Blink(void){static int led_status = 0;led_status += 1;if(led_status % 2 == 0)Led_Display(0x0f);elseLed_Display(0x00);}/** 数码管显示实验,由0到F依次显示*/void User_SEG_Blink(void){static unsigned char seg_value[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xc0,0xdf};static int seg_status = 0;count++;// seg_status += 1;// if(seg_status > 15)// seg_status = 0;}/** 定时器Tmr1、Tmr2、Tmr3处理函数* 1、根据arg参数确定定时器* 2、三个定时器同时只打开一个,即Tmr1、Tmr2、Tmr3,三个定时器总和闪烁一次跑马灯*/void TmrFunc1(INT8U arg){ch=Key_GetKey();ch2=ch;switch(ch){case 'C':ch2='(';break;case 'D':ch2=')';break;case 'F':ch2='=';break;case 'A':ch2='.';break;case 'E':Page=1;Led_Display(0xff);break;case 'B':Page=0;Led_Display(0x00);break;default:break;}if(Page==1)switch(ch){case '1':ch2='+';break;case '4':ch2='-';break;case '7':ch2='*';break;case '0':ch2='/';break;case '2':ch2='%';break;default:ch='\0';break;}if(ch2=='E'||ch2=='B'||ch2=='.') print_1[0]='\0';elseprint_1[0]=ch2;uHALr_printf(print_1); product();}/** 任务LED任务处理函数* 1、OSStart调用之前创建的最高优先级任务,在该函数重启动时钟节拍定时器* 2、创建三个定时器,定时时间都为2秒钟,它们使用同样的TmrFunc1定时器服务函数,但是使用不同的参数,定时器1的初始状态为开,其余为关*/void TaskLED(void *Id){char key_press;char led_status = 0x0;INT8U err;/* 启动时钟节拍定时器,开始多任务调度*/ARMTargetStart();/* 初始化定时器*/OSTmrInit();/* 创建定时器,定时时间为2秒钟,它使用TmrFunc1定时器服务函数,定时器1的初始状态为开*/err = OSCreateTimer( &Tmr1, TmrFunc1, 1, 10, OS_TMR_ENABLE);OSEnableTimer(Tmr1);uHALr_printf("\n欢迎使用计算器\n");/* 该任务到此完成,不断延时*/for (;;){OSTimeDly(10);}}/** 任务SEG任务处理函数* 1、每隔100 ticks即1000ms,闪烁数码管*/void TaskSEG(void *Id){//uHALr_printf("Task2() called\n");for (;;){OSSchedLock();OSSchedUnlock();OSTimeDly(1);}}/** Main函数.* 1、初始化目标系统,初始化硬件定时器等,与操作系统无关* 2、调用OSInit初始化uC/OS-II软件数据结构等,必须在打开时钟节拍中断之前调用* 3、创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG* 4、调用OSStart启动uC/OS-II*/void Main(void){/** 目标系统初始化*/ARMTargetInit();/** uC/OS-II软件初始化*/OSInit();/** 创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED 的优先级高于TaskSEG*/OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLED[STACKSIZE - 1], 5);OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEG[STACKSIZE - 1], 13);/** 启动多任务调度*/OSStart();/** 正常情况下,永远不会执行到这里*/return;}void product(void)if(ch2>='0'&&ch2<='9'){num = (num*10)+(ch2-'0');Flag = 1;}else if(ch2=='('||ch2==')'||ch2=='+'||ch2=='-'||ch2=='*'||ch2=='/'||ch2=='%'||ch2=='=') {if(Flag){Push_(Num,&NumTop,num);num = 0;Flag = 0;}switch(ch2){case '(': //对‘(’的处理(左括号)Push_(Sym,&SymTop,'(');break;case ')': //对‘)’的处理(右括号)while(SymTop!=0&&(SymTmp=Pop_(Sym,&SymTop))!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),SymTmp);Push_(Num,&NumTop,ResTmp);}break;case '+': // 对‘+(加号)’的处理if(SymTop!=0 && Sym[SymTop-1]!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'+');break;case '-': // 对‘-(减号)’的处理if(SymTop!=0 && Sym[SymTop-1]!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'-');break;case '*': // 对‘*(乘号)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'*');break;case '/': // 对‘/(除号)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'/');break;case '%': // 对‘(取余)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'%');break;case '=': // 对‘=’号处理if(SymTop!=0){while(SymTop!=0&&(SymTmp=Pop_(Sym,&SymTop))!='(' ){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),SymTmp);Push_(Num,&NumTop,ResTmp);}}num = Pop_(Num,&NumTop);if(num<0){print_2[0]='-';num=-num;}elseprint_2[0]='+';print_2[1]=num/10000+'0';print_2[2]=num%10000/1000+'0';print_2[3]=num%1000/100+'0';print_2[4]=num%100/10+'0';print_2[5]=num%10+'0';uHALr_printf("\nResult= ");uHALr_printf(print_2);//uHALr_printf("Result= %d", num); sprintf(print_buf, "Task%c() turned\n", *(char *)Id);(void *)&IdLEDNumTop = 0;SymTop = 0;num = 0;uHALr_printf("\n");break;}}//display(num);}int Calculate(int right,int left,int symbol){int result = 0;switch(symbol){case '+':result = left+right;break;case '*':result = left*right;break;case '-':result =left-right;break;case '/':result = left/right;break;case '%':result = left%right;break;}return result;}/*-----------------------------------栈处理---------------------------------*/ void Push_(int * stack,int * top,int val){if(*top == STACK_SIZE) return;stack[(*top)++] = val; }int Pop_(int * stack,int * top){if(*top==0)return -1;return stack[--(*top)]; }。

嵌入式--计算器--实验报告

嵌入式--计算器--实验报告

计算器设计实验报告一、实验设计主要分工04009320 文斌:算法设计,LCD显示。

04** 张希:界面(按钮控件)设计,文件内容读取。

共同调试、完善设计。

二、程序设计实现功能效果(1)支持整数、小数基本加减乘除运算;(2)有优先级的判别计算。

优先级由高到低一次为括号运算、乘除运算、加减运算。

(3)支持键盘输入和触摸屏输入;(4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。

程序任务开始后,等待键盘或触摸屏的输入。

输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter'='键、‘.’小数点键。

每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD 屏幕上显示相应字符。

当输入'del'键时,屏幕显示去掉最后一位字符。

当输入'='号后,得出计算结果,结果显示于表达式的下一行。

若是除零错误,则结果显示为“/0ERROR!”。

若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。

若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。

当输入'clear'键时,情况显示区域。

当输入'read'键时,从指定目录文本文件中读取表达式并计算。

将表达式内容和计算结果显示在LCD上。

三、程序算法实现1、计算算法首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中,表达为中缀表达式。

用void str2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组char repol[maxs]中。

str2repol()函数中缀表达式转成逆波兰后缀表达式算法如下:(1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的原则。

计算器实训报告

计算器实训报告

报告编号:第3 组综合课程设计报告嵌入式计算器实训学生姓名:指导教师:所在系:电子工程系所学专业:电子信息工程年级:2011级201 年6 月1 设计题目描述与总体要求 (2)2 设计研究的主要工作 (2)3 系统概述 (2)4 设计原理与方法 (3)5 小结 (9)6 参考文献 (9)7 附录 (9)8 成绩评定单 (14)计算器嵌入式实训摘要《嵌入式高级编程》的课程设计是通过1周的实训时间,利用具有实际工程背景的嵌入式系统设计题目,来培养学生对嵌入式系统的理论知识综合运用的能力、嵌入式系统编程和调试的实战能力以及提高学生的综合分析问题能力和项目开发能力。

通过自己设计计算器应用程序,更加深入的学习嵌入式高级编程及对wince 6.0的更好掌握,并能成功在嵌入式系统中运行及操作计算器,达到老师认可的实训要求,在实训中小组人员分工明确分别从程序设计、生成映像、建立仿真等方面着手,以至于实现计算器在嵌入式系统中成功运行。

关键词:嵌入式、自启动、计算器、vb语言1 设计题目描述与总体要求在本次嵌入式实训,我们做的题目是用嵌入式知识做个模拟计算器,主要功能是模拟简单计算器的加减乘除功能。

要求系统启动后,先清屏,再在显示屏上自动显示个简易计算器的界面,然后输入数字即可进行简易的整数四则运算。

2 设计研究的主要工作第一次去实验室的前几天由组长自己找好了计算器vb代码,然后第一次去实验的下午,在制作计算器前,首先也是组长对小组成员分了工,组长袁旭带领和完成计算器最终代码的正确性验证,并在vb环境下设计出计算器最终的界面。

另一组由带领和制作映像。

最后将计算器生成映像,下载到仿真器等待验证是否能启动并成功运行。

第二次去试验的下午,我们的主要任务是完成第一次未实现的自启动计算器运行并很快找到问题所在处。

最后一天星期五主要是总结报告,由组长和完成,实验报告则是剩下四个人分工分别完成打字、删减、排版、打印工作。

3 系统概述设计界面及设置属性界面设计中的显示部分要求用标签实现,运算符、数字分别使用控件数组实现。

嵌入式实验cortex-M3计算器

嵌入式实验cortex-M3计算器

《嵌入式系统及应用》实验报告(2014— 2015学年第一学期)题目:简易科学计算器班级:电子科学与技术(1)班姓名:学号:指导教师:2015 年 1 月10 日目录1.设计内容 (3)2重点要解决的问题及创新性; (3)3.概要设计3.1中断控制部分 (3)3.2显示函数编写 (4)3.3运算符函数编写 (6)4.详细设计 (9)4.1驱动程序头文件 (9)4.2显示界面编写调试 (10)4.3控件程序 (21)4.3.1数字按钮对应函数 (21)4.3.2运算符号对应函数 (26)5.实验、调试及测试结果与分析。

………………………………………31.6.用户使用说明 (31)7.结论 (32)8.参考文献 (32)一、设计内容:本次设计主要以LM3S9B92开发板作为主要的开发平台,首先在这里对开发板的结构,和最重要的Cortex-M3微处理器,以及搭载的触摸屏液晶显示模块。

设计一个简易计算器,能够实现以触摸界面的形式给出简易计算器的操作界面,能实现简单的加、减、乘、除操作,并且将运算步骤都呈现在显示屏上。

二、重点要解决的问题及创新性:重点:1.设计计算器界面,将计算机控件布局到开发板上。

2.添加计算器控件的相应代码,使得计算器能够实现加减乘除基本功能。

3.创新性:1.界面的创新2.计算器实现的运算过程显示在结果输入框内,使得能够记录运算过程。

三、概要设计(说明设计系统的组成及主要实现方法,并采用流程图等图形方式形象化说明);软件设计基本包括了以下三个部分的内容:中断控制部分、显示部分和运算部分3.1中断控制部分中断控制功能的实现是在驱动程序当中,因为是与硬件功能连接十分紧密的一个能实现。

但在实际应用中又与操作紧密相关,是软件设计中十分重要的部分。

其根本编程原理是由Cortex-M3提供了一套中断控制器所提供的API。

中断控制器API 提供了一组函数,用来处理嵌套向量中断控制器(NVIC)。

这些函数执行以下功能:使能和禁止中断、注册中断处理程序和设置中断的优先级。

嵌入式qt实验报告简单计算器的设计

嵌入式qt实验报告简单计算器的设计

电子科技大学学生实验报告书课程名称实用嵌入式应用系统设计与实现任课老师实验名称简单功能计算器的设计学生姓名学生学号学生学院2015 — 2016 学年第 1 学期实验项目名称简单功能计算器的设计实验日期一、实验内容1、设计一个简单计算器并能完成简单的四则运算,实时更新运算结果;2、带界面计算器自带数字及功能按钮,能实现更多以及更灵活的的计算功能。

一、实验步骤设计(包括实验方案设计、实验步骤或算法描述等)实验设计方案如下:图1 简单计算器的设计方案流程图2 带显示界面计算器的设计方案流程实验步骤:一、简单计算器的设计:1、创建一个Qt GUI应用项目,项目名称为dialog_designer ,基类选择Qwidget。

项目建好后会自动生成一系列文件,双击界面文件widget.ui 进入Qt Designer 进行界面设计。

2、界面设计完成后修改控件的各属性,并修改Tab顺序,点击工具栏上的的“编辑Tab顺序”按钮,依次按顺序点击即可,完成后再按工具栏上的编辑控件按钮返回。

3、在头文件widget.h的Widget类添加共有槽函数;在源文件widget.cpp中添加新代码。

4、用模拟器调试运行。

二、带界面的计算器的设计:与简单计算器的设计步骤基本相同。

但是需要在项目文件(后缀为.pro)添加一段代码,使得程序中能使用Qt脚本,在原有代码的基础上添加。

在头文件widget.h的Widget类添加共有槽函数和全局变量,以及包含头文件QtScript,以使用Qt Script API。

在源文件widget.cpp中添加新代码,之后即可运行调试。

三、实验结果分析及代码(包括结果描述、综合分析及实现关键代码)实验结果如下:1、简单计算器:代码:(1)在widget.h文件中#ifndef WIDGET_H#define WIDGET_H#include<QWidget>namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:explicit Widget(QWidget*parent=0);~Widget();private slots:void on_doubleSpinBox_1_valueChanged();void on_doubleSpinBox_2_valueChanged();void on_doubleSpinBox_3_valueChanged();void on_doubleSpinBox_4_valueChanged();void on_doubleSpinBox_5_valueChanged();void on_doubleSpinBox_6_valueChanged();void on_doubleSpinBox_7_valueChanged();void on_doubleSpinBox_8_valueChanged(); private:Ui::Widget*ui;};#endif//WIDGET_H(2)在widget.cpp源文件中#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}void Widget::on_doubleSpinBox_1_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_2_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_3_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value( )-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_4_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value()-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_5_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_6_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_7_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}void Widget::on_doubleSpinBox_8_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}Widget::~Widget(){delete ui;}2、带显示界面的计算器:代码:(1)在shiyanB.pro项目文件中QT+=core guiQT+=scriptgreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsTARGET=shiyanBTEMPLATE=appSOURCES+=main.cpp\widget.cppHEADERS+=widget.hFORMS+=widget.ui(2)在头文件widget.h中#ifndef WIDGET_H#define WIDGET_H#include<QtScript>#include"QWidget" namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:QString sum;//全局变量。

嵌入式实验报告实验原理(3篇)

嵌入式实验报告实验原理(3篇)

第1篇一、实验背景随着科技的不断发展,嵌入式系统在各个领域得到了广泛的应用。

嵌入式系统是指将计算机技术应用于特定场合,以实现特定功能的计算机系统。

它具有体积小、功耗低、成本低等特点,是现代电子设备中不可或缺的部分。

为了让学生更好地掌握嵌入式系统的基础知识和实践能力,本实验课程旨在通过一系列实验,使学生了解嵌入式系统的基本原理和开发方法。

二、实验目的1. 理解嵌入式系统的基本概念和组成。

2. 掌握嵌入式系统硬件平台的基本操作。

3. 熟悉嵌入式软件开发流程,包括编程、调试和部署。

4. 培养学生的实际操作能力和创新意识。

三、实验原理1. 嵌入式系统概述嵌入式系统是指将计算机技术应用于特定场合,以实现特定功能的计算机系统。

它通常由硬件和软件两部分组成。

硬件主要包括微处理器、存储器、输入/输出接口等;软件则包括操作系统、驱动程序、应用程序等。

2. 嵌入式系统硬件平台嵌入式系统硬件平台是嵌入式系统的物理基础,主要包括以下几部分:(1)微处理器:嵌入式系统的核心,负责执行指令和处理数据。

(2)存储器:包括ROM(只读存储器)、RAM(随机存储器)和Flash存储器等,用于存储程序和数据。

(3)输入/输出接口:用于实现嵌入式系统与外部设备之间的数据交换。

(4)外设:如显示器、键盘、鼠标、传感器等,用于实现人机交互。

3. 嵌入式软件开发嵌入式软件开发主要包括以下几个阶段:(1)需求分析:明确嵌入式系统的功能需求和性能指标。

(2)硬件选型:根据需求选择合适的硬件平台。

(3)软件开发:包括操作系统、驱动程序和应用程序的开发。

(4)编译与调试:将源代码编译成可执行文件,并在开发环境中进行调试。

(5)部署:将编译后的程序部署到嵌入式系统中。

4. 嵌入式系统调试嵌入式系统调试是软件开发过程中的重要环节,主要包括以下几种方法:(1)代码调试:通过设置断点、单步执行等方式,观察程序执行过程。

(2)逻辑调试:通过打印语句或调试工具,观察程序执行过程中的变量值和程序流程。

嵌入式综合实践报告范文(2篇)

嵌入式综合实践报告范文(2篇)

第1篇一、前言随着我国科技的快速发展,嵌入式系统已成为现代社会不可或缺的一部分。

嵌入式系统广泛应用于智能家居、智能交通、工业控制等领域,具有极高的实用价值和广阔的市场前景。

为了更好地了解嵌入式系统的设计与应用,我们开展了一次嵌入式综合实践。

本次实践旨在通过理论学习与实际操作相结合,提高我们的嵌入式系统设计与开发能力。

二、实践目的1. 掌握嵌入式系统基本概念、原理及开发流程;2. 熟悉嵌入式系统硬件平台和软件开发工具;3. 培养嵌入式系统设计与开发能力,提高团队协作能力;4. 深入了解嵌入式系统在各个领域的应用,拓宽知识面。

三、实践内容1. 嵌入式系统基础知识在本次实践中,我们首先学习了嵌入式系统的基本概念、原理及开发流程。

嵌入式系统是指嵌入在计算机硬件中的专用计算机系统,具有体积小、功耗低、实时性强等特点。

其主要分为硬件和软件两部分,硬件包括处理器、存储器、输入输出设备等,软件包括操作系统、驱动程序、应用程序等。

2. 嵌入式系统硬件平台为了更好地进行嵌入式系统开发,我们选择了基于ARM架构的嵌入式开发板进行实践。

ARM架构具有高性能、低功耗等特点,被广泛应用于嵌入式系统领域。

在实践过程中,我们学习了ARM架构的基本原理,了解了开发板的硬件组成,包括处理器、存储器、外部设备等。

3. 嵌入式软件开发工具在嵌入式系统开发过程中,软件开发工具是必不可少的。

我们学习了Keil uVision、IAR Embedded Workbench等集成开发环境,掌握了C语言、汇编语言等编程语言,并熟悉了调试工具的使用。

4. 嵌入式系统设计与开发在掌握了嵌入式系统基础知识、硬件平台和软件开发工具后,我们开始了嵌入式系统设计与开发实践。

本次实践以智能家居为例,设计并实现了一个基于ARM架构的嵌入式系统。

系统主要功能包括:温度、湿度监测、灯光控制、窗帘控制等。

(1)系统硬件设计系统硬件主要包括以下模块:1)微控制器:采用基于ARM Cortex-M3内核的STM32F103系列单片机;2)传感器模块:温度传感器、湿度传感器;3)控制模块:继电器、舵机;4)通信模块:蓝牙模块、Wi-Fi模块;5)显示模块:LCD显示屏。

嵌入式综合实践设计报告(2篇)

嵌入式综合实践设计报告(2篇)

第1篇一、项目背景随着物联网、智能家居、工业自动化等领域的快速发展,嵌入式系统已成为现代信息技术的重要组成部分。

嵌入式系统以其低成本、低功耗、高性能等特点,在各个领域得到了广泛应用。

为了提高我国嵌入式技术的研究与应用水平,培养学生的实践能力和创新精神,我们开展了嵌入式综合实践设计项目。

二、项目目标1. 熟悉嵌入式系统的基本原理和设计方法;2. 掌握嵌入式系统硬件电路设计和软件开发技能;3. 提高学生的动手能力和团队合作精神;4. 培养学生的创新意识和解决实际问题的能力。

三、项目内容1. 项目选题本项目以智能家居为背景,设计一款基于嵌入式系统的智能门锁。

该门锁具有指纹识别、密码输入、刷卡等多种解锁方式,同时具备远程监控、报警等功能。

2. 硬件设计(1)硬件选型本项目的硬件主要包括以下部分:1)微控制器:选用STC89C52单片机作为主控芯片;2)指纹识别模块:选用FPS201指纹识别模块;3)无线通信模块:选用ESP8266WiFi模块;4)电源模块:选用DC-DC模块,将12V电源转换为5V电源;5)按键模块:选用独立按键和矩阵键盘;6)显示屏:选用OLED显示屏;7)报警模块:选用蜂鸣器和继电器。

(2)电路设计根据硬件选型,设计如下电路:1)微控制器电路:连接STC89C52单片机、晶振、复位电路等;2)指纹识别模块电路:连接FPS201指纹识别模块,实现指纹识别功能;3)无线通信模块电路:连接ESP8266WiFi模块,实现远程监控和报警功能;4)电源模块电路:连接DC-DC模块,实现电源转换;5)按键模块电路:连接独立按键和矩阵键盘,实现用户交互;6)显示屏电路:连接OLED显示屏,实现信息显示;7)报警模块电路:连接蜂鸣器和继电器,实现报警功能。

3. 软件设计(1)软件开发环境本项目采用Keil C51作为软件开发环境,编写C语言程序。

(2)软件设计思路1)初始化:初始化微控制器、指纹识别模块、无线通信模块等硬件资源;2)用户交互:实现指纹识别、密码输入、刷卡等解锁方式;3)远程监控:通过ESP8266WiFi模块实现远程监控功能;4)报警功能:通过蜂鸣器和继电器实现报警功能。

嵌入式实验课程设计报告

嵌入式实验课程设计报告

嵌入式实验课程设计报告一、课程目标知识目标:1. 学生能理解嵌入式系统的基础知识,掌握其基本组成和工作原理。

2. 学生能够掌握嵌入式编程的基本语法和常用指令,具备编写简单嵌入式程序的能力。

3. 学生能够了解嵌入式系统在实际应用中的优势和局限性。

技能目标:1. 学生能够运用所学知识,进行简单的嵌入式系统设计和程序开发。

2. 学生能够使用嵌入式实验设备,进行实际操作,并解决常见问题。

3. 学生能够通过团队协作,完成一个具有实际应用价值的嵌入式项目。

情感态度价值观目标:1. 学生对嵌入式系统产生兴趣,激发其学习主动性和积极性。

2. 学生能够认识到嵌入式技术在国家战略和社会发展中的重要性,培养其社会责任感和使命感。

3. 学生在课程学习过程中,培养良好的团队合作精神和沟通能力,形成正确的价值观。

课程性质分析:本课程为嵌入式实验课程,侧重于实践操作和项目实践。

课程内容紧密结合教材,旨在帮助学生将理论知识与实际应用相结合。

学生特点分析:本年级学生已具备一定的计算机基础和编程能力,对新鲜事物充满好奇,具备较强的动手能力和创新能力。

教学要求:1. 注重理论与实践相结合,提高学生的实际操作能力。

2. 采用项目驱动教学法,培养学生的团队协作和解决问题的能力。

3. 激发学生的学习兴趣,引导其探索嵌入式技术在实际应用中的奥秘。

二、教学内容1. 嵌入式系统概述:介绍嵌入式系统的基本概念、发展历程、应用领域及未来发展趋势。

教材章节:第一章 嵌入式系统概述2. 嵌入式系统组成:讲解嵌入式系统的硬件组成、软件架构及系统设计方法。

教材章节:第二章 嵌入式系统硬件组成;第三章 嵌入式系统软件架构3. 嵌入式编程基础:学习嵌入式编程的基本语法、常用指令和编程技巧。

教材章节:第四章 嵌入式编程语言与编程环境;第五章 嵌入式程序设计基础4. 嵌入式系统设计与实践:通过项目实践,让学生掌握嵌入式系统的设计方法和实际操作。

教材章节:第六章 嵌入式系统设计与实践5. 嵌入式系统应用案例分析:分析典型嵌入式应用案例,了解嵌入式技术的实际应用。

嵌入式系统实训报告范文3篇

嵌入式系统实训报告范文3篇

嵌入式系统实训报告范文嵌入式系统实训报告范文精选3篇(一)以下是一份嵌入式系统实训报告范文,供参考:实训报告课程名称:嵌入式系统实训姓名:XXX学号:XXXX日期:XXXX年XX月XX日一、实训目的和背景嵌入式系统是一种专门用于控制和执行特定任务的计算机系统。

本次实训旨在通过设计、搭建并测试一个简单的嵌入式系统,帮助学生理解嵌入式系统的根本原理和应用,并提供理论时机来加深对嵌入式系统的理解和应用才能。

二、实训内容1. 系统设计本实训的目的是设计一个简单的温度监测系统。

该系统包括一个传感器用于检测环境温度,并将温度值传输到单片机上进展处理。

单片机再将处理后的数据显示在LCD屏幕上。

2. 硬件搭建根据系统设计,我们首先需要准备以下硬件器件:传感器、单片机、LCD屏幕、电等。

实际搭建时,我们按照电路图连接各个硬件器件,并进展电接入和信号连接的测试。

3. 软件编程完成硬件搭建后,接下来需要进展软件编程。

我们使用C语言来编写嵌入式系统的程序。

主要编程内容包括读取传感器数据、对数据进展处理和计算、将计算结果显示在LCD屏幕上等。

4. 系统测试完成软件编程后,我们进展系统测试。

主要测试内容包括:检测传感器是否能准确读取温度数据、单片机是否能正确处理数据、LCD屏幕是否正常显示等。

通过测试,可以评估系统的稳定性和可靠性。

三、实训收获通过参与本次实训,我收获了以下几点:1. 对嵌入式系统的理解更加深化:通过实操,我对嵌入式系统的原理和应用有了更深化的理解。

2. 掌握了硬件搭建和连接的技能:我学会了如何搭建和连接硬件器件,进步了理论操作才能。

3. 锻炼了软件编程才能:通过编写嵌入式系统的程序,我熟悉了C语言的应用,并提升了编程才能。

4. 增加了问题解决才能:在搭建和编程过程中,遇到了一些困难和问题,通过不断调试和学习,我学会了如何解决问题和排除故障。

综上所述,本次嵌入式系统实训对于进步我的理论操作才能、编程才能和问题解决才能具有重要意义。

嵌入式计算器实训报告

嵌入式计算器实训报告

一、实训目的随着科技的不断发展,嵌入式系统在各个领域得到了广泛应用。

为了提升自身在嵌入式领域的实践能力,我参加了嵌入式计算器实训课程。

本次实训旨在通过实际操作,掌握嵌入式计算器的硬件设计、软件编程和调试方法,提高动手能力和工程实践能力。

二、实训内容1. 硬件设计嵌入式计算器的硬件设计主要包括微控制器、按键输入、显示模块和存储模块等。

本次实训所使用的微控制器为STM32,按键输入采用矩阵键盘,显示模块为LCD液晶显示屏,存储模块采用EEPROM。

2. 软件编程嵌入式计算器的软件编程主要包括按键扫描、运算逻辑、显示控制和数据存储等。

本次实训采用C语言进行编程,主要使用了以下技术:(1)按键扫描:通过查询矩阵键盘的行列状态,实现按键的识别和去抖动。

(2)运算逻辑:实现基本的四则运算功能,包括加、减、乘、除等。

(3)显示控制:将运算结果在LCD液晶显示屏上显示,包括数值和符号。

(4)数据存储:将运算结果和重要数据存储在EEPROM中,以便后续读取。

3. 调试与优化在嵌入式计算器的开发过程中,调试和优化是至关重要的环节。

本次实训主要采用以下方法进行调试:(1)使用调试器观察程序运行状态,分析程序逻辑。

(2)使用逻辑分析仪观察信号波形,检查硬件电路连接。

(3)针对发现的问题,进行代码修改和优化。

三、实训过程1. 硬件搭建首先,根据设计方案,搭建嵌入式计算器的硬件电路。

主要包括微控制器、按键输入、显示模块和存储模块等。

在搭建过程中,注意电路连接的准确性和可靠性。

2. 软件编程在硬件搭建完成后,开始进行软件编程。

首先,编写按键扫描程序,实现按键的识别和去抖动。

然后,编写运算逻辑程序,实现基本的四则运算功能。

接着,编写显示控制程序,将运算结果在LCD液晶显示屏上显示。

最后,编写数据存储程序,将运算结果和重要数据存储在EEPROM中。

3. 调试与优化在编程过程中,不断进行调试和优化。

首先,使用调试器观察程序运行状态,分析程序逻辑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算器设计实验报告一、实验设计主要分工04009320 文斌:算法设计,LCD显示。

04** 张希:界面(按钮控件)设计,文件内容读取。

共同调试、完善设计。

二、程序设计实现功能效果(1)支持整数、小数基本加减乘除运算;(2)有优先级的判别计算。

优先级由高到低一次为括号运算、乘除运算、加减运算。

(3)支持键盘输入和触摸屏输入;(4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。

程序任务开始后,等待键盘或触摸屏的输入。

输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter'='键、‘.’小数点键。

每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD 屏幕上显示相应字符。

当输入'del'键时,屏幕显示去掉最后一位字符。

当输入'='号后,得出计算结果,结果显示于表达式的下一行。

若是除零错误,则结果显示为“/0ERROR!”。

若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。

若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。

当输入'clear'键时,情况显示区域。

当输入'read'键时,从指定目录文本文件中读取表达式并计算。

将表达式内容和计算结果显示在LCD上。

LCD显示界面如下:三、程序算法实现1、计算算法首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中,表达为中缀表达式。

用void str2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组char repol[maxs]中。

str2repol()函数中缀表达式转成逆波兰后缀表达式算法如下:(1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的原则。

(2)读入一个中缀表示算术表达式str[maxs](注:str[i]=cal[i])。

(3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出到repol[maxs]中。

(4)如果不是数字,该字符则是运算符,此时需比较优先关系。

步骤如下:若为左括号‘(’则压入运算符栈顶;若为其他运算符,则将该字符与运算符栈顶的运算符的优先关系相比较。

若该字符优先关系高于此时运算符栈顶的运算符,则将该运算符入栈。

若该字符优先关系不高于此时运算符栈顶的运算符,则将栈顶的运算符从栈中弹出到repol[maxs],直到栈顶运算符的优先级低于当前运算符,将该字符入栈。

若为有括号‘(’,则弹出运算符栈顶的运算符至到repol[maxs],直到遇到左括号‘(’。

弹出并作废此开括号。

(5)重复上述操作。

中缀表达式转成逆波兰后缀表达式后,calculate()函数计算后缀表达式的值算法如下:用局部数组stack[top]存放运算结果,top初值为0.(1)依次读入后缀表达式repol[maxs]的字符ch,循环判断ch。

(2)若ch为运算符,则stack[top-1]与stack[top]做相应运算。

若运算只需单操作数则stack[top]做相应运算。

运算结果存于stack[top-1]。

然后top- -。

否则ch为数字或小数点‘.'’,为数字则 d=*d+ch-'0'; (d初始值为0,用于存放连续数字字符的数学值)。

遇小数点,d保持原值。

小数点后的数字符与小数点前的数字符一样处理,i记录小数点后的数字符个数。

最后d=d/(10^i), top++;stack[top]=d。

注:若str2repol()函数遇非法字符时,LCD输出相应提示,不调用calculate()。

若calculate ()函数遇除零,则不做运算,LCD输出“/0ERROR!”。

2、按键控件3、LCD输出显示将字符串转为Unicode编码,在指定坐标处用文本模式显示字符串。

实现函数如下:void lcddisplay(char *str,int xx,int yy){PDC pdc;;d -= (int)d;则标志位err=1;将输入字符串转成逆波兰表达式;(6)void calculate():计算函数功能:判别标志位err。

为1则输出“Syntax Error!!”并退出,否则继续->判别逆波兰表达式内容;判别小数点->对数字做相应加权判别运算符->做相应运算调用double型转字符串函数;调用字符串结果显示函数。

(7)char *doub2str(double d, char *str):double型转字符串函数功能:判别d是否为负数。

是则字符串首位置'-';d取反,继续->判别d小数部分是否为零。

是则整数转字符串,否则再继续—>小数转字符串将double型数字转换成字符串类型;存储字符串并返回。

(8)void lcddisplay(char *str,int xx,int yy):字符串显示函数功能:将字符串str[]显示在LCD的指定坐标(xx,yy)。

(9)void redraw(char key):重画按钮函数功能:响应相应函数;重画相应按钮;延时100ms后恢复原按钮。

(10)char zb2key(int x,int y):坐标转按键函数功能:将触摸点坐标(x,y)转换成相应按键字符。

(11)void dcr(char key):退格、清屏、读文件函数功能:响应退格键,屏幕显示去除最后一位字符,当前输入后前一次输入置'\0';响应清屏键,清楚显示区域内容;响应读文件,调用读文件函数。

(12)void readfile():读文件函数功能:读取指定目录文本文件;显示文本内容;计算内容(表达式)并显示。

(13)void clc():清屏函数功能:清除显示区域内容。

六、完整【】程序#include "../ucos-ii/" /* uC/OS interface */#include "../ucos-ii/add/"#include "../ucos-ii/add/"#include "../inc/"#include<>#include "../inc/sys/"#include "../src/gui/"#include <>#include <>char TextFilename[]="/sys/ucos/fj/"; .\n");OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE-1], Main_Task_Prio);OSAddTask_Init(1);LCD_printf("Starting uCOS-II...\n");LCD_printf("Entering graph mode...\n");LCD_ChangeMode(DspGraMode);OSStart();return 0;}{ /*判定为数字*/repol[t]=ch;t++;ch=str[i];i++;}i--;repol[t]='=';t++;/*if(ch<'0'&&ch>'9'&&ch!='.'){er="error!";lcddisplay(er,xz,yz+20);ch='=';}*/}ch=str[i];i++;}while(top!=0){repol[t]=stack[top];t++;top--;}repol[t]='=';}void calculate(){ /*计算后缀表达式的值*/double stack[maxs],d0,d1,dd; /*作为栈使用*/unsigned int re;char ch,*restr,*rez;int t=1,top=0,counter,i; /*t为ex下标,top为stack下标*/ static int zh=1;ch=repol[t];t++;while(ch!='='){switch(ch){case '+':stack[top-1]=stack[top-1]+stack[top];top--;break;case '-':stack[top-1]=stack[top-1]-stack[top];top--;break;case '*':stack[top-1]=stack[top-1]*stack[top];top--;break;case '/':if(stack[top]!=0)stack[top-1]=stack[top-1]/stack[top];else{printf("\n\t除零错误!\n");lcddisplay("ERROR!",xz,yz);{if(ch!='.'&&zh==1){d1=*d1+ch-'0'; }if(ch=='.')zh=0;if(ch!='.'&&zh==0){d0=*d0+ch-'0';counter++;}ch=repol[t];t++;};d -= (int)d;for(i=0;i<10;i++){d *= 10;str[j++] = (int)d+'0';d -= (int)d;}while(str[--j]=='0');str[++j] = '\0';}return str;}int readline(char* str, int n, FILE *pfile) {int i;for(i=0; i<=n; i++){if(fread(str, 1, 1, pfile)!=1)return 0;if(*str=='\n'){str++;*str=0;return i;}str++;}return i; }。

相关文档
最新文档