课程设计—模拟计算器设计

合集下载

模拟计算器课程设计报告

模拟计算器课程设计报告

合肥学院计算机科学与技术系课程设计报告2009~2010学年第二学期课程JAVA语言课程设计课程设计名称模拟计算器专业班级07网络工程(1)姓名舒业超指导教师许强张贯虹2010年9月一、需求分析程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入‘=’ 符号后,窗口显示出结果。

故需先定义一个类,继承Frame类,来实现一个窗口的显示,还需添加两个文本框,一个用于输入运算表达式,另一个显示运算结果,并以等‘=’号为表达式结束符,并触发运算的开始,所以还需设置一个键盘监听器,监听‘=’号的输入。

该计算器还要两个C(清除)、A(全清除)按钮,并予以监听,触发后进行相应操作。

如果用户输入的表达式不合法,需判别出来并给出相应的错误提示。

二. 设计1.设计思想:该程序有较好的用户操作界面,组件布局采用手动布局,并对相应组件设置监听器,触发后执行相应操作。

该程序主要的算法功能是如何利用栈实现运算符优先级的比较。

先是定义申请两个堆栈,一个作为运算数栈,另一个作为运算符栈,这两个堆栈是扫描表达式时的存储容器,在扫描过程中,扫描的单位是一个字符,扫描到的运算数入数栈,运算符入运算符栈,待比较优先级后,运算数出栈进行运算。

对于表达式的非法性判断,通过捕获异常来处理,捕获到异常后,弹出一个错误提示对话框,提示表达式的非法,并要求用户全清除后重新输入正确并完整的表达式。

2.功能设计定义一个myframe类来继承Frame类,实现窗口的显示,并在其中进行手动布局,即添加一个表达式输入文本框、一个结果显示文本框、C(清除)以及A(全清除)按钮。

在表达式文本框中输入完整表达式之后按下‘=’号后,通过键盘监听器的监听,开始进行运算。

运算过程如下:先在窗口类中将表达式提取出来,此时表达式为串字符串,需通过一个方法将其进行切割,切割成字符数组形式,然后将字符数组传递给一个Calculator类中的Calculator1方法(即运算引擎)进行表达式的计算,在这个方法执行结束时可返回运算的结果,接着将结果显示在结果文本框中即可。

proteus仿真计算器课程设计

proteus仿真计算器课程设计

proteus仿真计算器课程设计一、课程目标知识目标:1. 学生能理解Proteus仿真软件的基本原理和操作流程;2. 学生能掌握利用Proteus进行简单计算器电路设计与仿真;3. 学生能了解并描述计算器电路中的基本电子元件及其功能;4. 学生掌握基本的数字电路知识,如逻辑门、触发器等。

技能目标:1. 学生能独立使用Proteus软件进行电路设计;2. 学生能通过Proteus软件进行电路仿真,并对结果进行分析;3. 学生能运用已学知识解决实际计算器电路设计中遇到的问题;4. 学生能通过团队协作,共同完成一个具有基本功能的计算器电路设计。

情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和实践欲望;2. 学生在团队合作中学会沟通、协作,培养团队精神和责任感;3. 学生通过动手实践,体验成功的喜悦,增强自信心;4. 学生树立正确的价值观,认识到科技发展对国家和社会的重要性。

本课程针对高年级学生,结合电子技术课程内容,以Proteus仿真软件为载体,使学生掌握基本电子元件和数字电路知识。

课程注重实践操作和团队协作,旨在提高学生的实际动手能力和创新能力,为后续深入学习电子技术打下坚实基础。

通过本课程的学习,学生将能够独立完成一个简单计算器电路的设计与仿真,并在过程中培养良好的情感态度和价值观。

二、教学内容1. 计算器电路设计基础理论:- 简介计算器电路的组成和原理;- 学习基本电子元件:电阻、电容、二极管、三极管等;- 了解并掌握数字电路基础知识:逻辑门、触发器、计数器等。

2. Proteus仿真软件操作:- 学习Proteus软件的基本界面和功能;- 掌握Proteus软件的电路设计、仿真和调试方法;- 学习如何利用Proteus软件绘制电路图、设置元件参数等。

3. 计算器电路设计与仿真:- 根据计算器功能需求,设计电路原理图;- 利用Proteus软件进行电路仿真,观察并分析仿真结果;- 针对仿真过程中出现的问题,进行调试和优化。

MFC课程设计报告—模拟计算器

MFC课程设计报告—模拟计算器

计算机MFC课程设计报告——模拟计算器姓名:学号:02011227联系电话:指导教师:东南大学机械工程学院2012年10月14日模拟计算器摘要摘要内容:以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln 、sin、cos、^、.、pi、e八个按钮控件的消息映射及程序代码的添加和修改。

从中学会了制作简单的基于对话框的小工具、掌握了常用控件的使用、明白了消息映射及消息处理、提高了VC++编程水平。

关键词:四则运算小数点计算器Analog calculatorAbstractContent of abstract: Simple calculator in textbooks as the foundation, first realized the addition, subtraction, multiplication, division, and reciprocal and square root of the mixed operation, and can clear screen and reverse operation, and then to improve the book failed to realize the multiplication, division operation of continuous operation, and finally to be designed and completed the eight button control news mapping and program code to add and modify. Learnt how to make simple dialog-based small tools, mastered the use of commonly used controls, see news mapping and information processing, improve the level of programming.Key word: arithmetic Decimal point Calculator本计算器是基于VC++的MFC编程,可完成大多数简单操作,其运行后界面如下图:以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln 、sin、cos、^、.、pi、e 八个按钮控件的消息映射及程序代码的添加和修改。

Java课设 模拟科学计算器

Java课设 模拟科学计算器

Java课程设计设计题目模拟科学计算器班级计本1120班姓名王XX 学号 1162042000一、设计目的《Java课程设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。

其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能力。

二、设计任务模拟科学计算器要求:界面模拟Windows中的计算器程序。

实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。

实现要点:添加相关组件并进行按钮事件处理。

三、课题设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,22个按钮,总体界面用BorderLayout布局。

文本框放置在最north,然后0到9以及+,-,×,÷,.,!的按钮放置到一个面板Panel中,添加到整体布局的center,最后sin,cos,^,=的按钮放在最south,界面设计完成。

本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行加、减、乘、除阶乘、正弦、余弦和指数运算。

还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。

四、设计内容1.需求分析本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其他的辅助功能(阶乘、正弦、余弦、指数运算);界面简洁实用,模拟Windows中的计算器程序,要提供主要的设计思路、类的设计。

2.总体设计(1)包的描述本程序导入了java.awt.BorderLayout包,java.awt.Color包,java.awt.GridLayout包,java.awt.event.ActionEvent包,java.awt.event.ActionListener包,java.text.DecimalFormat包,javax.swing.JButton包,javax.swing.JFrame包,javax.swing.JPanel包,javax.swing.JTextField包(2)类的描述本程序共有五个类。

计算器模拟系统设计-毕业设计

计算器模拟系统设计-毕业设计

计算器模拟系统设计学生:XXX 指导教师:XXX内容摘要:本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED 上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。

硬件选择AT89C51单片机和74lS164,输入用4×4矩阵键盘。

显示用5位7段共阴极LED静态显示。

软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

选用编译效率最高的Keil 软件用汇编语言进行编程,并用proteus仿真。

