ARM计算器实训报告

时间:2024.4.20

广东科学技术职业学院广州学院

实训报告

20 11  年  6   月

一、 设计任务与要求

实训的任务是基于ARM平台下进行简易电子计算器的设计。实训设计要求是实现十以内数的加法,实现简单的加法运算,且具有清零功能和简单的报错功能。

二、 总体方案与说明

本系统功能是实现个位数的加法运算,即在键盘上按下一个数字键,在数码管上显示其对应的数值,按下+,再按下一个数字键,在数码管上显示其数值,按下=,则调用软件的运算模块,进行运算,并回显结果,输出到数码管显示器上。硬件电路应分为两个模块,一是键盘接口电路,(如下所示)二是LED显示模块。LED显示包含2对8段数码管(LED_CS2 、LED_CS3),以及流水灯LED_CS4。

4*4小键盘:

1   2   3   +

4   5   6   -

7   8   9   *

C   0   =   ∕

      

三、 电路原理图

CPU电路图

使用旧版实验箱,其键盘电路图如下所示:

直入键盘电路图

矩阵键盘电路图

                                                 LED_CS2电路图

LED_CS3电路图

四、 软件主要模块流程图

主函数

五、 问题分析与解决方案

遇到的问题:

  1、如何根据按键值显示相应的0到9。

2、在做运算编写时,烧写进去后,不能够正确显示对应的按键值。

3、按键对应的GPIO口的设置。

4、连续运算功能与显示的设置。

5、多位数值的显示设置。

解决方案:

1、根据所用的开发板的按键的键值,将其存放在一个数组key_code中,并且将对应键值的符号值存放在另一个数组key_val中,其对应映射显而易见。

2、先用常数代入display()函数中,看能否正常显示数值。如果能的话,确定display()函数没有出错。然后,在直入和矩阵键盘判断处,将display()函数中得到的变量的值用常量来替换,在烧写进去,查看是否有错误,这样逐步排错。

3、首先由键盘的硬件电路图查找硬件对应按键部位的输入输出,再根据输入输出在270手册里在GPIO单元根据其是输入输出功能查找相应的GPIO口,找到口后,即可查看相应口的具体设置。

4、连续运算功能,一种是连续按下“=”键,程序会自动执行“上次的结果加、减、乘、除第二个数”这种功能;或者是运算完一次,就继续按运算符号和需要进行运算的数,最后显示运算结果。使用变量,每次运算之后,将结果赋给第一个数和第二个数,这样,每次执行的都会是第一个数的结果与第二个数的运算,从而实现连续运算的功能。

        5、显示多位数值,是要根据数值的位数进行计算判断,编写if语句判断输入数值的位数,如果是一位,则直接显示数值;如果是两位数,则个位由数值余十得到,十位由数值除十得到,并对应相应的位显示;如果是三位数,则个位由数值余十得到,十位由数值除十再余十得到,百位数则由数值除一百显示在LED_CS2中;如果是四位数值,其余位方法不变,千位由数值除一千再余十得到。

六、 实验体会

通过简易计算器的实训项目,对于arm的学习更有兴趣,理论的东西得到了实际的应用,自己也认识到自身的不足。实训的要求已经实现,通过查表、询问、操作等多种渠道完成。对于今后arm专业工作也有了一个初步的了解,虽然现在有很多不足,但自己也正朝这个方向不断的努力,相信自己能够做的更好!


第二篇:JAVA实训报告--计算器


《Java实训》设计报告

计算器

石家庄科技信息职业学院

信息工程系

20##年10月15日

项目名称

一、项目需求

  本程序的主要功能:

(1)单击“计算器”上的数字按钮(0~9)可以设置参与计算的运算数。

(2)单击“计算器”上的运算符按钮(+、-、*、/、1/x、sqrt、%)可以选择运算符号。

(3)单击“计算器”上的“=”按钮显示计算结果。

(4)单击“计算器”上的“复位”按钮清空计算结果。

(5)单击“计算器”上的“删除”按钮删除输入的最后一个数字。

二、项目设计

在设计计算器时,编写2个Java源文件:CalculatorWindow.java、NumberButton.java计算器除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。

下面是2个Java源文件的总体设计。

(1)CalculatorWindow.java(主类)

CalculatorWindow类负责创建计算器的主窗口,该类含有main方法,计算器从该类开始执行。CalculatorWindow类有4种类型的对象,分别是:LinkedList<String>、NumberButton、JButton、JTextField。

