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

合集下载

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

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

一目的及要求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) 提高实践论文撰写能力。

嵌入式实训报告范文2篇

嵌入式实训报告范文2篇

嵌入式实训报告范文嵌入式实训报告范文精选2篇(一)嵌入式实训报告一、实训目的和背景嵌入式实训的目的是通过设计和实现一个嵌入式系统,培养学生的嵌入式系统开发才能和团队协作才能。

本次实训的背景是为了满足社会对嵌入式系统开发人才的需求,进步学生的实际动手才能。

二、实训内容1. 硬件平台的选择和搭建:选择了一款ARM开发板作为硬件平台,并搭建了相应的开发环境。

2. 系统设计和分析:根据实训要求,我们团队设计了一个智能门锁系统,包括用户认证、门锁控制和远程监控功能。

3. 软件开发:使用C语言和嵌入式开发工具进展软件开发,实现了用户认证、门锁控制和远程监控等功能。

4. 硬件连接和调试:将开发板和相关传感器、执行器等硬件设备进展连接和调试,确保系统可以正常运行。

5. 功能测试和调优:对系统进展全面测试,发现并修复了一些问题,并对系统进展了性能优化。

三、实训心得和体会通过本次实训,我深入认识到嵌入式系统开发的复杂性和挑战性。

在实训过程中,我们团队遇到了许多问题,比方硬件和软件的兼容性、性能优化等方面。

但是通过团队的努力和合作,我们成功解决了这些问题,并完成了一个功能完善的嵌入式系统。

此外,我还学到了许多软件开发和硬件调试的技巧,进步了自己的实际动手才能。

在团队协作方面,我们团队成员之间互相配合,共同解决问题,形成了良好的协作机制。

总结起来,本次嵌入式实训让我受益匪浅,学会了许多实际应用的技能和知识,并进步了自身的综合才能。

四、实训成果展示在实训完毕后,我们团队成功完成了一个智能门锁系统,具备用户认证、门锁控制和远程监控等功能。

系统的稳定性和可靠性得到了验证,并且在实际使用中得到了积极的反应。

附图:〔展示系统界面、硬件设备连接示意图等〕五、实训改良意见尽管本次实训获得了良好的成果,但仍有一些方面需要改良。

首先,实训的时间安排可以更合理一些,以便更充分地利用时间进展理论操作。

其次,可以增加一些真实场景的案例分析和解决方案的设计,以提升学生的实际应用才能。

嵌入式实验报告总结

嵌入式实验报告总结

嵌入式实验报告总结本次嵌入式实验主要涉及到嵌入式系统的设计与开发,通过对实验过程的总结和分析,可以得出以下结论和认识。

在实验过程中,我们深入了解了嵌入式系统的基本原理和设计方法。

嵌入式系统是一种针对特定应用领域设计的计算机系统,具有体积小、功耗低、功能强大等特点。

在实验中,我们通过学习相关理论知识,了解了嵌入式系统的硬件结构和软件开发流程,并且亲自动手进行了系统设计和开发,加深了对嵌入式系统的理解和掌握。

实验中我们学习了嵌入式系统的硬件设计。

嵌入式系统的硬件设计是整个系统的基础,包括选择合适的处理器、外设接口设计、电源电路设计等。

在实验中,我们根据实际需求选择了合适的处理器和外设,进行了相关接口的设计和连接,确保硬件系统的稳定性和可靠性。

然后,实验中我们进行了嵌入式系统的软件开发。

嵌入式系统的软件开发是整个系统的核心,需要编写各种驱动程序和应用程序,实现系统的各种功能。

在实验中,我们学习了嵌入式系统的软件开发工具和方法,使用C语言编写了驱动程序和应用程序,并进行了调试和测试,确保软件系统的正确性和稳定性。

实验中我们还学习了嵌入式系统的调试和测试方法。

嵌入式系统的调试和测试是确保系统正常运行的重要环节,需要使用专业的工具和方法进行。

在实验中,我们学习了嵌入式系统的调试和测试工具,通过对系统的性能和功能进行评估,发现并解决了一些潜在的问题,确保系统的稳定性和可靠性。

通过本次实验,我们对嵌入式系统的设计与开发有了更深入的了解和认识。

嵌入式系统作为一种特殊的计算机系统,具有广泛的应用前景和市场需求。

通过学习和实践,我们不仅提高了自己的技术水平,也为将来的工作和研究打下了坚实的基础。

希望今后能够继续深入学习和研究嵌入式系统,为推动科技进步和社会发展做出更大的贡献。

本次嵌入式实验通过对硬件设计、软件开发、调试测试等方面的学习和实践,使我们对嵌入式系统的设计与开发有了更深入的了解和认识。

通过实验的过程,我们不仅提高了自己的技术水平,也增强了对嵌入式系统的兴趣和热情。

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

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

嵌入式--计算器--实验报告本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March计算器设计实验报告一、实验设计主要分工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]中。

嵌入式运算器实验报告

嵌入式运算器实验报告

实验二运算器组成实验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)]; }。

嵌入式实验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)。

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

嵌入式实习报告

嵌入式实习报告

嵌入式实习报告嵌入式实习报告(精选5篇)在生活中,报告的用途越来越大,我们在写报告的时候要注意逻辑的合理性。

相信许多人会觉得报告很难写吧,以下是店铺精心整理的嵌入式实习报告(精选5篇),希望对大家有所帮助。

嵌入式实习报告篇1一、实习时间20xx年4月12日-20xx年4月26日二、指导教师姓名陈xx三、实习地点长沙市牛耳服务外包实训基地四、实习目的与内容对于嵌入式项目进行学习培训,掌握嵌入式的主要项目及相关技术五、实习收获与体会一转眼半个月的实习生活过去了,现在我已经回到学校,回想起半个月的实习生活,自己学到了很多,懂得了很多。