关键词:LED 计算器 AT89C51芯片 74LS164Calculator simulation system desig nAbstract:The design is a simple calculator based on 51 series microcontroller system design, to complete the calculator keyboard input, add, subtract, multiply, and in addition to three unsigned numeric simple four operations, and the corresponding result will be displayed on the LED.The design process of hardware and software aspects of the synchronous design. Hardware choose AT89C51 microcontroller and 74ls164--enter the 4 × 4 matrix keyboard. Static display with five 7-segment common cathode LED display. Software calculator function from the analysis, flow charts, design, and then program the preparation of system design. Selected to compile the most efficient Keil software in assembly language programming, and with proteus simulation.Keywords: LED calculator AT89C51 chip 74LS164目录前言 (1)1 设计任务和要求 (1)1.1 设计要求 (1)1.2 设计方案的确定 (2)2 单片机简要原理 (2)2.1 AT89c51介绍 (2)2.2 芯片74LS164介绍 (5)3 硬件设计 (6)3.1 键盘电路的设计 (6)3.2 显示电路的设计 (7)3.3 其他电路设计 (7)3.3.1 复位、时钟电路设计 (7)3.3.2 多位数码管电路显示的驱动电路 (8)4 软件设计 (9)4.1 主程序的设计 (9)4.2 显示、读键模块的设计 (10)4.3 其他内容说明 (11)4.3.1 定时查键的程序设计 (11)4.3.2 软件的可靠性设计 (12)4.4 源程序代码(见附录) (12)5 调试与仿真 (12)5.1 Keil C51单片机软件开发系统 (12)5.2 proteus的操作 (12)5.2.1 硬件电路图的接法操作 (12)5.2.2单片机系统PROTEUS设计与仿真过程 (13)6 结束语 (13)附录:计算器程序代码 (15)参考文献: (23)计算器模拟系统设计前言近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。

课程设计—模拟计算器设计

课程设计—模拟计算器设计