(2)NumberButton.java

NumberButton类创建的对象是主类CalculatorWindow窗口的一个“数字”按钮。NumberButton有一个int类型的成员temp,用于标明所创建的按钮所含有的运算符号。NumberButton所创建的22个按钮被添加到CalculatorWindow窗口中。

    1、CalculatorWindow类(主类)

(1)数据和方法

CalculatorWindow类是javax.swing包中JFrame的一个字类,并实现了ActionListener接口。类中有关数据和方法的详细说明。

1)成员变量

jbArray是NumberButton型数组,每个单元是一个NumberButton类创建的“数字按钮”对象,该数组长度为10。numberButton数组中的“数字按钮”含有的数字依次为0~9。每个“数字按钮”都注册有ActionEvent事件监听器。

2)方法

main(String args[])方法是计算器程序运行的入口方法。

CalculatorWindow()是构造方法,负责完成窗口的初始化。

(2)代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class jisuanqi extends JFrame implements ActionListener

{

       private JTextField jtResult=new JTextField();

       private JButton jb_clear=new JButton("复位");

       private JButton jb_delete=new JButton("删除");

       private static JButton[][] jbArray={{new JButton("7"),new JButton("4"),new JButton("1"),new JButton("0")},

                                          {new JButton("8"),new JButton("5"),new JButton("2"),new JButton("+/-")},

                                          {new JButton("9"),new JButton("6"),new JButton("3"),new JButton(".")},

                                          {new JButton("/"),new JButton("*"),new JButton("-"),new JButton("+")},

                                          {new JButton("sqrt"),new JButton("%"),new JButton("1/x"),new JButton("=")}                              

       };

       int first=0;

       double qian;

    String fuhao;

    boolean clear=true,clickable=true;  

       public jisuanqi()

       {

              setFrame();

              addListener();

       }

       public void setFrame()

       {

              this.setLayout(null);

              this.setTitle("计算器");

              jtResult.setBounds(120,100,310,30);

              jtResult.setEditable(false);

              jtResult.setHorizontalAlignment(JTextField.RIGHT);

              this.add(jtResult);

              jb_clear.setBounds(290,150,60,30);

              this.add(jb_clear);

              for(int i=0;i<jbArray.length;i++)

              {

                     for(int j=0;j<jbArray[0].length;j++)

                     {

                            jbArray[i][j].setBounds(50+80*i,200+60*j,60,30);

                            this.add(jbArray[i][j]);

                     }

              }

              jb_delete.setBounds(370,150,60,30);

              this.add(jb_delete);

              this.setBounds(430,130,500,500);

              this.setVisible(true);

       }

       public void addListener()

       {

              jtResult.addActionListener(this);

              jb_clear.addActionListener(this);

              jb_delete.addActionListener(this);

              for(int i=0;i<jbArray.length;i++)

              {

                     for(int j=0;j<jbArray[0].length;j++)

                     {

                            jbArray[i][j].addActionListener(this);

                     }

              }

       }

       public void actionPerformed(ActionEvent e)

       {

              Object temp=e.getSource();

              if(temp==jb_clear)

              {

                     jtResult.setText("");

              }

              if(temp==jb_delete)

              {

                     String s = jtResult.getText();

                     jtResult.setText("");

                     for (int i = 0; i < s.length() - 1; i++)

                     {

                            char a = s.charAt(i);

                            jtResult.setText(jtResult.getText() + a);

                     }

              }

              if(temp==jbArray[0][3])//点击"0"按钮

              {

                     if(clear==false)//判断是否点击了符号位

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"0");

              }

              if(temp==jbArray[0][2])//点击"1"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"1");

                     clear=true;//第二次不在清空

              }

              if(temp==jbArray[1][2])//点击"2"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"2");

                     clear=true;

              }

              if(temp==jbArray[2][2])//点击"3"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"3");

                     clear=true;

              }

              if(temp==jbArray[0][1])//点击"4"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"4");

                     clear=true;

              }

              if(temp==jbArray[1][1])//点击"5"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"5");

                     clear=true;

              }

              if(temp==jbArray[2][1])//点击"6"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"6");

                     clear=true;

              }

              if(temp==jbArray[0][0])//点击"7"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"7");

                     clear=true;

              }if(temp==jbArray[1][0])//点击"8"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"8");

                     clear=true;

              }

              if(temp==jbArray[2][0])//点击"9"按钮

              {

                     if(clear==false)

                     jtResult.setText("");

                     jtResult.setText(jtResult.getText()+"9");

                     clear=true;

              }

              if(temp==jbArray[2][3])//点击"."按钮

              {

                     clickable=true;

                     for (int i = 0; i < jtResult.getText().length(); i++)

                     if ('.' == jtResult.getText().charAt(i))

                     {

                            clickable=false;

                            break;

                     } //第一层判断是否里面含有小数点;

                     if(clickable==true)//第二坛判断

                     jtResult.setText(jtResult.getText()+".");

              }

              try

              {

                     if(temp==jbArray[3][3])//点击"+"按钮

                     {

                            qian=Double.parseDouble(jtResult.getText());

                            fuhao="+";

                            clear=false;

                     }

                     if(temp==jbArray[3][2])//点击"-"按钮

                     {

                            qian=Double.parseDouble(jtResult.getText());

                            fuhao="-";

                            clear=false;

                     }

                     if(temp==jbArray[3][1])//点击"*"按钮

                     {

                            qian=Double.parseDouble(jtResult.getText());

                            fuhao="*";

                            clear=false;

                     }

                     if(temp==jbArray[3][0])//点击"/"按钮

                     {

                            qian=Double.parseDouble(jtResult.getText());

                            fuhao="/";

                            clear=false;

                     }

                     if(temp==jbArray[4][3])//点击"="按钮

                     {

                            double ss=Double.parseDouble(jtResult.getText());

                            jtResult.setText("");

                            if(fuhao=="+")

                            jtResult.setText(qian+ss+"");

                            if(fuhao=="-")

                            jtResult.setText(qian-ss+"");

                            if(fuhao=="*")

                            jtResult.setText(qian*ss+"");

                            if(fuhao=="/")

                            jtResult.setText(qian/ss+"");

                            clear=false;//要清空前一次的数据

                     }

                     if(temp==jbArray[4][0])//点击"sqrt"按钮

                     {

                            String s = jtResult.getText();

                            if(s.charAt(0) == '-')

                            {

                                   jtResult.setText("负数不能开根号");

                            }

                            else

                            jtResult.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(jtResult.getText()))));

                            clear=false;

                     }

                     if(temp==jbArray[4][2])//点击"1/x"按钮

                     {

                            if (jtResult.getText().charAt(0) == '0'&&jtResult.getText().length() == 1)

                            {

                                   jtResult.setText("除数不能为零");

                            }

                            else

                            {

                                   boolean isDec = true;

                                   int i, j, k;

                                   String s = Double.toString(1 / Double.parseDouble(jtResult.getText()));

                                   for (i = 0; i < s.length(); i++)

                                   if (s.charAt(i) == '.')

                                   break;

                                   for (j = i + 1; j < s.length(); j++)

                                   if (s.charAt(j) != '0')

                                   {

                                          isDec = false;

                                          break;

                                   }

                                   if (isDec == true)

                                   {

                                          String stemp = "";

                                          for (k = 0; k < i; k++)

                                          stemp += s.charAt(k);

                                          jtResult.setText(stemp);

                                   }

                                   else

                                   jtResult.setText(s);

                            }

                            clear=false;

                     }

                     if(temp==jbArray[4][1])//点击"%"按钮

                     {

                            jtResult.setText("0");

                            clear=false;

                     }

                     if (temp == jbArray[1][3]) //点击"+/-"按钮

                     {

                            boolean isNumber = true;

                            String s = jtResult.getText();

                            for (int i = 0; i < s.length(); i++)

                            if (! (s.charAt(i) >= '0'&&s.charAt(i) <= '9'||s.charAt(i) == '.'||s.charAt(i) == '-'))

                            {

                                   isNumber = false;

                                   break;

                            }

                            if (isNumber == true)

                            {

                                   //如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉

                                   if(s.charAt(0) == '-')

                                   {

                                          jtResult.setText("");

                                          for (int i = 1; i < s.length(); i++)

                                          {

                                                 char a = s.charAt(i);

                                                 jtResult.setText(jtResult.getText() + a);

                                          }

                                   }

                                   //如果当前字符串第一个字符不是符号,则添加一个符号在首字母处

                                   else

                                   jtResult.setText('-' + s);

                            }

                     }

              }

              catch(Exception eee)

              {

                     System.out.println("运算时,首先输入数字或字符");

                     jtResult.setText("运算出错");

                     clear=false;

              }

       }

       public static void main(String args[])

       {

              new jisuanqi();

       }

}

