51单片机课设 串口计算器

合集下载

51单片机计算器课程设计

51单片机计算器课程设计

51单片机计算器课程设计一、课程目标知识目标:1. 让学生掌握51单片机的基本原理及其在计算器中的应用。

2. 使学生理解并掌握计算器程序设计的步骤和要点,包括键盘输入、显示输出、数据处理等。

3. 帮助学生了解并掌握基本的数字逻辑运算,如加、减、乘、除等。

技能目标:1. 培养学生运用51单片机进行计算器硬件设计和程序编写的能力。

2. 培养学生运用Keil等开发工具进行51单片机程序开发的能力。

3. 培养学生通过查阅资料、团队协作解决实际问题的能力。

情感态度价值观目标:1. 激发学生对电子技术和编程的兴趣,培养其主动学习的态度。

2. 培养学生的创新意识和动手能力,使其具备解决问题的信心。

3. 培养学生良好的团队协作精神和沟通能力,提高其综合素质。

课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。

学生特点:学生具备一定的电子技术基础和编程能力,对51单片机有一定了解。

教学要求:结合学生特点,注重理论与实践相结合,以项目为导向,引导学生主动探索、实践和解决问题。

通过课程学习,使学生达到预定的知识目标和技能目标,并培养其情感态度价值观。

在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 51单片机原理回顾:涉及51单片机的内部结构、工作原理、寄存器等基础知识。

相关教材章节:第一章《51单片机概述》2. 计算器功能设计:介绍计算器的基本功能,如数字输入、运算符选择、结果显示等。

相关教材章节:第二章《51单片机I/O口应用》3. 硬件电路设计:讲解计算器硬件电路的搭建,包括键盘电路、显示电路等。

相关教材章节:第三章《51单片机硬件设计基础》4. 程序设计:分析计算器程序设计的流程,包括程序框架、各功能模块的实现等。

相关教材章节:第四章《51单片机C语言编程》5. 软件开发工具使用:介绍Keil开发环境的使用方法,编译、下载程序到51单片机。

基于51单片机的计算器设计

基于51单片机的计算器设计

基于51单片机的计算器设计计算器作为一种常用的电子设备,广泛应用于各个领域。

在本文中,我们将基于51单片机来设计一个简单的计算器,并对其进行详细介绍。

一、设计目标我们所设计的计算器需要具备以下功能:1.实现基本的算术运算,包括加、减、乘、除等;2.具备显示功能,能够将输入和运算结果以数字的形式显示在液晶屏上;3.提供清零和删除功能,方便计算器的操作;4.具备较高的计算精度和稳定性。

二、硬件设计计算器的硬件设计主要包括键盘输入、液晶屏输出和计算程序控制三个部分。

1.键盘输入为了简化设计的复杂度,我们采用矩阵键盘来实现输入功能。

矩阵键盘由多个行和多个列交叉连接而成,通过扫描行和列的方式来检测键盘输入的按键信息。

2.液晶屏输出我们选择16x2字符液晶显示屏来作为计算结果的输出设备。

这种液晶屏可以显示16个字符,每个字符由5x8像素点阵组成,具备较好的显示效果。

3.计算程序控制我们将基于51单片机来编写计算器的计算程序,并通过电路连接键盘输入和液晶屏输出设备。

通过读取键盘输入的按键信息,计算程序能够判断用户输入的数字和操作符,并进行相应的计算操作。

最后,计算结果将以数字的形式显示在液晶屏上。

三、软件设计计算器的软件设计主要包括键盘扫描与输入处理、计算程序控制和液晶屏显示三个模块。

1.键盘扫描与输入处理通过循环扫描矩阵键盘的行和列,可以得到按键信息。

根据按键信息的不同,我们可以判断用户输入的数字和操作符,并将其传递给计算程序模块进行处理。

同时,我们需要对一些特殊按键(如清零和删除)做特殊处理。

2.计算程序控制计算程序模块将根据键盘输入的数字和操作符,进行相应的算术运算。

我们可以采用栈的数据结构来处理运算符和运算数,以实现复杂的算术运算。

3.液晶屏显示计算结果将以数字的形式显示在液晶屏上。

我们可以通过51单片机的GPIO口控制液晶显示屏的操作,包括写入指令和写入数据。

通过设定光标位置及写入数字数据,可以将计算结果显示在液晶屏的指定位置上。

基于51单片机的简易计算器