课程设计—模拟计算器设计void MainTask1(void *pdata) { pdata=pdata; BSP_Init ; //硬件初始化 GUI_Init ; //GUI初始化 GUI_SetBkColor(GUI_BLACK); //设置彩屏背景颜色为黑色GUI_Clear ; GUI_TOUCH_Calibrate(0,0,320,296,3854);GUI_TOUCH_Calibrate(1,0,240,249,3906); //屏幕校准 // GUI_CURSOR_Show ;//显示光标WidgetCreate ; //建立控件GUI_Exec ;//显示控件for(;;) { KeyCallback(edit); //响应控件 } }/*任务二:专门为触屏和控件的更新而建立的任务*/ void Task1(void *pdata) { pdata=pdata; for(;;) {WM_Exec ;//更新窗口GUI_TOUCH_Exec ; //更新触屏 OSTimeDly(10); } }b)、计算器图形界面的相关代码/*GUI相关变量*/ EDIT_Handle edit;BUTTON_Handle num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;//数字0~9。

BUTTON_HandlenumPoint,numPlus,numSub,numMul,numDiv;//小数点,加号,减号。

除号,乘号BUTTON_Handle clear,inverse,square,equal,about; //清除,倒数,平方,等于/*图形界面函数*/void WidgetCreate(void) { /*画计算器边框*/6GUI_SetPenSize(3); GUI_SetColor(GUI_RED); GUI_DrawLine(7,0,7,239);GUI_DrawLine(311,0,311,239);GUI_DrawLine(7,238,311,238); GUI_DrawLine(7,1,311,1);//设置之前宽度为3个像素 //设置边框颜色为红色//画边框edit=EDIT_Create(15,5,225,50,'e',10,WM_CF_SHOW);//创建xx框 EDIT_SetFont(edit,&GUI_Font32B_ASCII); //设置xx框内容字体大小num7=BUTTON_Create(15,60,50,35,'7',WM_CF_SHOW);//创建数字7的按钮BUTTON_SetFont(num7,&GUI_Font24_ASCII); //设置字体24号BUTTON_SetText(num7,\ //按钮上显示7 BUTTON_SetTextColor(num7,0,GUI_WHITE); //设置字体颜色 BUTTON_SetBkColor(num7,0,GUI_DARKBLUE); //设置按钮背景颜色num4=BUTTON_Create(15,105,50,35,'4',WM_CF_SHOW);//创建数字4的按钮BUTTON_SetFont(num4,&GUI_Font24_ASCII);BUTTON_SetText(num4,\BUTTON_SetTextColor(num4,0,GUI_WHITE); BUTTON_SetBkColor(num4,0,GUI_DARKBLUE);num1=BUTTON_Create(15,150,50,35,'1',WM_CF_SHOW); //创建数字1的按钮BUTTON_SetFont(num1,&GUI_Font24_ASCII);BUTTON_SetText(num1,\BUTTON_SetTextColor(num1,0,GUI_WHITE); BUTTON_SetBkColor(num1,0,GUI_DARKBLUE);num0=BUTTON_Create(15,195,110,35,'0',WM_CF_SHOW);//创建数字0的按钮BUTTON_SetFont(num0,&GUI_Font24_ASCII);BUTTON_SetText(num0,\BUTTON_SetTextColor(num0,0,GUI_WHITE);BUTTON_SetBkColor(num0,0,GUI_DARKBLUE);num8=BUTTON_Create(74,60,50,35,'8',WM_CF_SHOW); //创建数字8的按钮BUTTON_SetFont(num8,&GUI_Font24_ASCII);BUTTON_SetText(num8,\BUTTON_SetTextColor(num8,0,GUI_WHITE); BUTTON_SetBkColor(num8,0,GUI_DARKBLUE);num5=BUTTON_Create(74,105,50,35,'5',WM_CF_SHOW); //创建数字5的按钮BUTTON_SetFont(num5,&GUI_Font24_ASCII);BUTTON_SetText(num5,\BUTTON_SetTextColor(num5,0,GUI_WHITE); BUTTON_SetBkColor(num5,0,GUI_DARKBLUE);num2=BUTTON_Create(74,150,50,35,'2',WM_CF_SHOW); //创建数字2的按钮BUTTON_SetFont(num2,&GUI_Font24_ASCII);BUTTON_SetText(num2,\BUTTON_SetTextColor(num2,0,GUI_WHITE);7钮钮按钮BUTTON_SetBkColor(num2,0,GUI_DARKBLUE);num9=BUTTON_Create(133,60,50,35,'9',WM_CF_SHOW); //创建数字9的按钮BUTTON_SetFont(num9,&GUI_Font24_ASCII);BUTTON_SetText(num9,\BUTTON_SetTextColor(num9,0,GUI_WHITE); BUTTON_SetBkColor(num9,0,GUI_DARKBLUE);num6=BUTTON_Create(133,105,50,35,'6',WM_CF_SHOW);//创建数字6的按钮BUTTON_SetFont(num6,&GUI_Font24_ASCII);BUTTON_SetText(num6,\BUTTON_SetTextColor(num6,0,GUI_WHITE); BUTTON_SetBkColor(num6,0,GUI_DARKBLUE);num3=BUTTON_Create(133,150,50,35,'3',WM_CF_SHOW); //创建数字3的按钮BUTTON_SetFont(num3,&GUI_Font24_ASCII);BUTTON_SetText(num3,\BUTTON_SetTextColor(num3,0,GUI_WHITE); BUTTON_SetBkColor(num3,0,GUI_DARKBLUE);numPoint=BUTTON_Create(133,195,50,35,'.',WM_CF_SHOW );//创建小数点.的按BUTTON_SetFont(numPoint,&GUI_Font24_ASCII); BUTTON_SetText(numPoint,\BUTTON_SetTextColor(numPoint,0,GUI_WHITE); BUTTON_SetBkColor(numPoint,0,GUI_DARKBLUE);numDiv=BUTTON_Create(192,60,50,35,'/',WM_CF_SHOW);/ /创建除号/的按钮BUTTON_SetFont(numDiv,&GUI_Font24_ASCII);BUTTON_SetText(numDiv,\numMul=BUTTON_Create(192,105,50,35,'*',WM_CF_SHOW); //创建乘号*的按钮BUTTON_SetFont(numMul,&GUI_Font24_ASCII);BUTTON_SetText(numMul,\numSub=BUTTON_Create(192,150,50,35,'-',WM_CF_SHOW); //创建减号-的按钮BUTTON_SetFont(numSub,&GUI_Font24_ASCII);BUTTON_SetText(numSub,\numPlus=BUTTON_Create(192,195,50,35,'+',WM_CF_SHOW); //创建加好+的按BUTTON_SetFont(numPlus,&GUI_Font24_ASCII);BUTTON_SetText(numPlus,\clear=BUTTON_Create(251,60,50,35,'c',WM_CF_SHOW); //创建清除键clear的BUTTON_SetFont(clear,&GUI_Font24_ASCII);BUTTON_SetText(clear,\BUTTON_SetBkColor(clear,0,GUI_YELLOW);8钮钮的按钮inverse=BUTTON_Create(251,105,50,35,'i',WM_CF_SHOW); //创建倒数1/X的按BUTTON_SetFont(inverse,&GUI_Font24_ASCII);BUTTON_SetText(inverse,\square=BUTTON_Create(251,150,50,35,'s',WM_CF_SHOW); //创建平方X^2的按BUTTON_SetFont(square,&GUI_Font24_ASCII);BUTTON_SetText(square,\equal=BUTTON_Create(251,195,50,35,'=',WM_CF_SHOW);//创建等号=的按钮BUTTON_SetFont(equal,&GUI_Font24_ASCII);BUTTON_SetText(equal,\BUTTON_SetBkColor(equal,0,GUI_YELLOW);about=BUTTON_Create(249,20,57,30,'a',WM_CF_SHOW); //创建说明信息aboutBUTTON_SetFont(about,&GUI_Font24_ASCII); BUTTON_SetText(about,\BUTTON_SetBkColor(about,0,GUI_LIGHTGRAY); }c)、按键响应代码/*按钮响应函数*/void KeyCallback(EDIT_Handle obj) { /*重画边框,因为控件在最上层,会把下层的图案覆盖掉*/ GUI_SetPenSize(3); GUI_SetColor(GUI_RED); GUI_DrawLine(7,0,7,239);GUI_DrawLine(311,0,311,239);GUI_DrawLine(7,238,311,238);GUI_DrawLine(7,1,311,1); switch (GUI_WaitKey ) { case '0': if(operaFlag==1) //如果是刚操作完运算符号后的数,先把xx框清掉{EDIT_SetText(obj,NULL); operaFlag=0;}EDIT_GetText(obj,editBuf,10); if((*editBuf!='0')) //保证不会出现001这样的情况{ EDIT_AddKey(obj,'0'); } break;9的情况case '1': if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.'))//保证不会出现.123这样{EDIT_SetText(obj,NULL);} EDIT_AddKey(obj,'1'); break; case '2': if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){ EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'2'); break; case '3': if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10); if((*editBuf=='0')&&(*(editBuf+1)!='.')){ EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'3'); break; case '4': if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10); if((*editBuf=='0')&&(*(editBuf+1)!='.')){ EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'4');10。

课程设计—模拟计算器设计..

课程设计—模拟计算器设计..

嵌入式课程设计课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027小组成员:刘锋自动化091 109031023陈奇英自动化091 109031001彭桂贤自动化091 109031002指导老师:陈才摘要:计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。

现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。

所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。

引言:简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。

由于条件和能力有限,所以就做个能实现四则运算的简易计算器。

计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。

通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现简易的计算器。

计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。

最后把运算的结果显示在彩屏。

最基本要求:有加减乘除运算,有带小数点的运算。

二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。

TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。

JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。

模拟计算器数字输入及显示课程设计

模拟计算器数字输入及显示课程设计

摘要本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个4*4的键盘,一个排阻(10K)做P0口的上拉电阻(接线图在附录2),它可以实现结果低于65535的加、减、乘、除运算。

显示部分:采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7相连,P2口作为数码管的位控制端。

按键部分:采用4*4键盘。

采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4—P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1.0—P1.3管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。

执行过程:开机即显示0,等待键入数值,当键入数字,将通过数码管显示出来,在键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当在键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

注:结果不能超出65535。

(具体操作见后面仿真图)目录1 概述1.1MCS-51单片机在自动化仪表中的作用 (3)1.2掌握单片机仿真软件Proteus的使用方法 (3)1.3设计方法 (3)1.4基本功能 (4)2 系统总体方案及硬件设计2.1计算器总体思想 (5)2.2硬件的选择与连接 (6)3 软件设计3.1显示程序设计 (7)3.2键盘识别程序设计 (8)3.3运算程序设计 (10)3.4风鸣器程序设计 (10)4 Proteus软件仿真 (12)5课程设计体会 (16)参考文献 (18)附1:源程序代码 (19)附2:计算器模拟系统电路图 (31)1 概述1.1MCS-51单片机在自动化仪表中的作用单片机体积小,功耗小,价格低,用途灵活,无处不在,属专用计算机。

微机课设(模拟计算器运算)

微机课设(模拟计算器运算)

一、设计题目及要求:模拟计算器运算(加,减,乘)设计要求:1.通过小键盘做加、减、乘、括号运算。

数码管显示输入数据和计算结果数据。

2.按键规定:(1)数字用小键盘0~9输入。

(2)功能按键设定:“A”——“+”“D”——“-”“B”——“*”“F”——“括号”“E”——“=”“C”——输入过程中撤消当前运算,此时屏幕显示“0”。

3.其它要求:(1)输入计算数据时,数码管应跟随显示。

若超出显示范围则不响应超出部分。

(2)按“+”、“-”、“*”或“括号”对应按键时,数码管当前显示内容不变。

(3)按“=”时,显示器显示最终计算结果。

若结果超出显示范围时,则显示“F”。

(4)按“C”时,屏幕显示“0”。

(5)需要考虑运算的优先级问题。

(6)只考虑正整数运算,不考虑负数和实数运算。

二、设计思想:调用键盘扫描子程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,并将输入的数字通过调用显示子程序显示到LED显示器上。

利用汇编的程序核对输入键的数值,并把输入的表达式存储为中缀表达式,之后转化为后缀表达式,通过调用加,减,乘,括号,子程序实现后缀表达式的加、减、乘运算。

运算完成后将运算的结果储存并显示到LED显示器上。

简要流程中五大步骤的具体描述步骤(一):从小键盘输入合法中缀算术表达式,并将其存储到S1中此处用系统功能1号调用,每次从键盘输入一个字符,就将其存入到数组S1中,然后在判断此字符是否为等号,如果不是,则循环,继续输入字符,否则,程序往下执行。

步骤(二):调用子程序CHANGE将中缀式转化为后缀式此处最核心的就是中缀表达式转化为后缀表达式的算法。

具体思路为:用一个栈来存储与运算符号.先将字符’@’压入栈中,并假设其优先级为0.然后遍历S1中的字符,遇到数字直接存入S2中并且输完数字后向S2中输入一空格以备计算结果时用。

遇到运算符则先判断其与栈顶运算符的优先级谁大。

如果S1中运算符号优先级大,则此运算符号直接入栈;否则栈顶符号先出栈到S2,待栈顶符号优先级小于S1中符号时,S1中元素入栈。

c课程设计简易计算器

c课程设计简易计算器

c 课程设计简易计算器一、课程目标知识目标:1. 让学生掌握简易计算器的基本功能与操作,包括加、减、乘、除等四则运算。

2. 使学生理解计算器的工作原理,了解显示屏、键盘等组成部分及其作用。

3. 帮助学生掌握计算器的使用规范,如开关机、输入输出等基本操作。

技能目标:1. 培养学生运用计算器解决实际问题的能力,提高计算速度和准确性。

2. 培养学生通过观察、尝试、探索等方法,自主发现计算器操作技巧和功能特点。

3. 培养学生合作交流的能力,学会在小组讨论中分享观点,共同解决问题。

情感态度价值观目标:1. 激发学生对计算器的学习兴趣,培养良好的学习习惯和探究精神。

2. 培养学生尊重科学、严谨求实的态度,树立正确的价值观。

3. 培养学生团队协作意识,增强合作解决问题的能力。

本课程针对小学四年级学生,结合教材内容,以实用性为导向,注重培养学生的动手操作能力和实际问题解决能力。

课程目标明确,易于衡量,为后续教学设计和评估提供依据。

在教学过程中,教师应关注学生个体差异,因材施教,确保每位学生都能在课程中收获知识和技能。

二、教学内容本章节教学内容主要包括以下几部分:1. 计算器的基本结构:介绍计算器的显示屏、键盘、电池等组成部分及其功能。

2. 四则运算操作:详细讲解加、减、乘、除四则运算在计算器上的操作步骤。

3. 计算器操作规范:教授计算器的开关机、清屏、输入输出等基本操作规范。

4. 实际问题解决:结合教材实例,引导学生运用计算器解决生活中的实际问题。

5. 操作技巧与功能探索:指导学生探索计算器的其他功能,如百分比、乘方等,并分享操作技巧。

教学内容安排如下:第一课时:计算器的基本结构及操作规范介绍。

第二课时:四则运算操作教学,以教材为例题进行讲解和实操。

第三课时:实际问题解决,分组讨论并运用计算器解决生活中的数学问题。

第四课时:操作技巧与功能探索,学生自主探究计算器其他功能并分享。

教学内容与教材紧密关联,确保科学性和系统性。

单片机课程设计_模拟计算器

单片机课程设计_模拟计算器

一.引言当今时代,是一个新技术层出不穷的时代。

在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。

本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其运算结果在数码管上显示出来,能够实现0-256的数字四则运算。

本设计是用单片机AT89C51来控制,采用LCD显示。

二.设计任务利用键盘和LCD设计一个简单的数学计算器,可以完成简单的加法运算,并将运算结果在数码管上显示出来。

三.方案论证根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。

外部主要由4*4矩阵键盘和一个数码管构成,内部由一块AT89C51单片机构成。

计算器电路包括四个部分:选用数码管作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。

四.整体设计根据简易计算器的功能和指标要求,本设计系统选用MCS-51系列单片机AT89C51为主控机。

通过扩展必要的外围接口电路,实现对简易计算器的设计。

计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。

具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用七段数码管显示数据和结果。

(2)另外键盘包括数字键(0~9)、符号键(+、-)、清除键和等号键,故只需要16 个按键即可。

(3)执行过程:开机显示零,等待键入数值,当键入数字,通过数码管显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

课程设计计算器模拟

课程设计计算器模拟

《模拟计算器程序》程序设计基础课程设计报告学院:信息科学与技术学院专业:电子信息工程班级:2014电信1班姓名:李辉学号: 2014508206指导教师:郭理1.课程设计题目与要求 ........................... 错误!未定义书签。

1.1设计题目 ....................................... 错误!未定义书签。

1.2设计要求 ....................................... 错误!未定义书签。

2.总体设计 ............................................... 错误!未定义书签。

2.1总体功能框架............................... 错误!未定义书签。

2.2数据结构概要设计....................... 错误!未定义书签。

3.详细设计 ............................................... 错误!未定义书签。

3.1数据结构详细设计....................... 错误!未定义书签。

3.2系统功能详细设计....................... 错误!未定义书签。

3.2.1关于函数原型声明 (4)3.2.2函数功能 (4)3.2.3函数的形参说明 (4)3.2.4算法流程图 (5)4.运行结果 (8)5.课程设计总结 (11)6.程序设计方法 (12)7.参考文献 131.课程设计题目与要求1.1设计目的设计一个程序来模拟一个简单的手持计算器。

程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。

1.2设计要求程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入’=’符号后,窗口显示出结果。

测试数据程序输入不少于5种不同的表达式进行测试2.总体设计2.1总体功能框架根据要求将该计算器分为九个模块,八个计算模块,一个退出模块.2.2数据结构概要设计用printf语句分开实现各自功能,并且将每种功能的实现步骤也插入语句中.每一个小模块各自完成功能,通过主调函数void调用.3.详细设计3.1数据结构详细设计运用函数while,switch,case,3.2算法流程3. 2.1关于函数原型声明void menu();void add();void sub();void mul();void div();void remain();void add_n_to_m();void factor();3.2.2函数功能printf("+ 1.加法 +\n");printf("+ 2.减法 +\n");printf("+ 3.乘法 +\n");printf("+ 4.除法 +\n");printf("+ 5.求余 +\n"); printf("+ 6.退出 +\n"); 3.2.3函数的形参说明3.2.4算法流程图1.主函数主函数比较简洁,只提供输入,处理和输出部分的函数调用。

vc课程设计计算器

vc课程设计计算器

vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。

具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。

技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。

情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。

2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。

3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。

4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。

2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。

3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。

4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。

2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。

3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。

4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。

五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。

2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。

课程设计设计计算器

课程设计设计计算器

课程设计设计计算器一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握计算器的基本原理和使用方法,理解计算器在数学和科学领域的应用。

技能目标要求学生能够熟练操作计算器,进行基本的算术运算、科学计算和数据处理。

情感态度价值观目标要求学生培养对科学技术的兴趣和好奇心,提高解决实际问题的能力,培养创新精神和团队合作意识。

通过分析课程性质、学生特点和教学要求,我们将目标分解为具体的学习成果。

课程目标明确,有利于学生和教师清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。

二、教学内容根据课程目标,我们选择和了以下教学内容:1.计算器的基本原理:介绍计算器的电路结构、工作原理和编程方法。

2.计算器的使用方法:讲解计算器的各种功能键、操作界面和操作步骤。

3.计算器在数学领域的应用:举例说明计算器在代数、几何、概率等数学领域的应用。

4.计算器在科学领域的应用:介绍计算器在物理、化学、生物等科学领域的应用实例。

5.计算器编程:教授计算器的基本编程语言和编程技巧,让学生能够编写简单的计算器程序。

教学大纲将按照以上内容的安排和进度进行教学,确保内容的科学性和系统性。

三、教学方法为了激发学生的学习兴趣和主动性,我们选择以下教学方法:1.讲授法:教师讲解计算器的基本原理、使用方法和应用领域。

2.讨论法:学生分组讨论计算器编程技巧和解决实际问题的方法。

3.案例分析法:分析计算器在数学和科学领域中的应用案例,让学生加深理解。

4.实验法:学生动手操作计算器,进行编程和实践,提高操作技能。

通过多样化的教学方法,我们能够激发学生的学习兴趣,培养他们的创新精神和团队合作意识。

四、教学资源为了支持教学内容和教学方法的实施,我们选择和准备了以下教学资源:1.教材:选用权威、实用的计算器教材,为学生提供系统的学习材料。

2.参考书:提供相关的计算器参考书籍,丰富学生的知识储备。

3.多媒体资料:制作课件、视频等多媒体资料,生动展示计算器的使用和应用。

数据结构与算法课程设计--模拟简单计算器

数据结构与算法课程设计--模拟简单计算器

数据结构与算法课程设计--模拟简单计算器数据结构与算法课程设计模拟简单计算器在计算机科学领域中,数据结构和算法是非常重要的基础知识。

本次课程设计的目标是模拟一个简单计算器,通过这个实践项目,深入理解和应用数据结构与算法的相关知识。

首先,让我们来明确一下简单计算器需要实现的功能。

它应该能够进行基本的四则运算,即加法、减法、乘法和除法。

同时,还需要支持输入多个操作数和运算符,能够按照正确的运算顺序进行计算。

为了实现这个简单计算器,我们需要选择合适的数据结构来存储输入的操作数和运算符。

考虑到操作的顺序性和灵活性,栈这种数据结构是一个不错的选择。

栈具有先进后出的特点,可以方便地处理运算的优先级。

接下来,我们开始设计算法。

当用户输入一个表达式时,程序需要对其进行解析。

首先,将表达式中的数字和运算符分别提取出来,并按照顺序存储在相应的栈中。

在计算过程中,从运算符栈中取出运算符,从操作数栈中取出相应的操作数进行计算,将结果重新压入操作数栈中。

在具体的实现过程中,我们需要处理一些特殊情况。

例如,除数不能为零的情况。

当遇到除法运算且除数为零时,程序应该给出相应的错误提示。

另外,对于表达式的合法性也需要进行检查。

比如,输入的表达式是否符合基本的数学运算规则,是否存在多余的字符或不匹配的括号等。

如果表达式不合法,程序也需要给出明确的提示信息,以便用户能够及时修正。

为了提高程序的可读性和可维护性,我们采用模块化的编程思想。

将表达式解析、运算处理、错误检查等功能分别封装成独立的函数,这样在后续的调试和优化过程中会更加方便。

```pythonclass Stack:def __init__(self):selfitems =def push(self, item):selfitemsappend(item)def pop(self):if not selfis_empty():return selfitemspop()else:return Nonedef is_empty(self):return len(selfitems) == 0def calculate(expression):operand_stack = Stack()operator_stack = Stack()num =""for char in expression:if charisdigit():num += charelif char in "+/":if num!="":operand_stackpush(int(num))num =""operator_stackpush(char)if num!="":operand_stackpush(int(num))while not operator_stackis_empty():operator = operator_stackpop()operand2 = operand_stackpop()operand1 = operand_stackpop()if operator =='+':result = operand1 + operand2 elif operator =='':result = operand1 operand2elif operator =='':result = operand1 operand2elif operator =='/':if operand2 == 0:print("除数不能为零!")returnresult = operand1 / operand2 operand_stackpush(result)return operand_stackpop()测试代码expression ="2+34-5/2"print(calculate(expression))```在上述代码中,我们首先定义了一个栈类`Stack`,用于存储操作数和运算符。

微机原理模拟计算器设计课程设计

微机原理模拟计算器设计课程设计

课程设计任务书课程名称微机原理及应用院部名称机电工程学院专业电气工程及其自动化班级吴映阳指导教师李国利金陵科技学院教务处制摘要学了微型计算机原理与应用课程之后,为了巩固和检测所学知识,我选择基于8088CPU的模拟计算器设计。

要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图并且用仿真软件仿真。

仿真正确后再连接硬件电路,电路连接完成后进行调试。

设计过程中我们用到了8088CPU、可编程计时器8253、可编程并行输入/输出芯片8255A、74LS138、2*8矩阵式键盘、六位七段LED数码管。

原理图设计完成之后用PROTUES仿真软件对原理图进行了仿真得到了预期的结果。

我们的模拟计算器能实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。

关键词:模拟计算器,8088CPU,PROTUES,8255A目录一、概述 (4)二、硬件电路 (4)2.1、C PU控制模块 (4)2.2、键盘输入模块 (6)2.3、可编程并行通信接口芯片8255A (7)2.4、可编程计数器/定时器 (8)2.5、总原理图 (9)三、软件设计框图 (10)四、源程序 (11)五、调试过程 (26)六、课程设计体会 (26)七、参考文献 (27)模拟计算器设计一、概述设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。

运算完成后将运算的结果储存并显示到LED显示器上。

二、硬件电路设计硬件电路键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB7~PB0连接,2根矩阵线作为8255A 的输入线与PC7、PC6连接。

键盘采用逐次扫描原理,16个按键中0~9座位数字健,+、-、*、/、=作为加、减、乘、除和等号功能键,C为清零键。

微机原理模拟计算器设计课程设计

微机原理模拟计算器设计课程设计

微机原理模拟计算器设计课程设计(共27页)-本页仅作为预览文档封面,使用时请删除本页-课程名称微机原理及应用院部名称机电工程学院专业电气工程及其自动化班级吴映阳指导教师李国利金陵科技学院教务处制摘要学了微型计算机原理与应用课程之后,为了巩固和检测所学知识,我选择基于8088CPU的模拟计算器设计。

要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图并且用仿真软件仿真。

仿真正确后再连接硬件电路,电路连接完成后进行调试。

设计过程中我们用到了8088CPU、可编程计时器8253、可编程并行输入/输出芯片8255A、74LS138、2*8矩阵式键盘、六位七段LED数码管。

原理图设计完成之后用PROTUES仿真软件对原理图进行了仿真得到了预期的结果。

我们的模拟计算器能实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。

关键词:模拟计算器,8088CPU,PROTUES,8255A目录一、概述 (4)二、硬件电路 (4)、CPU控制模块 (4)、键盘输入模块 (6)、可编程并行通信接口芯片8255A (7)、可编程计数器/定时器 (8)、总原理图 (9)三、软件设计框图 (10)四、源程序 (11)五、调试过程 (26)六、课程设计体会 (26)七、参考文献 (27)模拟计算器设计一、概述设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现5位十进制数以内的及减法运算和2位十进制数以内的乘除法运算。

运算完成后将运算的结果储存并显示到LED显示器上。

二、硬件电路设计硬件电路键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB7~PB0连接,2根矩阵线作为8255A的输入线与PC7、PC6连接。

面向对象课程设计 模拟科学计算器

面向对象课程设计 模拟科学计算器

软件学院课程设计报告书课程名称面向对象程序设计设计题目模拟科学计算器专业班级软件10-04 班学号1020010418姓名王鑫指导教师冯永安2012年6月目录1设计时间 ....................................................................... 错误!未定义书签。

2设计目的 ....................................................................... 错误!未定义书签。

3设计任务 ....................................................................... 错误!未定义书签。

4设计内容 ....................................................................... 错误!未定义书签。

4.1需求分析 ................................................................... 错误!未定义书签。

4.1.1问题描述................................................................ 错误!未定义书签。

4.1.2基本要求................................................................ 错误!未定义书签。

4.2总体设计 ................................................................... 错误!未定义书签。

4.2.1 包的描述............................................................... 错误!未定义书签。

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

报告: 张昌世 自动化091 109031027 小组成员:刘锋 自动化091109031023 陈奇英 自动化091 109031001 彭桂贤 自动化091109031002指导老师:陈才 摘要:课题:嵌入式课程设计基于 uCOS/uCGUI 的模拟计算器实现计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。

现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。

所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。

引言:简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、人=运算键等,还可以加入其他运算:如三角运算(sin, cos,ta n,cot等),一些当木运算(平方,开方,阶乘等)。

由于条件和能力有限,所以就做个能实现四则运算的简易计算器。

计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。

通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现简易的计算器。

计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。

最后把运算的结果显示在彩屏。

最基本要求:有加减乘除运算,有带小数点的运算。

二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。

TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。

JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。

b)、软件要求:操作系统:使用uC/OS嵌入式实时操作系统。