(3)效果图

      CalculatorWindow创建的窗口效果如图1所示。

三、项目总结

本程序为JAVA中简单的计算器,主要实现简单的数学计算,删除,复位等功能。运用JAVA中的类,数组,成员变量等知识,有简单的界面,按钮等。

本程序还存在一定的缺陷,功能简单,界面还需美化等。

四、心得体会

编写一个程序,无论会实现什么功能,都必须掌握这门语言的要领、基本知识及工具的运用,同时别的辅助工具也要有一定的了解。因此要更好的运用Java语言编程还需更深入的学习,这样才能把一个程序的功能实现的淋漓尽致,界面才会更加美观。

同时编写这个程序让我更好的理解了数组、类的运用及事件的监听和获取等功能。

更多相关推荐:
计算器实训报告

报告编号第3组综合课程设计报告嵌入式计算器实训学生姓名指导教师所在系电子工程系所学专业电子信息工程年级20xx级201年6月1设计题目描述与总体要求22设计研究的主要工作23系统概述24设计原理与方法35小结9...

实训报告参考(计算器)

实训项目一Java电子计算器需求分析在日常生活中经常需要用到计算器比如科学计算数值计算会计业务等在Applet中实现一个精巧实用的计算器可以让用户在使用网站服务的同时可以很方便地进行数据运算可增加页面的实用性同...