真的说不出是什么感觉,伴着时间,就像是在和自己的影子赛跑,不可能从真实的两面去看清它,只是经意不经意的感受着有种东西在过去,也许更适合的只有那句话:时不待我,怎可驻足。

原以为实习对于我来说会是很长,但实际却不同。

想象收获的东西,真的很多,看看我的工作笔记,一篇又一篇,记别人的事情比自己的还多,也许实习,并不像我想象中的那样轻松惬意,而是充满了挑战和艰辛。

我给自己敲响了警钟:“不要半途而废,做事情切忌三分热度。

”我信心十足的回答到:“我一定会坚持到底!”天下英雄皆我辈,一入江湖立马催。

” 从学校到社会的大环境的转变,身边接触的人也完全换了角色,老师变成老板,同学变成同事,相处之道完全不同。

在这巨大的转变中,我们可能彷徨,迷茫,无法马上适应新的环境,但在同学、同事的帮助和自己摸索的情况下,我还是完成了这次实习。

但我发现,以我们的经验,不学到一定的深度和广度是难以在实际工作中应付自如的。

因此反映出学习的还不够,缺点疏漏。

需在加以刻苦钻研及学习,不断开拓视野,增强自己的实践操作技能,我们也许看不惯企业之间残酷的竞争,无法忍受同事之间漠不关心的眼神和言语。

很多时候觉得自己没有受到领导重用,所干的只是一些无关重要的杂活,自己的提议或工作不能得到老板的肯定。

做不出成绩时,会有来自各方面的压力,老板的眼色同事的嘲讽。

嵌入式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;//全局变量。

嵌入式系统基础实验报告

嵌入式系统基础实验报告

本科实验报告课程名称:嵌入式系统基础实验项目:实验一双字节加法实验二数据排序程序实验三定时/计数器实验四外部中断实验地点:跨越机房专业班级:通信0903 学号:2009001385 学生姓名:指导教师:武娟萍2012年 5 月18 日实验一双字节加法一实验目的(1)熟悉MCS-51指令系统,掌握程序设计方法。

(2)掌握双字节加法的程序算法。

二实验设备计算机一台。

操作系统:Windows 98/2000/XP应用软件:WAVE 6000或其他。

三实验内容编写并调试一个双字节加法程序,设9930H存在R1R0中,6083H存在R2R3中,计算R1R0+R3R2,结果存在R5R4中。

四实验原理两数的低位相加后保留进位位,高位数相加时,将低位的进位加上。

五WAVE6000操作过程一、新建文件:选择菜单【文件/新建文件】功能,出现一个文件名为NONAME1的源程序窗口,在此窗口中输入编好的程序。

二、保存文件:输完程序后,选择菜单【文件/保存文件】或【文件/另存为】功能,给出文件要保存的位置保存文件,保存文件为MY.ASM。

三、新建项目选择菜单【文件/新建项目】功能,1)加入模块文件,选择刚才保存的文件,按打开键,可以打开多个文件2) 加入包含文件,选择所要加入的包含文件,如果没有包含文件,按取消键3)保存项目为MY,无需后缀。

将用户项目存盘,用户在编译项目时,自动存盘。

注意:当用项目仿真时,系统要求,项目文件,模块文件包含文件在同一个目录(文件夹)下五、项目复制复制项目,用户可以将项目中的所有模块(用户程序)备份到另一个地方。

在多模块项目中,用复制项目功能,可以避免用户因少复制某些模块,而造成编译不能通过,方便用户对程序进行管理六、项目设置选择菜单【设置/仿真器设置】,在仿真器设置栏中1)点击语言栏选择伟福汇编器。

2)仿真器选择栏选择80313)通信设置选择使用伟福软件模拟器七、编译程序:选择菜单【项目/编译】功能编译项目。

嵌入式综合实训实验报告

嵌入式综合实训实验报告

一、实验背景与目的随着信息技术的飞速发展,嵌入式系统在各个领域的应用越来越广泛。

为了提升学生对嵌入式系统的理解和应用能力,本实验课程旨在通过综合实训,让学生全面掌握嵌入式系统的开发流程,包括硬件选型、软件开发、系统调试以及项目实施等环节。

通过本实验,学生能够熟悉嵌入式系统的基本原理,提高实际操作能力,为今后从事嵌入式系统相关工作打下坚实基础。

二、实验环境与工具1. 硬件平台:选用某型号嵌入式开发板作为实验平台,具备丰富的外设接口,如GPIO、UART、SPI、I2C等。

2. 软件平台:采用某主流嵌入式Linux操作系统,支持交叉编译工具链,方便软件开发和调试。

3. 开发工具:集成开发环境(IDE),如Eclipse、Keil等,提供代码编辑、编译、调试等功能。

4. 其他工具:示波器、逻辑分析仪、电源适配器等。

三、实验内容与步骤1. 硬件平台搭建(1)根据实验要求,连接嵌入式开发板与计算机,确保硬件连接正确无误。

(2)配置开发板电源,检查开发板各个外设是否正常工作。

2. 软件环境搭建(1)在计算机上安装嵌入式Linux操作系统,并配置交叉编译工具链。

(2)安装集成开发环境(IDE),如Eclipse或Keil,并进行相关配置。

3. 嵌入式系统开发(1)根据实验要求,设计嵌入式系统功能模块,编写相关代码。

(2)利用IDE进行代码编辑、编译、调试,确保程序正常运行。