由于触屏要实时响应,所以需要使用操作系统,并给触屏专门建立一个任务。

CPU其他的操作组成一个任务。

程序在两个任务中相互切换。

图形软件:使用uCGUI嵌入式图形界面软件。

uCGUI是个小型的图形软件,包括有基本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器的制作就要用到其中的按钮、编辑框和窗口3个控件。

固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方便程序员编程,缩短了项目的编程周期。

C)、设计方案:界面布局:1 个编辑框:位于彩屏左上角,占整屏的1/5 左右,用于数据输入显示,运算符的输入显示。

编辑框内最大输入和显示的长度为10,这就限制了数据的范围。

11 个数子按钮:位于左下角开始向上向右的按钮队列,分别为:'1','2',‘3',‘ 4',‘ 5',‘ 6',‘ 7',‘ 8',‘ 9',‘ 0',‘ .'。

可以输入操作者任意想要的数据,进行运算。

6 个运算符按钮:位于屏幕偏右的数来第一列和第二列的位子上。

实现加减乘除倒数平方 6 个运算,对应的按钮分别为:‘+',‘ -',‘ * ',‘ /','1/X ' *2 '2 个操作按钮:位于屏幕右侧数来第一列的位子上。

功能分别为等号和清楚。

对应着’='和’clear'两个按钮。