计算器单片机实训报告

重庆电力高等专科学校单片机实训报告简易计算器专业电子信息工程技术班级信息1212组员张忠艳学号20xx03020xx7组员王传胜学号20xx03020xx3组员汤承练学号20xx03020xx2指导老师李景明任...

计算器实验报告

目录一系统开发的背景1二系统分析与设计1一二计算器的主要功能1系统模块结构设计1三系统的设计与实现2一二计算器的初始界面2一般计算3三解一元二次方程5四计算银行本利和5四系统测试7一二测试主函数MAIN7测试一...

简单的计算器实验报告

HUNANUNIVERSITY程序设计训练简单的计算器报告学生姓名田博鑫学生学号专业班级指导老师20xx年6月16日至20xx年7月10日1吴蓉晖1程序设计目的和要求目的此次程序设计的目的主要是为了我们能更好的...

计算器实验报告 (1)

HTML网页实验报告院系计算机控制与工程学院班级计1241学号姓名完成日期1一实验名称设计一个网页计算器二需求分析计算器是日常生活中十分便捷有效的工具能实现加减乘除开方求倒数等简单运算的工具要实现计算功能可以用...

C#计算器实验报告

C计算器实验报告班级学号20xx13432姓名蔡启林一实验目的和要求设计一个简单计算器具有一般计算功能能进行基本的加减乘除运算还具有求根号倒数等功能特点是能进行不同进制的运算和不同进制间的转换主要的工作主要是操...

vb 简易计算器实验报告

简易计算器课程设计报告一实验目的模拟计算器的功能系统启动后先清屏再在显示屏右侧显示0字样系统仅接收数字键加减乘除键退格键C键复位或回车键ESC键退出系统作为有效按键其余按键不响应按键后屏幕显示效果要达到一般计算...

java计算器实训

简易计算器一基本功能基本运算加减乘除等根据个人能力适当增加更加丰富的功能二具体要求1源程序中至少包含一个类主类名为Computer2加减乘除的方法名分别为getAddgetSubgetMulgetDiv分别实现...

java计算器周毅20xx1752实验报告

面向对象程序设计AJava实验报告实验名称简单计算器实验类型设计型实验指导教师刘涌专业班级软件1103姓名周毅学号20xx1752实验地点东六E301实验成绩日期20xx年4月19日实验简单的计算机一实验目的学...

java计算器实验报告

java计算器实验报告课题名称程序设计基础任课教师李慧哲辅导教师专业班级信息管理专业学号20xx1121043姓名李丽丽实验名称java计算器实验报告文件名李丽丽20xx11210431系统概述题目要求使用ja...

java报告 —计算器

淮海工学院计算机工程学院实验报告书课程名面向对象程序设计题目基于图形用户界面的JDBC程序开发班级学号20xx122665姓名面向对象程序设计实验报告11实验内容利用java的GUI控件实现一个简单的计算器应用...

计算器实训报告(34篇)