基于51单片机的简易计算器

基于51单片机的简易计算器51单片机是一种广泛应用于嵌入式系统中的常用微控制器。

我们可以利用51单片机的强大功能和丰富的外设资源,设计一个简易计算器。

这个计算器可以进行基本的加减乘除运算,并且具备显示结果的功能。

首先,我们需要准备一块51单片机开发板,一块1602液晶显示屏模块,以及一些按键开关和电阻。

我们可以将运算器主要分为以下几个模块:数码管显示模块、键盘输入模块、运算模块和存储模块。

数码管显示模块:我们使用1602液晶显示屏模块来显示计算器的结果。

我们可以通过51单片机的IO口,将计算结果发送给液晶显示屏模块,实现结果的显示。

键盘输入模块:我们可以使用几个按键开关来实现数字和运算符的输入。

通过对按键的检测,我们可以将用户输入的数字和运算符转化为字符形式,并保存到内存中。

运算模块:我们需要根据用户输入的数字和运算符,进行相应的运算。

我们可以使用栈来实现这个功能。

栈是一种常用的数据结构,具有"先进后出"的特点。

我们可以将用户输入的数字和运算符按照一定的规则入栈,然后按照相应的顺序进行出栈和运算。

最后将结果保存到内存中。

存储模块:我们可以使用内部RAM来保存运算结果。

51单片机的内部RAM具有一定的存储能力,可以满足我们的基本需求。

在编写程序时,我们可以使用汇编语言或者C语言。

通过合理的编程,我们可以实现计算器的各项功能。

总结一下,基于51单片机的简易计算器主要包括数码管显示模块、键盘输入模块、运算模块和存储模块。

我们可以通过合理的编程,将这些模块相互配合,实现一个功能完善的计算器。

这个计算器不仅可以进行基本的加减乘除运算,还可以显示结果,方便用户进行计算。

51简易计算器课程设计

51简易计算器课程设计

51简易计算器课程设计一、课程目标知识目标:1. 学生能理解并掌握51简易计算器的基本原理和功能。

2. 学生能够运用所学的编程知识,编写出具备加、减、乘、除基本运算功能的51简易计算器程序。

3. 学生能够理解并运用51单片机的内外部中断,实现计算器按键识别与功能调用。

技能目标:1. 学生能够熟练使用51单片机的开发环境和编程工具。

2. 学生通过实践操作,掌握51单片机的I/O口编程,提高动手实践能力。

3. 学生能够通过团队协作,解决编程过程中遇到的问题,提升问题解决能力。

情感态度价值观目标:1. 学生培养对单片机编程的兴趣,增强学习计算机科学的热情。

2. 学生在课程实践中,养成动手操作、观察问题、思考问题的良好习惯。

3. 学生通过团队协作,培养沟通与协作意识,增强团队荣誉感。

本课程针对五年级学生设计,课程性质为实践性较强的信息技术课程。

结合学生特点,课程目标注重培养学生的学习兴趣和动手能力,同时考虑教学要求,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。

二、教学内容1. 51单片机基本原理与结构:介绍51单片机的组成、工作原理及特点,让学生对51单片机有整体的认识。

- 教材章节:第一章 51单片机概述2. 51单片机开发环境与编程工具:学习如何搭建51单片机开发环境,掌握编程工具的使用。

- 教材章节:第二章 51单片机开发环境与编程工具3. I/O口编程:学习51单片机I/O口的基本操作,实现计算器按键输入与LED显示。

- 教材章节:第三章 I/O口编程与应用4. 基本运算程序编写:学习编写加、减、乘、除基本运算的程序,掌握运算逻辑。

- 教材章节:第四章 算术运算程序设计5. 中断编程与应用:学习51单片机中断原理,运用外部中断实现按键识别与功能调用。

- 教材章节:第五章 中断系统及其应用6. 简易计算器程序设计与实现:将所学知识综合运用,设计并实现具备基本运算功能的简易计算器。

- 教材章节:第六章 综合应用实例教学内容根据课程目标进行科学性和系统性组织,制定详细的教学大纲,确保教学内容的安排和进度。

51单片机简易计算器设计

51单片机简易计算器设计

51单片机简易计算器设计一、设计思路计算器的基本功能包括加法、减法、乘法和除法。

我们可以使用按键作为输入方式,将输入的数字和操作符暂时保存在内存中,然后根据操作符进行相应的运算。