等号得到计算得到的结果,清除键清楚编辑框上的数字和取消当前运算操作的功能1个说明按钮:位于屏幕的右上角。

对应’About '按钮,点击该按钮,就会跳出一个对话框,上面显示本课程设计的小组成员们名字。

1个对话框:当点击’About '按钮时,就会跳出来,对话框上显示四个课程设计小组成员的姓名,还有一个“ 0K “按钮,点击“ 0K ”按钮就会结束当前的对话框,关闭对话框。

功能说明:1、数字键被按下去时,在编辑框内显示输入的数,这里需要注意的是,编辑框内的内容时字符串的形式,例如按下12时,并不是表示数字12,而是字符串“ 12”,先是按下' 1'键,再按下' 2'键,按下第二个键的时候不能将编辑框的第一个数覆盖掉,而是要接到第一个数后面。

2、当运算符按钮被按下时,把按下去之前的编辑框的字符串转化成负浮点数形式保存在var[] 中,然后将编辑框显示 '+',如果运算符被按下了两次,表示之前已经有两个变量要进行了计算,直接显示结算结果。

3、当按下"1/X",和"X A2"时,并不增加变量的个数,只是将原先变量运算后的结果覆盖原先变量,参加后续的计算。

4、按下"About" 键是,会跳出一个对话框,该对话框支持移动,故可以将其拖到屏幕任意位子,点下对话框上的"OK" 键,就会关闭对话框。