4. 系统调试与优化(1)使用示波器、逻辑分析仪等工具,对系统进行调试,检查各个模块是否正常工作。

(2)根据调试结果,对系统进行优化,提高系统性能和稳定性。

5. 项目实施(1)根据实验要求,设计并实现一个嵌入式系统项目,如智能家居控制系统、工业自动化控制系统等。

(2)编写项目报告,总结项目实施过程和心得体会。

四、实验结果与分析通过本次嵌入式综合实训,我们完成了以下实验内容:1. 熟悉嵌入式开发平台的基本硬件和软件环境。

2. 掌握嵌入式系统开发流程,包括硬件选型、软件开发、系统调试等环节。

嵌入式实验课程设计报告

嵌入式实验课程设计报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

嵌入式实验报告

嵌入式实验报告

嵌入式实验报告学院:信息工程学院专业:计算机科学与技术班级:计算机班姓名:学号:指导老师:实验目录实验一嵌入式系统开发环境实验 (2)实验二系统节拍定时器实验 (12)实验三 GPIO控制实验 (16)实验四外部中断实验 (19)实验五串口通讯实验 (23)实验一嵌入式系统开发环境实验【实验目的】1.熟悉RealView MDK集成开发环境以及使用方法。

2.熟悉嵌入式系统软件设计方法和流程。

【实验内容】1. 通过例程熟悉、掌握嵌入式系统的编辑、编译、调试、下载及运行过程。

2. 建立自己的工程文件,在开发板板上调试程序。

【实验步骤】(一)程序安装1. 建议在安装之前关闭所有的应用程序,双击安装文件,弹出如图对话框,Next2.默认选择C盘文件下安装。

3.这样就在c盘底下出现keil文件夹。

4.单击选择菜单“>"License Management" 将弹出下面一张图的界面:复制其中CID号,以便在粘贴到下一步中的破解软件。

5.复制CID6.运行破解软件,将出现下面一张图的界面,把上步复制的CID号粘贴到相应位置,其他选项如图,然后点击“Generate”按钮,然后复制产生的序列号,粘贴到上一步的下面一张图的LIC输入框中,然后点击右侧的Add LIC,即可完成破解。

7.安装文件夹中的jlink驱动。

(二)工程创建、编译使用Realview MDK创建、完成一个新的工程只需要以下几个环节:→创建工程并选择处理器→选择工具集→创建源文件→配置硬件选项→配置对应启动代码→编译链接→下载→调试。

1.创建工程并选择处理器选择Project→New Project…,输入创建的新工程的文件名,即可创建一个新的工程。

2.创建一个新工程时,需要为工程选择一款对应处理器,在NXP 列表下选择LPC1768 芯片。

然后点击OK。

接下来出现的对话框选择“是或者也可以通过单击Project→Select Device for Target…在本次课程中,我们选择3.点击上图的ok,在弹出的对话框中确定是否需要复制启动文件选择否,如果选择是,将使用keil自带的启动文件4.在工程区域单击鼠标右键,选择manage components5.在“Project Components”标签下根据需要建立目录,第一栏是工程的根目录,在这里可以修改目录名;第二栏是添加Groups,可以根据个人习惯建立不同的组来分别放置不同类型的文件;第三栏是为建立的组添加代码文件用的,点击“Add Files”添加。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

嵌入式实习报告6篇

嵌入式实习报告6篇

嵌入式实习报告6篇嵌入式实习报告篇1此次设计我们采用以LM3S2100为微控制器,并通过硬件和软件两方面设计,结合6位LED数码管,放大整形电路,来实现频率计在嵌入式系统中的开发与应用。

本次课程设计其主要目的是通过这学期所学的ARM知识,来实现频率计的功能,本次设计我们利用了定时计数器的功能,对输入的信号进行实时的、高精度的频率测量,并通过6位LED数码显示管显示测量结果。

论文中阐述了相关的硬件原理与应用方案,并在此基础上叙述了软件设计最终结合硬件和软件完成了本次设计。

关键词:LM3S2100、频率计、LED数码显示管1绪论频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。

它是一种用十进制数字显示被测信号频率的数字测量仪器。

它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。

在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。

本频率计将采用定时、计数的方法测量频率。

测量范围在9kHz以下的方波,时基宽度为1us,10us,100us,1ms。

用ARM芯片实现自动测量功能。

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。

它以测量周期的方法对方波的频率进行自动的测量。

1.1本次设计任务一.设计题目:ARM为内核的频率计二.主要功能:用ARM的定时器/计数器的定时和计数功能,外部扩展6位数码管,要求累计每秒进入ARM的外部脉冲个数,用LED数码管显示出来,或是用上位机显示。

三.设计要求:用protel画出最小系统和外围扩展电路。

显示部分可用LED数码管或是上位机显示。

要求小组成员分工明确。

1.2设计基本原理所谓频率,就是周期性信号在单位时间(1s)内变化的次数,若在一定时间间隔T内测得这个周期性信号的重复变化次数为N,则其频率可表示为被测信号经放大整形电路变成计数器所要求的脉冲信号,其频率与被测信号的频率相同。

嵌入式实验报告 3 4 部分

嵌入式实验报告  3 4 部分

嵌入式控制系统及应用实验报告学期:2015-2016-1[第组] 嵌入式控制系统及应用实验报告基于ARM Cortex-M3 LPC1788目录实验一熟悉实验环境 (1)实验二嵌入式系统软件设计 (2)实验三矩阵键盘实验 (4)实验四RS-232串行通信实验 (8)实验四RS-232串行通信实验 (13)实验五A/D 转换实验 (16)实验六D/A 转换实验 (19)分数:实验一熟悉实验环境一、实验目的熟悉并掌握Keil μVersion 4开发环境,学会构建ARM Cortex-M3 LPC1788工程,学会使用JLINKv8下载器,编译与调试嵌入式系统软件。