最后再将运算结果显示在数码管上。

具体设计思路如下:1.确定计算器所需的硬件组件:数码管、按键、51单片机和相关电路。

2.定义按键与数字和操作符的对应关系。

3.编写51单片机的程序,实现按键输入、运算和结果显示的功能。

二、硬件设计1.数码管:使用常见的7段数码管作为显示器,通过引脚连接到51单片机的IO口。

2.按键:使用4个按键分别表示数字输入键、加法键、减法键和等于键。

三、软件设计1.初始化:将数码管引脚设为输出模式,将按键引脚设为输入模式。

2.按键处理:采用中断方式检测按键输入,通过编程判断所按的键。

3.数字输入:将按键所对应的数字保存在变量中,最多支持四位数的输入。

4.操作符输入:将按下的操作符保存在变量中。

5.运算:根据保存的操作符进行相应的运算,并将结果保存在变量中。

6.结果显示:将结果显示在数码管上。

四、代码实现下面是一个示例代码的框架,供参考:```c#include <reg52.h>sbit SDA = P0^0; // I2C总线数据线sbit SCL = P0^1; // I2C总线时钟线//定义按键的IO口sbit BUTTON0 = P1^0; // 数字输入键sbit BUTTON1 = P1^1; // 加法键sbit BUTTON2 = P1^2; // 减法键sbit BUTTON3 = P1^3; //等于键unsigned char num1 = 0; // 第一个操作数unsigned char num2 = 0; // 第二个操作数unsigned char op = 0; // 操作符unsigned char result = 0; // 运算结果//判断按键所对应的数字或操作符void buttonif (BUTTON0 == 0) // 数字输入键//将按键所对应的数字保存在变量中//显示数字}else if (BUTTON1 == 0) // 加法键//保存操作符为加号}else if (BUTTON2 == 0) // 减法键//保存操作符为减号}else if (BUTTON3 == 0) //等于键//根据保存的操作符进行相应的运算//将结果保存在变量中//显示结果}void mainwhile (1)button(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。

c51单片机设计计算器 设计总结

c51单片机设计计算器 设计总结

c51单片机设计计算器设计总结C51单片机设计计算器是一个复杂的项目,它涉及了微控制器编程、硬件接口、输入/输出等多个方面。

下面是对此项目的总结:1. 功能需求分析:在开始设计计算器之前,首先要明确需要实现的功能。

对于这个项目,基本的计算器功能如加、减、乘、除是必须的,同时考虑到扩展性,也可以加入一些高级功能如平方、立方等。

2. 硬件选择:C51单片机是一种常用的微控制器,其优点包括低功耗、高性能以及丰富的外设接口。

此外,还需要选择合适的显示模块(如LCD)和输入设备(如键盘)。

3. 软件设计:软件设计主要涉及到单片机的编程。

需要编写程序以实现计算器的各种功能。

这包括但不限于输入处理、运算逻辑、结果显示等部分。

4. 调试与测试:在完成硬件和软件的设计后,需要进行大量的测试以确保计算器的功能正常。

这包括基本的四则运算测试,以及一些复杂的测试用例,如溢出测试、边界条件测试等。

5. 性能优化:虽然基本的计算器功能可以运行,但性能和效率方面可能还有优化的空间。

例如,可以通过改进算法或者优化代码来提高计算速度。

6. 扩展性考虑:在设计时,应考虑到未来可能的扩展需求。

例如,可以预留一些接口或者引脚以便未来添加更多功能。

7. 文档与维护:完成项目后,应编写详细的文档以方便后续的维护和修改。

这包括硬件连接图、软件代码注释、测试报告等。

8. 安全与可靠性:对于任何电子设备,安全性和可靠性都是非常重要的。

在设计时,应考虑到各种可能的异常情况,并采取相应的预防措施。

通过这个项目,我们可以更深入地理解单片机的工作原理,以及如何在实际项目中应用这些知识。

同时,这个项目也提高了我们的硬件接口能力、编程技巧以及问题解决能力。

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告

基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
1. 研究背景
•计算器是人们日常生活和工作中常用的工具之一。

•通过设计简易计算器,可以加深学生对51单片机的理解和应用。

2. 目标和需求
•设计一个基于51单片机的简易计算器,能够进行基本的四则运算和开方运算。

•要求计算器能够显示输入和计算结果。

•要求计算器具备简单的界面和操作。

3. 设计方案
•使用51单片机作为计算器的控制核心。

•通过键盘输入数字和运算符,并显示在液晶屏上。

•根据输入的运算符,进行相应的计算,并将结果显示在液晶屏上。

4. 硬件设计
•使用51单片机作为主控芯片。

•连接液晶屏模块,用于显示输入和计算结果。

•连接键盘模块,用于输入数字和运算符。

5. 软件设计
•使用C语言进行编程。

•设计主程序,包括初始化、输入处理和计算输出等功能。

•设计函数,实现基本的四则运算和开方运算。

6. 实验结果
•成功设计并实现了基于51单片机的简易计算器。

•可以正常进行基本的四则运算和开方运算。

•输入和计算结果能够准确显示在液晶屏上。

7. 总结与展望
•通过设计这个简易计算器,学生对51单片机的理解和应用能力有了提高。

•下一步可以考虑增加更多的功能,如科学计算和数据存储等。

以上是本次基于51单片机简易计算器课程设计的报告。

通过这个实验,学生对51单片机的应用能力得到了提升,进一步增强了对计算器的理解。

在未来的课程设计中,可以进一步拓展功能,提升计算器的实用性和功能性。

51单片机实习的计算器

51单片机实习的计算器

基于51/52单片机的简易计算器制作、题目利用单片机芯片STC89C52、四位八段共阴数码管及已制作好的电路板等器件设计制作一个计算器。

二、任务与要求要求计算器能实现加减乘除四种运算 具体如下1. 加法:四位整数加法计算结果若超过八位则显示计算错误2. 减法:四位整数减法计算结果若超过八位则显示计算错误3. 乘法:多位整数乘法计算结果若超过四位则显示计算错误4. 除法:整数除法5. 有清除功能三、课程设计简述总体设计思路简述1.按照系统设计的功能的要求 初步确定设计系统由主控模块、显示模块、键扫描接口电路共三个模块组成。

主控芯片使用STC89C52单片机。

2.键盘电路采用4*4矩阵键盘电路。

3.显示模块采用共阳极数码管构成。

四、硬件电路五、软件编程部份#include<reg52.h>#define uchar unsigned char#define uint unsigned int//uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴极// 0 1 2 3 4 5 6 7 8 9 熄灭-//uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7};//uchar code ero[]={0x79,0x50,0x5c};uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40};//共阳极uchar code loc[]={0x00,0x80,0x40,0x20,0x10};uchar code ero[]={~0x79,~0x50,~0x5c};uint n=0,n1=0,n2=0; //赋初值uchar flag=0; //计算类型选择关键字void delay(int t);void display(int n);void error();main(){while(1){uchar temp;//第一行检测P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xfe;if(temp!=0xfe){temp=P3;switch(temp){case 0xee:n1=0;n2=0;n=0;flag=0;break; //清零case 0xde:n1=10*n1+0;n=n1;break;//0case 0xbe: if(flag==1)n=n2+n1; //=if(flag==2)n=n2-n1;if(flag==3)n=n2*n1;if(flag==4)n=n2/n1;n1=0;break;case 0x7e: // +n2=n1;n1=0;flag=1;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第二行P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:n1=10*n1+1;n=n1;break; //4case 0xdd:n1=10*n1+2;n=n1;break; //5case 0xbd:n1=10*n1+3;n=n1;break; //6case 0x7d:// -n2=n1;n1=0;flag=2;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第三行P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:n1=10*n1+4;n=n1;break;case 0xdb:n1=10*n1+5;n=n1;break;case 0xbb:n1=10*n1+6;n=n1;break;case 0x7b: // *n2=n1;n1=0;flag=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}//扫描第四行P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:n1=10*n1+7;n=n1;break; //7case 0xd7:n1=10*n1+8;n=n1;break; //8case 0xb7:n1=10*n1+9;n=n1;break; //9case 0x77: // /n2=n1;n1=0;flag=4;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}display(n);}}//延时函数void delay(int t){int x,y;for(x=0;x<t;x++)for(y=0;y<t;y++);}//数码管显示void display(int n){//溢出处理uchar g,s,b,q;int abs;if((n>9999)||(n<-999))error();//正数if((n>=0)&&(n<=9999)) {g=n%10;s=n/10%10;b=n/100%10;q=n/1000%10;P0=num[g];delay(5);P2=loc[4];delay(2);P2=loc[0];delay(3);if(n>=10){P0=num[s];P2=loc[3];delay(2);P2=loc[0];delay(3);}if(n>=100){P0=num[b];P2=loc[2];delay(2);P2=loc[0];delay(3);}if(n>=1000){P0=num[q];P2=loc[1];delay(2);P2=loc[0];delay(3);}}//负数if((n<0)&&(n>=-999)){abs=-n;g=abs%10;s=abs/10%10;b=abs/100%10;q=abs/1000%10;P0=num[g];P2=loc[4];delay(2);P2=loc[0];delay(2);if((abs/10%10>0)||(abs/100%10>0)){P0=num[s];P2=loc[3];;delay(2);P2=loc[0];delay(2);if((abs/100%10>0)){P0=num[b];P2=loc[2];delay(2);P2=loc[0];delay(2);if((abs/1000%10>0)){P0=num[q];P2=loc[1];delay(2);P2=loc[0];delay(2);}else{P0=num[11];P2=loc[1];delay(2);P2=loc[0];delay(2);}}else{P0=num[11];P2=loc[2];delay(2);P2=loc[0];delay(2);}}else{P0=num[11];P2=loc[3];delay(2);P2=loc[0];delay(2);}}}//溢出显示void error(){P2=loc[1];P0=ero[0];delay(2);P2=loc[0];delay(3);P2=loc[2];P0=ero[1];delay(2);P2=loc[0];delay(3);P2=loc[3];P0=ero[1];delay(2);P2=loc[0];delay(3);P2=loc[4];P0=ero[2];delay(2);P2=loc[0];delay(3); }。

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

[二0一三年] 单片机课程设计报告2013/12/261作品简介本作品为带有串口通信功能的计算器,PC可通过串口助手软件将算式发送至单片机,单片机立即将计算结果发送回PC,并且在液晶上显示结果。

串口通信波特率为两档可调,分别为9600bps和4800bps,可通过两个按键调整,同时在液晶上会显示当前的波特率。

计算器可自动识别输入的字符串,并自动判断输入的算式是否正确;可自动识别算式中包含错误字符、除数为零、浮点数做取余运算等错误。

当计算结果超出设定范围时在液晶上出现“超出范围”提示,同时向PC发送“The result is out of range! ”。

2作品整体方案2.1 串行通信功能:实验板和PC电脑通过USB线相连,使MCU和PC软件“串口助手”能够进行串行通信。

(1)当实验板上电时默认波特率为9600bps,并发送欢迎词和提示词,例如“Welcome to Calculator V1.0”,"You can press key1 and key2 to change baud rate."....(2)当实验板上按键1按下时波特率变更为4800bps,按键2按下时波特率变更为9600bps,并用两个LED灯指示相应的波特率。

2.2 计算器功能通过串口助手发送框发送需要计算的公式,例如20*4=,MCU收到后解析公式并计算结果,将结果返回给串口,例如“The result is 80”,同时将计算结果显示在数码管上,具体细节如下:(1)可以进行加(+)、减(-)、乘(*)、除(\)、取余(%)运算;(2)整形、浮点型运算;(3)当计算结果为整形数时,有效的运算结果范围是-999~9999,超过此结果,返回相应的提示符,例如“The result is out of range.”,液晶上显示“超出范围”;(4)当计算结果为浮点数时,有效的运算结果范围是-99.9~999.9,液晶上保留3位有效数字,超过此结果,返回相应的提示符,例如“The result is out of range.”,液晶上显示“超出范围”。

液晶显示结果及波特率AT89S52串口调试助手单片机波特率调整3程序设计思路本程序分为四部分:串口接收、字符串识别、算数运算、结果显示。

(1)串口接收:PC通过串口向单片机发送的算式是以字符串的形式发送的,故单片机程序可使用数组存放接收到的字符串。

由于每次发送的算式均以“=”结尾,所以在程序中可对每次接收到的字符进行检测,若检测到“=”则接收结束,程序开始执行下一步操作。

void init_serial()//初始化串口设置{TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;EA=1;ES=1;TR1=1;}void serial_receive() interrupt 4{if(RI==1){rec_str[rec_count]=SBUF;//将接收到的字符串保存在数组rec_str中if(rec_str[rec_count]=='='){flag=1;str_length=rec_count;}rec_count++;RI=0;}}(2)字符串的识别:由于接收到的算式是以字符串的形式保存在数组中,不能直接进行算术运算,需对字符串进行识别转换,得到相应的运算数和运算符。

并且自动识别出不正确的表达式。

while(rec_str[i]){if(rec_str[i]=='=')break;if((rec_str[i]>=48 && rec_str[i]<=57) || rec_str[i]=='.'){if(rec_str[i]=='.')sign_point=1;num[j][i-k]=rec_str[i];i++;}else{operator=rec_str[i];i++;k=i;j++;}}(3)算数运算:将转换得到的运算数根据运算符进行相应的运算操作,同时对违反算术运算规则的运算进行错误提示,如除数为零、浮点数取余等运算。

若是浮点数的运算还需要对结果进行小数位数的控制(含四舍五入)。

if(sign_point){num1=atof(num[0]);num2=atof(num[1]);if(num1<=0.001 || num2<=0.001){return 'N';}//if(operator=='/' && abs(num2)<0.001)//return 'N';switch(operator){case '+': result_f=num1+num2; break;case '-':if(num1-num2<0){result_f=num2-num1;sign_bit=1;if(result_f>99.999)return 'R';}elseresult_f=num1-num2;break;case '*': result_f=num1*num2; break;case '/':result_f=num1/num2; break;//case '%':r esult_f=(int)num1%(int)num2; break;default: break;}if(result_f>999.999)return 'R';result_str_len=sprintf(result_str,"%.3f",result_f);//将浮点数转换成字符串存储在result_str中}else{num3=atoi(num[0]);num4=atoi(num[1]);if(num3==0 || num4==0)return 'N';//if(num4==0 && operator=='/')//return 'N';switch(operator){case '+': result_i=num3+num4; break;case '-':if(num3-num4<0){result_i=num4-num3;sign_bit=1;if(result_i>999)return 'R';}elseresult_i=num3-num4;break;case '*': result_i=num3*num4; break;case '/':result_i=num3/num4; break;case '%':r esult_i=num3%num4; break;default: break;}if(result_i>9999)return 'R';result_str_len=sprintf(result_str,"%d",result_i);}(4)结果显示:将计算得到的结果通过串口发送至PC并且显示在液晶上,由于串口发送和液晶显示必须以字符的方式,所以须将计算结果转换成字符串。

void display_result(){uchar i,st=0;PCD_write_chinese_string_space(0,0,8,9,0,0); //清除显示PCD_write_chinese_string_space(0,1,8,9,0,0);if(sign_bit){st=1;PCD_write_chinese_ch(0,0,8,1,18,0);}for(i=0;i<result_str_len;i++){if(result_str[i]=='.')PCD_write_chinese_ch(st*8,0,8,1,19,0);elsePCD_write_chinese_ch(st*8,0,8,1,result_str[i]-48,0);st++;}}4遇到的问题及解决办法全局变量定义多了之后编译无法通过:经过资料查询,发现是软件默认的变量存储模式为Small,将其改为Large模式后问题得到很好的解决。

计算一次之后,第二次的结果会出现问题,受到第一次计算的影响:经过排查发现是由于没有将第一次存储的数据清空,在接收到第二次的字符时受到第一次存储的数据的影响。

对于浮点数保留若干位小数之后需要进行四舍五入的问题:在帮助组员进行数码管显示时,由于只保留一位小数,就需要考虑四舍五入的问题。

5小结此次单片机课设题目的难点在于对接收到的字符串的识别处理,且需要考虑多种特殊情况。

经过此次课设,对字符串的识别处理能力有了进一步的提高。

作为小组长,需要及时关组组员的进度,并帮助组员解决一些遇到的问题。

在这当中,需要按照别人程序的思路来对程序进行调试,这是挺有挑战的。

当然,通过与不同人的交流,也对自己的思路有了一定的积极影响,通过互相取长补短,让自己得到了很大的进步。

由于程序比较长,所以逻辑性和编程的规范就显得尤为重要。

在程序的编写过程中,需要分若干子函数,以实现不同的功能,当然在主函数中调用这些子函数的时候就需要注意顺序以及方式。

在变量的设置方面,由于设置了很多个全局变量,在函数调用时就不能随意调用。

在调试程序的过程中,多与别人交流交流,在解决某些问题时,不同的人会有不同的方法,互相交流可以使自己得到很大的进步,在解决问题时能够有更好的方法。

这对于自己编程思维的提高也有很大的提高,多写多调试,才能有大的进步。

相关文档
最新文档