之后再点下"About" 键后对话框优惠弹出来。

三、相关介绍说明a)、STM32F103ZT6E 介绍:ARM 32 位Cortex-M3 微处理器,72MHz 频率,512kB Flash, 64kB SRAM,灵活的静态存储器控制器存储器:SRAM, PSRAM, NOR 和NAND Flash,PLL,内置的RC正当频率为8MHz和32kHz,实时时钟,嵌套中断控制器,节电模式,JTAG和SWD两种模式,4个同步16位计时器与输入捕获,输出比较和PWM波,2个16位的高级定时器,2 个16位的基本定时器,2个16位的看门狗定时器,系统时钟定时器,3个SPI/I2S模块,2 个I2C 模块,5 个USART 模块,一个USB 2.0 全速接口,一个CAN 2.0B Active, 3 个112 位16通道A/D控制器,2个12位的D/A控制器,1个SDIO接口,快速的I/O 口。

b)、uCOS 介绍:Q/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。

它被广泛应用于微处理器、微控制器和数字信号处理器。

pC/OS-II的前身是Q/OS,最早出自于1992年美国嵌入式系统专家Jean brosse 在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把P C/OS的源码发布在该杂志的 B B S上。

P C/OS和p C/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。

CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言|部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。

用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将p C/OS-II嵌入到开发的产品中。

P C/OS-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。

P C/OS-II已经移植到了几乎所有知名的CPU上。

严格地说uC/OS-ll只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。

没有提供输入输出管理,文件系统,网络等额外的服务。

但由于uC/OS-ll良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。

uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。

uC/OS-II以源代码的形式发布,但并不意味着它是开源软件。

你可以将其用于教学和私下研究(peaceful research );但是如果你将其用于商业用途,那么你必须通过Micrium获得商用许可。

c)、uCGUI 简介UCGUI是一种嵌入式应用中的图形支持系统。

它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。

它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。

| —UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。

UCGUI能够适应大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。

还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。

UCGUI的设计目标是为使用LCD作为图形显示装置的应用提供高效的/与LCD控制器独立及处理器独立的图形用户接口。