二、实验内容1.熟悉Keil μVersion 4开发环境。

2. 阅读LPC1788芯片数据手册与用户手册,了解LPC1788的GPIO相关寄存器及其功能。

3.编程实现一个LED闪烁实验,使用JLINK下载灯闪烁代码到目标板。

三、实验设备硬件部分:PC计算机(宿主机)、LPC1788实验系统、JLINK仿真器。

软件部分:PC机WINDOWS系统、KEIL MDK μVersion 4软件、JLINK仿真调试驱动程序。

四、实验步骤1.启动PC机,进入keil环境。

2. 创建和打开项目。

3. 源程序编辑4 运行程序,观察并记录实验结果。

分数:实验二嵌入式系统软件设计一、实验目的1.了解实验系统的128*64液晶显示接口电路。

2.掌握LPC1788 GPIO口的使用方法。

3.掌握LPC1788的软件基本框架及设计技术。

二、实验内容1. 阅读128*64液晶显示模块的文档,掌握128*64液晶显示模块的工作原理。

2. 阅读SN74LVC4245A芯片文档,掌握SN74LVC4245A芯片的工作原理。

3. 完成128*64液晶显示模块程序的设计与调试。

三、实验设备硬件部分:PC机(宿主机)、LPC1788实验系统(目标板)、JLINK仿真器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、JLINK仿真调试驱动程序。

  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上。

三、程序算法实现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=10.0*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;//创建绘图设备上下文结构U16 chx[100];pdc=CreateDC();//创建绘图设备上下文strChar2Unicode(chx, str);TextOut(pdc, xx, yy, chx, TRUE, FONTSIZE_MIDDLE);//文本模式下显示文字 DestoryDC(pdc);//删除绘图设备上下文}注:由于计算器计算结果为double型数据,需将double型数据转为字符串。

实现函数如下:char *doub2str(double d, char *str){ char str2[40]; //double型数据d转为字符串存于str[]double f=-1.0;int j=0,k,i,st,t;if(d==0.0){str[0]='0';str[1]='\0';}//判断d为0else{if(d<0.0){d=-d;st=1;str[0]='-';}//判断为负数else st=0;i=(int)d; //正浮点数的整数部分while(i!=0){ str2[j++]=i%10+'0';i /= 10; }for(k=0;k<j;k++) str[k+st] = str2[j-1-k];if(st==1){j=j+st;st=0;}str[j++]='.';d -= (int)d; //正浮点数的小数部分for(i=0;i<10;i++){ d *= 10;str[j++] = (int)d+'0'; d -= (int)d; }while(str[--j]=='0');//去掉末尾的0str[++j] = '\0';}return str;}4、文本读取四、程序设计流程图五、程序实现主要函数功能说明(1)void Main_Task(void *Id):主任务函数;功能:创建消息结构;清除屏幕;调用创建按钮控件函数;等待消息;判断消息;调用消息处理函数;(2)void myButtonall():创建按钮控件函数功能:调用相关函数;SetRect();CreateButton();DrawButton(b19);创建按钮;(3)void onKey(unsigned int nkey, int fnkey):键盘消息响应函数功能:判断按键;调用相关按键响应函数;(4)void myontouch(int xxx,int yyy):触摸屏消息响应函数功能:识别触摸区域;调用响应触摸键响应函数;(5)void str2repol():字符表达式转逆波兰表达式函数功能:判别首位字符是否为'-'号,是则将字符串后移一位,首位置0;判别有无非法字符.有则标志位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():清屏函数功能:清除显示区域内容。

六、完整【main.c】程序#include "../ucos-ii/includes.h" /* uC/OS interface */ #include "../ucos-ii/add/osaddition.h"#include "../ucos-ii/add/ustring.h"#include "../inc/drivers.h"#include<math.h>#include "../inc/sys/lib.h"#include "../src/gui/gui.h"#include <string.h>#include <stdio.h>char TextFilename[]="/sys/ucos/fj/2.txt"; //自定义声明//文件test: 1+2+3+4+5+6+7+8+9=//文件1: 1+2+3+4+5+6+7+8+9=//文件2: 0.7+5*((1+2)/(2+4))=//文件3:FILE* pfile;#define maxs 200#define react 100#define xz 130#define yz 100char cal[maxs];char read[maxs];int number=1,clear=1;double result;U16 str1[20];char repol[maxs]; /*存储后缀表达式*/void Main_Task(void *Id); //Main_Test_Taskvoid calculate();void str2repol();void readfile();void clc();void send();void lcddisplay(char *str,int xx,int yy);void rezdisplay(double res);void onKey(unsigned int nkey, int fnkey);void myontouch(int xxx,int yyy);void myButtonall();void redraw(char key);void send(PButtonCtrl b);char zb2key(int x,int y);void dcr(char key);char *doub2str(double d, char *str);///******************任务定义***************///OS_STK Main_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈#define Main_Task_Prio 12void ontouch(unsigned int x, int y);OS_STK test_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈void test_Task(void *Id); //test_Test_Task#define test_Task_Prio 15PButtonCtrl b0;PButtonCtrl b1;PButtonCtrl b2;PButtonCtrl b3;PButtonCtrl b4;PButtonCtrl b5;PButtonCtrl b6;PButtonCtrl b7;PButtonCtrl b8;PButtonCtrl b9;PButtonCtrl b10;PButtonCtrl b11;PButtonCtrl b12;PButtonCtrl b13;PButtonCtrl b14;PButtonCtrl b15;PButtonCtrl b16;PButtonCtrl b17;PButtonCtrl b18;PButtonCtrl b19;//PTextCtrl b20;U32 CtrlID0=200;U32 CtrlID1=201;U32 CtrlID2=202;U32 CtrlID3=303;U32 CtrlID4=204;U32 CtrlID5=205;U32 CtrlID6=306;U32 CtrlID7=207;U32 CtrlID8=208;U32 CtrlID9=209;U32 CtrlID10=210;U32 CtrlID11=211;U32 CtrlID12=212;U32 CtrlID13=213;U32 CtrlID14=214;U32 CtrlID15=215;U32 CtrlID16=216;U32 CtrlID17=217;U32 CtrlID18=218;U32 CtrlID19=219;U32 CtrlID20=220;structRECT rect0;//定义矩形框结构structRECT rect1;structRECT rect2;structRECT rect3;structRECT rect4;structRECT rect5;structRECT rect6;structRECT rect7;structRECT rect8;structRECT rect9;structRECT rect10;structRECT rect11;structRECT rect12;structRECT rect13;structRECT rect14;structRECT rect15;structRECT rect16;structRECT rect17;structRECT rect18;structRECT rect19;structRECT rect20;U16 Caption0[16]; //定义按键功能 U16 Caption1[16];U16 Caption2[16];U16 Caption3[16];U16 Caption4[16];U16 Caption5[16];U16 Caption6[16];U16 Caption7[16];U16 Caption8[16];U16 Caption9[16];U16 Caption10[16];U16 Caption11[16];U16 Caption12[16];U16 Caption13[16];U16 Caption14[16];U16 Caption15[16];U16 Caption16[16];U16 Caption17[16];U16 Caption18[16];U16 Caption19[16];U16 Caption_Actived[16];U32 ButtonStyle=5;U32 ButtonStyle_Actived=3;U32 ButtonFontSize= 2;U32 TextStyle=4;U32 TextFontSize= 2;/******************主函数***************///int main(void){ARMTargetInit();OSInit();OSInitUart();initOSFile();#if USE_MINIGUI==0initOSMessage();initOSList();initOSDC();initOSCtrl();LoadFont();#endifloadsystemParam();LCD_printf("Create task on uCOS-II...\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;}//////////////////////////主任务/////////////////////////////////////////////////////////////////////////////void Main_Task(void *Id){PButtonCtrl b;POSMSG pMsg=0;//创建消息结构U32 tou;int x=0; int y=0;ClearScreen();myButtonall();for(;;){pMsg=WaitMessage(0); //等待消息switch(pMsg->Message){case OSM_KEY://键盘消息onKey(pMsg->WParam,pMsg->LParam);break;case OSM_TOUCH_SCREEN:x=pMsg->WParam&0xffff;y=pMsg->WParam>>16;myontouch(x,y); break;}DeleteMessage(pMsg);//删除消息,释放资源}}void onKey(unsigned int nkey, int fnkey){int ret;char *str, skey[16];cal[0]='0';if(clear==1){clear=0;clc();}//清屏lcddisplay(cal+1,xz,yz);if((nkey&KEY_DOWN)==0)return;switch(nkey&0xff){case 'N':str="NumLock";clc();readfile();break;case '\r':str="Enter";cal[number]='=';redraw(cal[number]);printf("表达式:%s\n",cal+1);lcddisplay(cal+1,xz,yz);str1[number]=cal[number];str2repol();calculate();for(ret=1;ret<=number;ret++){cal[ret]='\0';if(ret==number){number=1;ret=2;}}clear=2;break;default:skey[0]=nkey;skey[1]=0;str=skey;cal[number]=nkey;redraw(cal[number]);lcddisplay(cal+1,xz,yz);str1[number]=cal[number];number+=1;if(clear==2) clear=1;}printf("%s\r",cal+1);}void myontouch(int xxx,int yyy){int ret;if(clear==1){clear=0;clc();}//清屏cal[number]=zb2key(xxx,yyy); redraw(cal[number]);switch(cal[number]){case 'd':printf("\ndelre\n");dcr(cal[number]);break;case 'c':dcr(cal[number]);break;case 'r':dcr(cal[number]);break;case '=':printf("表达式:%s\n",cal+1);lcddisplay(cal+1,xz,yz);str1[number]=cal[number];str2repol();calculate();clear=2;for(ret=1;ret<=number;ret++){cal[ret]='\0';if(ret==number){number=1;ret=2;}}break;default:if(clear==2) clear=1;str1[number]=cal[number];lcddisplay(cal+1,xz,yz);number++;break;}printf("%s\r",cal+1);}void str2repol(){ /*将算术表达式转化为后缀表达式*/char str[maxs],strtem[maxs]; /*存储原算术表达式*/char stack[maxs]; /*作为栈使用*/char ch,*er;int i,t,top=0,j,sum,st;i=0; /*获取用户输入的表达式*/do{i++;str[i]=cal[i];}while(cal[i]!='=' && i!=maxs);sum=i; ////////////////////sum中记录了str表达式中的字符的个数t=1;i=1;if(str[1]=='-'){for(st=1;st<sum;st++)strtem[st]=str[st+1];str[1]='0';str[2]='-';for(st=3;st<=sum+1;st++)str[st]=strtem[st-2];sum++;}ch=str[i];i++;//ch为表达式中第一个字符while(ch!='='){switch(ch){case '(': /*判定为左括号*/top++;stack[top]=ch;break;case ')': /*判定为右括号*/while(stack[top]!='('){repol[t]=stack[top];top--;t++;}top--;break;case '+': /*判定为加减号*/ case '-':while(top!=0&&stack[top]!='('){repol[t]=stack[top];top--;t++;}top++;stack[top]=ch;break;case '*': /*判定为乘除号*/case '/':while(stack[top]=='*'||stack[top]=='/'){repol[t]=stack[top];top--;t++;}top++;stack[top]=ch;break;case ' ':break;default:while(ch>='0'&&ch<='9'||ch=='.'){ /*判定为数字*/ 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);// exit(0); /*异常退出*/}top--;break;default: /*将数字字符转化为对应的数值*/d1=0;d0=0;counter=0;while(ch>='0'&&ch<='9'||ch=='.'){if(ch!='.'&&zh==1){d1=10.0*d1+ch-'0'; }if(ch=='.')zh=0;if(ch!='.'&&zh==0){d0=10.0*d0+ch-'0';counter++;}ch=repol[t];t++;}//计算zh=1;for(i=0;i<counter;i++){d0=d0/10.0;}dd=d1+d0;top++;stack[top]=dd;}ch=repol[t];t++;} //转换运算result=stack[top];printf("\n计算结果:%f\n\n",stack[top]);rez=doub2str(result,restr);lcddisplay(rez,xz,yz+20);}void lcddisplay(char *str,int xx,int yy){PDC pdc;//创建绘图设备上下文结构U16 chx[100];pdc=CreateDC();//创建绘图设备上下文fstrChar2Unicode(chx, str);TextOut(pdc, xx, yy, chx, TRUE, FONTSIZE_MIDDLE);//文本模式下显示文字DestoryDC(pdc);//删除绘图设备上下文}void myButtonall(){PDC pdc;//定义绘图设备上下文结构pdc=CreateDC();//创建绘图设备上下文//定义按键功能Int2Unicode(1,Caption0);Int2Unicode(2,Caption1);Int2Unicode(3,Caption2);strChar2Unicode(Caption3,"+");Int2Unicode(4,Caption4);Int2Unicode(5,Caption5);Int2Unicode(6,Caption6);strChar2Unicode(Caption7,"-");Int2Unicode(7,Caption8);Int2Unicode(8,Caption9);Int2Unicode(9,Caption10);strChar2Unicode(Caption11,"*");strChar2Unicode(Caption12,"(");Int2Unicode(0,Caption13);strChar2Unicode(Caption14,")");strChar2Unicode(Caption15,"/");strChar2Unicode(Caption16,"del");strChar2Unicode(Caption17,"read");strChar2Unicode(Caption18,"clear");strChar2Unicode(Caption19,"enter" );strChar2Unicode(Caption_Actived,"AAA" );SetRect(&rect0, 165,165,235,235); //第一行SetRect(&rect1, 245,165,315,235);SetRect(&rect2, 325,165,395,235);SetRect(&rect3, 405,165,475,235);SetRect(&rect4, 165,245,235,315); //第二行SetRect(&rect5, 245,245,315,315);SetRect(&rect6, 325,245,395,315);SetRect(&rect7, 405,245,475,315);SetRect(&rect8, 165,325,235,395);//第三行SetRect(&rect9, 245,325,315,395);SetRect(&rect10, 325,325,395,395);SetRect(&rect11, 405,325,475,395);SetRect(&rect12, 165,405,235,475);//第四行SetRect(&rect13, 245,405,315,475);SetRect(&rect14, 325,405,395,475);SetRect(&rect15, 405,405,475,475);SetRect(&rect16, 5,165,155,315);//左1SetRect(&rect17, 5,325,155,475);//左2SetRect(&rect18, 485,165,635,315);//右1SetRect(&rect19, 485,325,635,475);//右2SetRect(&rect20, 165,5,475,155);//顶栏//设置间距10后坐标:b0=CreateButton(CtrlID0, &rect0, ButtonFontSize, ButtonStyle,Caption0, NULL);b1=CreateButton(CtrlID1, &rect1, ButtonFontSize, ButtonStyle, Caption1, NULL);b2=CreateButton(CtrlID2, &rect2, ButtonFontSize, ButtonStyle_Actived, Caption2, NULL);b3=CreateButton(CtrlID3, &rect3, ButtonFontSize, ButtonStyle, Caption3, NULL);b4=CreateButton(CtrlID4, &rect4, ButtonFontSize, ButtonStyle, Caption4, NULL);b5=CreateButton(CtrlID5, &rect5, ButtonFontSize, ButtonStyle, Caption5, NULL);b6=CreateButton(CtrlID6, &rect6, ButtonFontSize, ButtonStyle, Caption6, NULL);b7=CreateButton(CtrlID7, &rect7, ButtonFontSize, ButtonStyle, Caption7, NULL);b8=CreateButton(CtrlID8, &rect8, ButtonFontSize, ButtonStyle, Caption8, NULL);b9=CreateButton(CtrlID9, &rect9, ButtonFontSize, ButtonStyle, Caption9, NULL);b10=CreateButton(CtrlID10, &rect10, ButtonFontSize, ButtonStyle, Caption10, NULL);b11=CreateButton(CtrlID11, &rect11, ButtonFontSize, ButtonStyle, Caption11, NULL);b12=CreateButton(CtrlID12, &rect12, ButtonFontSize, ButtonStyle, Caption12, NULL);b13=CreateButton(CtrlID13, &rect13, ButtonFontSize, ButtonStyle, Caption13, NULL);b14=CreateButton(CtrlID14, &rect14, ButtonFontSize, ButtonStyle, Caption14, NULL);b15=CreateButton(CtrlID15, &rect15, ButtonFontSize, ButtonStyle, Caption15, NULL);b16=CreateButton(CtrlID16, &rect16, ButtonFontSize, ButtonStyle, Caption16, NULL);b17=CreateButton(CtrlID17, &rect17, ButtonFontSize, ButtonStyle, Caption17, NULL);b18=CreateButton(CtrlID18, &rect18, ButtonFontSize, ButtonStyle, Caption18, NULL);b19=CreateButton(CtrlID19, &rect19, ButtonFontSize, ButtonStyle, Caption19, NULL);//b20=CreateTextCtrl(CtrlID20, &rect20, TextFontSize, TextStyle, NULL, NULL);DrawButton(b0);DrawButton(b1);DrawButton(b2);DrawButton(b3);DrawButton(b4);DrawButton(b5);DrawButton(b6);DrawButton(b7);DrawButton(b8);DrawButton(b9);DrawButton(b10);DrawButton(b11);DrawButton(b12);DrawButton(b13);DrawButton(b14);DrawButton(b15);DrawButton(b16);DrawButton(b17);DrawButton(b18);DrawButton(b19);//DrawTextCtrl(b20);DestoryDC(pdc);//删除绘图设备上下文}void send(PButtonCtrl b){POSMSG pmsg;pmsg=OSCreateMessage(NULL, OSM_KEY,2147483697,0);SendMessage(pmsg);}void redraw(char key){PDC pdc;//定义绘图设备上下文结构pdc=CreateDC();//创建绘图设备上下文switch(key){case'1':DestoryButton(b0);b0=CreateButton(CtrlID0, &rect0, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b0);DestoryButton(b0);b0=CreateButton(CtrlID0, &rect0, ButtonFontSize, ButtonStyle, Caption0, NULL);OSTimeDly(react);DrawButton(b0);break;case'2':DestoryButton(b1);b1=CreateButton(CtrlID1, &rect1, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b1);DestoryButton(b1);b1=CreateButton(CtrlID1, &rect1, ButtonFontSize, ButtonStyle, Caption1, NULL);OSTimeDly(react);DrawButton(b1);break;case'3':DestoryButton(b2);b2=CreateButton(CtrlID2, &rect2, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b2);DestoryButton(b2);b2=CreateButton(CtrlID2, &rect2, ButtonFontSize, ButtonStyle, Caption2, NULL);OSTimeDly(react);DrawButton(b2);break;case'+':DestoryButton(b3);b3=CreateButton(CtrlID3, &rect3, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b3);DestoryButton(b3);b3=CreateButton(CtrlID3, &rect3, ButtonFontSize, ButtonStyle, Caption3, NULL);OSTimeDly(react);DrawButton(b3);break;case'4':DestoryButton(b4);b4=CreateButton(CtrlID4, &rect4, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b4);DestoryButton(b4);b4=CreateButton(CtrlID4, &rect4, ButtonFontSize, ButtonStyle, Caption4, NULL);OSTimeDly(react);DrawButton(b4);break;case'5':DestoryButton(b5);b5=CreateButton(CtrlID5, &rect5, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b5);DestoryButton(b5);b5=CreateButton(CtrlID5, &rect5, ButtonFontSize, ButtonStyle, Caption5, NULL);OSTimeDly(react);DrawButton(b5);break;case'6':DestoryButton(b6);b6=CreateButton(CtrlID6, &rect6, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b6);DestoryButton(b6);b6=CreateButton(CtrlID6, &rect6, ButtonFontSize, ButtonStyle, Caption6, NULL);OSTimeDly(react);DrawButton(b6);break;case'-':DestoryButton(b7);b7=CreateButton(CtrlID7, &rect7, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b7);DestoryButton(b7);b7=CreateButton(CtrlID7, &rect7, ButtonFontSize, ButtonStyle, Caption7, NULL);OSTimeDly(react);DrawButton(b7);break;case'7':DestoryButton(b8);b8=CreateButton(CtrlID8, &rect8, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b8);DestoryButton(b8);b8=CreateButton(CtrlID8, &rect8, ButtonFontSize, ButtonStyle, Caption8, NULL);OSTimeDly(react);DrawButton(b8);break;case'8':DestoryButton(b9);b9=CreateButton(CtrlID9, &rect9, ButtonFontSize, ButtonStyle,Caption_Actived, NULL);DrawButton(b9);DestoryButton(b9);b9=CreateButton(CtrlID9, &rect9, ButtonFontSize, ButtonStyle, Caption9, NULL);OSTimeDly(react);DrawButton(b9);break;case'9':DestoryButton(b10);b10=CreateButton(CtrlID10, &rect10, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b10);DestoryButton(b10);b10=CreateButton(CtrlID10, &rect10, ButtonFontSize, ButtonStyle, Caption10, NULL);OSTimeDly(react);DrawButton(b10);break;case'*':DestoryButton(b11);b11=CreateButton(CtrlID11, &rect11, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b11);DestoryButton(b11);b11=CreateButton(CtrlID11, &rect11, ButtonFontSize, ButtonStyle, Caption11, NULL);OSTimeDly(react);DrawButton(b11);break;case'(':DestoryButton(b12);b12=CreateButton(CtrlID12, &rect12, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b12);DestoryButton(b12);b12=CreateButton(CtrlID12, &rect12, ButtonFontSize, ButtonStyle, Caption12, NULL);OSTimeDly(react);DrawButton(b12);break;case'0':DestoryButton(b13);b13=CreateButton(CtrlID13, &rect13, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b13);DestoryButton(b13);b13=CreateButton(CtrlID13, &rect13, ButtonFontSize, ButtonStyle,Caption13, NULL);OSTimeDly(react);DrawButton(b13);break;case')':DestoryButton(b14);b14=CreateButton(CtrlID14, &rect14, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b14);DestoryButton(b14);b14=CreateButton(CtrlID14, &rect14, ButtonFontSize, ButtonStyle, Caption14, NULL);OSTimeDly(react);DrawButton(b14);break;case'/':DestoryButton(b15);b15=CreateButton(CtrlID15, &rect15, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b15);DestoryButton(b15);b15=CreateButton(CtrlID15, &rect15, ButtonFontSize, ButtonStyle, Caption15, NULL);OSTimeDly(react);DrawButton(b15);break;case'd':DestoryButton(b16);b16=CreateButton(CtrlID16, &rect16, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b16);DestoryButton(b16);b16=CreateButton(CtrlID16, &rect16, ButtonFontSize, ButtonStyle, Caption16, NULL);OSTimeDly(react);DrawButton(b16);break;case'r':DestoryButton(b17);b17=CreateButton(CtrlID17, &rect17, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b17);DestoryButton(b17);b17=CreateButton(CtrlID17, &rect17, ButtonFontSize, ButtonStyle, Caption17, NULL);OSTimeDly(react);DrawButton(b17);break;case'c':DestoryButton(b18);b18=CreateButton(CtrlID18, &rect18, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b18);DestoryButton(b18);b18=CreateButton(CtrlID18, &rect18, ButtonFontSize, ButtonStyle, Caption18, NULL);OSTimeDly(react);DrawButton(b18);break;case'=':DestoryButton(b19);b19=CreateButton(CtrlID19, &rect19, ButtonFontSize, ButtonStyle, Caption_Actived, NULL);DrawButton(b19);DestoryButton(b19);b19=CreateButton(CtrlID19, &rect19, ButtonFontSize, ButtonStyle, Caption19, NULL);OSTimeDly(react);DrawButton(b19);break;default:break;}DestoryDC(pdc);//删除绘图设备上下文}char zb2key(int x,int y){char key;if((160<x)&&(x<=240)&&(165<=y)&&(y<=240)) key='1';else if((240<x)&&(x<=320)&&(165<=y)&&(y<=240)) key='2';else if((320<x)&&(x<=400)&&(165<=y)&&(y<=240)) key='3';else if((400<x)&&(x<=475)&&(165<=y)&&(y<=240)) key='+';else if((160<x)&&(x<=240)&&(240<y)&&(y<=320)) key='4';else if((240<x)&&(x<=320)&&(240<y)&&(y<=320)) key='5';else if((320<x)&&(x<=400)&&(240<y)&&(y<=320)) key='6';else if((400<x)&&(x<=475)&&(240<y)&&(y<=320)) key='-';else if((160<x)&&(x<=240)&&(320<y)&&(y<=400)) key='7';else if((240<x)&&(x<=320)&&(320<y)&&(y<=400)) key='8';else if((320<x)&&(x<=400)&&(320<y)&&(y<=400)) key='9';else if((400<x)&&(x<=475)&&(320<y)&&(y<=400)) key='*';else if((160<x)&&(x<=240)&&(400<y)&&(y<=480)) key='(';else if((240<x)&&(x<=320)&&(400<y)&&(y<=480)) key='0';else if((320<x)&&(x<=400)&&(400<y)&&(y<=480)) key=')';else if((400<x)&&(x<=475)&&(400<y)&&(y<=480)) key='/';else if((5<=x)&&(x<=160)&&(165<y)&&(y<=320)) key='d';else if((5<=x)&&(x<=160)&&(320<y)&&(y<=480)) key='r';else if((485<=x)&&(x<=635)&&(165<y)&&(y<=320))key='c';else if((485<=x)&&(x<=635)&&(320<y)&&(y<=480))key='=';else key=' ';return key;}void dcr(char key){char non[100],tem1[maxs];int n,del;for(n=0;n<100;n++){non[n]=' ';}switch(key){case 'd':clc();cal[number-1] = '\0';cal[number] = '\0';cal[number+1] = '\0';cal[number+2] = '\0';number=number-1;lcddisplay(cal+1,xz,yz);break;case 'c':clc();break;case 'r':readfile();break;default:break;}}void readfile(){clear=2;pfile=fopen(TextFilename,"r");//打开文件if(pfile==NULL){//文件打开失败LCD_printf("Can't Open file!\n");for(;;) OSTimeDly(1000);}while(readline(read, sizeof(read), pfile)){//以行的方式读文件 int ii;number=sizeof(read);for(ii=0; ii<=number; ii++){cal[ii+1]=read[ii];}printf("read=%s\n",read);printf("cal=%s\n",cal+1);lcddisplay(cal+1,xz,yz);str1[number]=cal[number];trans();compvalue();//clear=1;int ret;for(ret=1;ret<=number;ret++){cal[ret]='\0';if(ret==number){number=1;ret=2;}}}fclose(pfile);//关闭文件//for(;;) OSTimeDly(1000);}void clc(){char non[100];int n,ret;for(n=0;n<100;n++){non[n]=' ';}lcddisplay(non,xz,yz);lcddisplay(non,xz,yz+20);}char *doub2str(double d, char *str){char str2[40];double f=-1.0;int j=0,k,i,st,tem,temz,tem2;if(d==0.0){str[0]='0';str[1]='\0';}else{if(d<0.0){printf("d=%f\t\n",d);tem2=d*f;d=tem2;st=1;str[0]='-';} else st=0;temz=(int)d;tem=d;i=(int)d; //浮点数的整数部分while(i!=0){str2[j++]=i%10+'0';i /= 10;}for(k=0;k<j;k++) str[k+st] = str2[j-1-k];if(st==1){j=j+st;st=0;}str[j++]='.';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;。

相关文档
最新文档