它适合于单任务环境及多任务环境,如私用的操作系统或是商业的RTOS(实时操做系统。

UCGUI以C源码形式提供,并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。

它包含以下特_] 性:[1] 适用任何8/16/32位CPU,只要有相对应的标准 C 编译器.[2] 任何的控制器的LCD 显示器(单色,灰度,颜色),只要有适合的LCD 驱动可 用.[3] 在小模式显示时无须 LCD 控制器. [4] 所有接口支持使用宏进行配制 •[5] 显示尺寸可定制•[6] 字符和位图可在LCD 显示器上的任意起点显示,并不仅局限于偶数对齐的地址起点[10] 清晰的设计架构•[11] 支持虚拟 显示,虚拟显示可以比实际尺寸大(即放大).四、代码分析a )、uCOS 部分代码 建立两个任务/*OS 两个任务堆栈区*/OS_STK Main Task1Stk[MAXSTKSIZE]; OS_STK Task1Stk[MAXSTKSIZE]; /*两个任务函数*/void Mai nTask1(void *pdata); void Task1(void *pdata); /*主函数,建立两个任务 */ int mai n () {OSInit();//OS 初始化OSTaskCreate(Mai nTask1,(void *)0,&Mai nTask1Stk[MAXSTKSIZE-1],1);〃建立任务OSTaskCreate(Task1,(void *)0, &Task1Stk[MAXSTKSIZE-1],2); }OSStart();/*任务一:初始化板子,初始化液晶,建立计算器图像界面 void Main Task1(void *pdata ) {;8; ______ [9】 程序在大小和速度上都进行了优化 •编译时允许进行不同的优化 . 、、对于缓慢一些的LCD 控制器,LCD 显存可以映射到内存当中 ,从而减少访问次数到最小并达到更高的显示速度 *//* 任务二:专门为触屏和控件的更新而建立的任务 */void Task1(void *pdata){pdata=pdata; for(;;){WM_Exec();//更新窗口 GUI_TOUCH_Exec(); //更新触屏OSTimeDly(10);}}b)、计算器图形界面的相关代码/*GUI 相关变量 */ EDIT_Handle edit;BUTTON_Handle num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;// 数字 0~9,BUTTON_Handle numPoint,numPlus,numSub,numMul,numDiv;// 小数点,加号,减号, 除号,乘号BUTTON_Handle clear,inverse,square,equal,about; // 清除,倒数,平方,等于 /* 图形界面函数 */void WidgetCreate(void){pdata=pdata; BSP_Init(); GUI_Init();GUI_SetBkColor(GUI_BLACK); GUI_Clear();GUI_TOUCH_Calibrate(0,0,320,296,3854); GUI_TOUCH_Calibrate(1,0,240,249,3906);// GUI_CURSOR_Show();WidgetCreate(); GUI_Exec(); for(;;){KeyCallback(edit);}}//硬件初始化 //GUI 初始化//设置彩屏背景颜色为黑色//屏幕校准 //显示光标 //建立控件 //显示控件//响应控件/* 画计算器边框 */ GUI_SetPenSize(3);GUI_SetColor(GUI_RED);//设置之前宽度为 3 个像素 //设置边框颜色为红色GUI_DrawLine(7,0,7,239);GUI_DrawLine(311,0,311,239); GUI_DrawLine(7,238,311,238); GUI_DrawLine(7,1,311,1);edit=EDIT_Create(15,5,225,50,'e',10,WM_CF_SHOW);// 创建编辑框 EDIT_SetFont(edit,&GUI_Font32B_ASCII); //设置编辑框内容字体大小 num7=BUTTON_Create(15,60,50,35,'7',WM_CF_SHOW);// 创建数字 7 的按钮 BUTTON_SetFont(num7,&GUI_Font24_ASCII); BUTTON_SetText(num7,"7");BUTTON_SetTextColor(num7,0,GUI_WHITE); BUTTON_SetBkColor(num7,0,GUI_DARKBLUE);num4=BUTTON_Create(15,105,50,35,'4',WM_CF_SHOW);// 创建数字 4 的按钮 BUTTON_SetFont(num4,&GUI_Font24_ASCII); BUTTON_SetText(num4,"4");BUTTON_SetTextColor(num4,0,GUI_WHITE); BUTTON_SetBkColor(num4,0,GUI_DARKBLUE);num1=BUTTON_Create(15,150,50,35,'1',WM_CF_SHOW); // 创建数字 1 的按钮 BUTTON_SetFont(num1,&GUI_Font24_ASCII); BUTTON_SetText(num1,"1");BUTTON_SetTextColor(num1,0,GUI_WHITE); BUTTON_SetBkColor(num1,0,GUI_DARKBLUE);num0=BUTTON_Create(15,195,110,35,'0',WM_CF_SHOW);// 创建数字 0 的按钮 BUTTON_SetFont(num0,&GUI_Font24_ASCII); BUTTON_SetText(num0,"0");BUTTON_SetTextColor(num0,0,GUI_WHITE); BUTTON_SetBkColor(num0,0,GUI_DARKBLUE); num8=BUTTON_Create(74,60,50,35,'8',WM_CF_SHOW); // 创建数字 8 的按钮BUTTON_SetFont(num8,&GUI_Font24_ASCII); BUTTON_SetText(num8,"8");BUTTON_SetTextColor(num8,0,GUI_WHITE); BUTTON_SetBkColor(num8,0,GUI_DARKBLUE);num5=BUTTON_Create(74,105,50,35,'5',WM_CF_SHOW); // 创建数字 5 的按钮 BUTTON_SetFont(num5,&GUI_Font24_ASCII); BUTTON_SetText(num5,"5");BUTTON_SetTextColor(num5,0,GUI_WHITE); BUTTON_SetBkColor(num5,0,GUI_DARKBLUE);num2=BUTTON_Create(74,150,50,35,'2',WM_CF_SHOW); // 创建数字 2 的按钮 BUTTON_SetFont(num2,&GUI_Font24_ASCII); BUTTON_SetText(num2,"2");BUTTON_SetTextColor(num2,0,GUI_WHITE); BUTTON_SetBkColor(num2,0,GUI_DARKBLUE);//画边框//设置字体 24 号 //按钮上显示 7 //设置字体颜色 //设置按钮背景颜色num9=BUTTON_Create(133,60,50,35,'9',WM_CF_SHOW); // 创建数字9 的按钮BUTTON_SetFont(num9,&GUI_Font24_ASCII);BUTTON_SetText(num9,"9");BUTTON_SetTextColor(num9,0,GUI_WHITE);BUTTON_SetBkColor(num9,0,GUI_DARKBLUE);num6=BUTTON_Create(133,105,50,35,'6',WM_CF_SHOW);// 创建数字6 的按钮BUTTON_SetFont(num6,&GUI_Font24_ASCII);BUTTON_SetText(num6,"6");BUTTON_SetTextColor(num6,0,GUI_WHITE);BUTTON_SetBkColor(num6,0,GUI_DARKBLUE);num3=BUTTON_Create(133,150,50,35,'3',WM_CF_SHOW); // 创建数字3 的按钮BUTTON_SetFont(num3,&GUI_Font24_ASCII);BUTTON_SetText(num3,"3");BUTTON_SetTextColor(num3,0,GUI_WHITE);BUTTON_SetBkColor(num3,0,GUI_DARKBLUE);钮numPoint=BUTTON_Create(133,195,50,35,'.',WM_CF_SHOW);// 创建小数点.的按BUTTON_SetFont(numPoint,&GUI_Font24_ASCII);BUTTON_SetText(numPoint,".");BUTTON_SetTextColor(numPoint,0,GUI_WHITE);BUTTON_SetBkColor(numPoint,0,GUI_DARKBLUE);numDiv=BUTTON_Create(192,60,50,35,'/',WM_CF_SHOW);// 创建除号/的按钮BUTTON_SetFont(numDiv,&GUI_Font24_ASCII);BUTTON_SetText(numDiv,"/");numMul=BUTTON_Create(192,105,50,35,'*',WM_CF_SHOW);// 创建乘号* 的按钮BUTTON_SetFont(numMul,&GUI_Font24_ASCII);BUTTON_SetText(numMul,"*");numSub=BUTTON_Create(192,150,50,35,'-',WM_CF_SHOW);// 创建减号-的按钮BUTTON_SetFont(numSub,&GUI_Font24_ASCII);BUTTON_SetText(numSub,"-");钮numPlus=BUTTON_Create(192,195,50,35,'+',WM_CF_SHOW); // 创建加好+的按BUTTON_SetFont(numPlus,&GUI_Font24_ASCII);BUTTON_SetText(numPlus,"+");clear=BUTTON_Create(251,60,50,35,'c',WM_CF_SHOW); // 创建清除键clear 的按钮BUTTON_SetFont(clear,&GUI_Font24_ASCII);BUTTON_SetText(clear,"clear");BUTTON_SetBkColor(clear,0,GUI_YELLOW);钮inverse=BUTTON_Create(251,105,50,35,'i',WM_CF_SHOW); // 创建倒数1/X 的按BUTTON_SetFont(inverse,&GUI_Font24_ASCII);case '1':if(operaFlag==1){EDIT_SetText(obj,NULL);BUTTON_SetText(inverse,"1/X");square=BUTTON_Create(251,150,50,35,'s',WM_CF_SHOW);〃 创建平方 X A 2 的按钮BUTTON_SetFont(square,&GUI_Font24_ASCII); BUTTON_SetText(square,"XA2");equal=BUTTON_Create(251,195,50,35,'=',WM_CF_SHOW);// 创建等号 =的按钮 BUTTON_SetFont(equal,&GUI_Font24_ASCII); BUTTON_SetText(equal,"=");BUTTON_SetBkColor(equal,0,GUI_YELLOW);about=BUTTON_Create(249,20,57,30,'a',WM_CF_SHOW); // 创建说明信息 about 的按钮BUTTON_SetFont(about,&GUI_Font24_ASCII); BUTTON_SetText(about,"About");BUTTON_SetBkColor(about,0,GUI_LIGHTGRAY);}c)、 按键响应代码/* 按钮响应函数 */void KeyCallback(EDIT_Handle obj){/*重画边框,因为控件在最上层,会把下层的图案覆盖掉 GUI_SetPenSize(3);GUI_SetColor(GUI_RED); GUI_DrawLine(7,0,7,239);GUI_DrawLine(311,0,311,239); GUI_DrawLine(7,238,311,238); GUI_DrawLine(7,1,311,1); switch (GUI_WaitKey()){*/case '0': if(operaFlag==1) //如果是刚操作完运算符号后的数,先把编辑框清掉 { EDIT_SetText(obj,NULL); operaFlag=0;}EDIT_GetText(obj,editBuf,10); if((*editBuf!='0')) //保证不会出现 001 这样的情况 EDIT_AddKey(obj,'0');}break;课程设计—模拟计算器设计operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.'))// 保证不会出现.123 这样的情况{EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'1');break;case '2':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'2');break;case '3':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'3');break;case '4':if(operaFlag==1){EDIT_SetText(obj,NULL);operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'4');break;case '5':if(operaFlag==1){case '9': if(operaFlag==1){EDIT_SetText(obj,NULL);case '6': case '7': case '8': EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10); if((*editBuf=='0')&&(*(editBuf+1)!='.')) { EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'5'); break; if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')) { EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'6'); break; if(operaFlag==1) { EDIT_SetText(obj,NULL); operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')){ EDIT_SetText(obj,NULL); }EDIT_AddKey(obj,'7'); break;if(operaFlag==1){ EDIT_SetText(obj,NULL);operaFlag=0;} EDIT_GetText(obj,editBuf,10); if((*editBuf=='0')&&(*(editBuf+1)!='.')) {EDIT_SetText(obj,NULL); } EDIT_AddKey(obj,'8');break;{ operaFlag=0;}EDIT_GetText(obj,editBuf,10);if((*editBuf=='0')&&(*(editBuf+1)!='.')) {EDIT_SetText(obj,NULL);}EDIT_AddKey(obj,'9');break;case '.':if(operaFlag==1){EDIT_SetText(obj,NULL); operaFlag=0; } EDIT_GetText(obj,editBuf,10); if(*editBuf!=NULL) { EDIT_AddKey(obj,'.'); } break; case 'i': //倒数 operaFlag=1; var[varCnt]=StoF(); var[varCnt]=1/var[varCnt]; result=var[varCnt]; FtoS(); EDIT_SetText(obj,editBuf); break; case 's': //平方 operaFlag=1; var[varCnt]=StoF(); var[varCnt]=var[varCnt]*var[varCnt]; result=var[varCnt]; FtoS(); EDIT_SetText(obj,editBuf); break; case '+': //加法 typeFlag='+'; var[varCnt++]=StoF(); //把输入到编辑框内的内容,转化成浮点数,保存在 var[] 中{ result=var[0]+var[1]; FtoS(); EDIT_SetText(obj,editBuf); if(numDir==0) // 判断结果正负填满,可以做运算操作了EDIT_SetText(obj,"+"); operaFlag=1; if(varCnt==2) //编辑框显示运算符 //varCnt=2, 表示 var[] 已经被 // 保证不会出现 .123 情况EDIT_SetCursorAtChar(obj,0);//EDIT_AddKey(obj,'-');}varCnt=0;}break;case '-': //减法typeFlag='-';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"-");if(varCnt==2){result=var[0]-var[1];FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '*': // 乘法typeFlag='*';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"*");if(varCnt==2){result=var[0]*var[1];FtoS();EDIT_SetText(edit,editBuf);if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '/': //除法typeFlag='/';operaFlag=1;var[varCnt++]=StoF();EDIT_SetText(obj,"/");if(varCnt==2)result=var[0]/var[1];FtoS();如果是符号//在编辑框数值最前面加'-'号{EDIT_SetText(edit,editBuf); if(numDir==0) {EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0;}break;case '=': // 等于operaFlag=1; var[varCnt++]=StoF(); switch(typeFlag) {case '+':result=var[0]+var[1]; break;result=var[0]-var[1]; break;result=var[0]*var[1]; break;result=var[0]/var[1];break; default:break;}typeFlag=0;FtoS();EDIT_SetText(edit,editBuf); if(numDir==0){EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,'-');}varCnt=0; break;case 'c': //清除operaFlag=1;EDIT_SetText(obj,NULL);break;case 'a': //关于ExecDialog();// 执行对话框default:break;}}d )、函数从编辑框读取字符串或把字符串写入到编辑框的,浮点数到字符串,和字符 串到浮点数的相关代码:/* 字符串转浮点数 */ float StoF(void){float tranf=0.0,a=0.0; int i,p=0;for(i=0;i<10;i++){editBuf[i]=0;}i=0;EDIT_GetText(edit,editBuf,11);tranf=editBuf[i]-'0';if(strstr(editBuf,".")!=NULL){case '-': case '/':while((editBuf[++i]!='.')&&i<10){tranf*=10;tranf=tranf+(editBuf[i]-'0');}}else{while((editBuf[++i]!='\0')&&i<10){tranf*=10;tranf=tranf+(editBuf[i]-'0');}}for(i=0;i<10;i++){if(editBuf[i]=='.'){p=i;break;}}if(p>0){for(i=9;i>p;i--){if(editBuf[i]!=0)a+=(editBuf[i]-'0'); a/=10;}}tranf=tranf+a;return tranf;}/* 浮点数转字符串*/int FtoS(void){int s1=0,sum=0,p=0,i=1;float s2;for(i=0;i<10;i++){editBuf[i]=0;}i=1;if(result<0){result=-result;numDir=0;}else{numDir=1;}s1=(int)result; s2=(float)((int)(result*10000-s1*10000))/10000;while(s1){s1/=10;sum++;}if(s1>10){EDIT_SetText(edit,"Overflow");return 0;}s1=(int)result;if(s2!=0) //说明有小数{if(sum==0){editBuf[sum]='0';sum+=1;}editBuf[sum]='.';while(s2!=0) //小数部分{if(sum+i<10){s2*=10;p=(int)s2; //取整editBuf[sum+i]=p+'0';s2=(s2*10000-p*10000)/10000;//取小数部分i++;}elsebreak;{}}else // 没有小数{editBuf[sum+1]=0;editBuf[sum+2]=0;editBuf[sum+3]=0;}while(sum--!=0) // 整数部分{editBuf[sum]=s1%10+'0';s1=s1/10;}return 1;}e)、关于dialog对话框的显示代码/*建立一个对话框dialog,存放组员信息*/static const GUI_WIDGET_CREATE_INFO DialogList[]={{FRAMEWIN_CreateIndirect,"GroupMember:",'f',60,60,190,120,FRAMEWIN_CF_MOVEABLE,0},{BUTTON_CreateIndirect,"OK",GUI_ID_OK, 68,60,60,20,0,0},{TEXT_CreateIndirect," 张昌世", '1',40,10,75,25,TEXT_CF_LEFT,0},{TEXT_CreateIndirect," 刘锋", '2',100,10,75,25,TEXT_CF_LEFT,0},{TEXT_CreateIndirect," 陈奇英", '3',40,40,75,25,TEXT_CF_LEFT,0}, {TEXT_CreateIndirect," 彭桂贤", '4',100,40,75,25,TEXT_CF_LEFT,0}, };/* 执行对话框*/void ExecDialog(void){WM_SetDesktopColor(GUI_BLACK);// 设置背景颜色GUI_ExecDialogBox(DialogList,GUI_COUNTOF(DialogList),&Callback,0,0,0);/*GUI_COUNTOF(DialogList): 计算DialogList 大小,后面3个0表示:第一个0表示没有父窗口,故后面为(0,0)*/}/*对话框的响应函数*/void Callback(WM_MESSAGE *pMsg){int NCode,Id;WM_HWIN text1,text2,text3,text4; WM_HWIN hWin=pMsg->hWin;if(pMsg->MsgId==WM_INIT_DIALOG){text1=WM_GetDialogItem(hWin,'1'); //获得对话框内控件的句柄text2=WM_GetDialogItem(hWin,'2');text3=WM_GetDialogItem(hWin,'3');text4=WM_GetDialogItem(hWin,'4');TEXT_SetFont(text1,&GUI_FontHZ_SimSun_14);// 设置TEXT 字体TEXT_SetFont(text2,&GUI_FontHZ_SimSun_14);TEXT_SetFont(text3,&GUI_FontHZ_SimSun_14);TEXT_SetFont(text4,&GUI_FontHZ_SimSun_14);}if(pMsg->MsgId==WM_NOTIFY_PARENT){Id=WM_GetId(pMsg->hWinSrc);NCode=pMsg->Data.v;if(NCode==WM_NOTIFICATION_RELEASED){if(Id==GUI_ID_OK) //响应按钮{GUI_EndDialog(hWin,0); //结束对话框}}FRAMEWIN_SetFont(hWin, &GUI_Font24B_ASCII);// 设置窗体的题目大小}}五、程序不足与分析程序一路写下来,遇到许许多多的瓶颈,让我曾一度放弃编写计算器第一个问题:从编辑框获取文本存储失败。

相关文档
最新文档