计算器实验报告

合集下载

计算器 实验报告

计算器 实验报告

计算器实验报告计算器实验报告引言:计算器是一种广泛应用于日常生活和工作中的电子设备。

它的出现极大地方便了人们的计算工作,提高了计算的准确性和效率。

本实验旨在深入了解计算器的原理和工作方式,并通过实际操作,探索计算器的功能和使用方法。

一、计算器的原理和结构计算器是一种基于数字电路和逻辑电路的电子设备。

它主要由处理器、显示屏、键盘和电源等组成。

处理器是计算器的核心部件,负责执行各种计算操作。

显示屏用于显示计算结果和输入的数据。

键盘则用于输入数字和操作符。

电源为计算器提供电能。

二、计算器的基本功能1. 四则运算:计算器可以进行加、减、乘、除等基本的四则运算。

用户只需按下相应的数字和操作符键,计算器即可自动完成计算,并在显示屏上显示结果。

2. 百分数计算:计算器还可以进行百分数的计算。

用户只需输入百分数和相应的操作符,计算器将自动将百分数转换为小数,并进行计算。

3. 平方根和乘方计算:计算器还具备开平方根和乘方的功能。

用户只需按下相应的键,输入要计算的数字,计算器将自动进行计算,并在显示屏上显示结果。

4. 括号和优先级计算:计算器支持括号和优先级计算。

用户可以使用括号来改变计算的顺序,并通过设置优先级来控制计算的顺序。

三、计算器的使用方法1. 数字输入:用户可以通过按下相应的数字键来输入数字。

计算器一般有0到9的数字键,用户可以按下多次来输入多位数。

2. 操作符输入:计算器一般有加、减、乘、除等操作符键。

用户可以按下相应的操作符键来输入操作符。

3. 清除和删除:计算器一般有清除和删除键。

用户可以使用清除键来清除计算器的显示屏和内存中的数据。

删除键则用于删除输入的数字和操作符。

4. 计算结果:用户可以按下等号键来计算结果。

计算器将根据输入的数字和操作符进行计算,并在显示屏上显示结果。

四、实验过程和结果在实验中,我们使用了一款普通的计算器进行操作。

首先,我们按下数字键输入了一组数字,然后按下操作符键进行四则运算。

简单计算器实验报告

简单计算器实验报告

简单计算器实验报告简单计算器实验报告引言:在现代社会,计算器已经成为人们生活中不可或缺的工具之一。

无论是在学校、办公室还是家庭,计算器都扮演着重要的角色。

本实验旨在设计和构建一个简单的计算器,并通过实验验证其功能和准确性。

实验步骤:1. 设计计算器的外观和功能:我们首先对计算器进行了外观设计,选择了简洁、易于使用的界面。

然后确定了计算器的基本功能,包括加法、减法、乘法和除法。

2. 选择合适的硬件和软件:为了构建计算器,我们选择了合适的硬件和软件。

硬件方面,我们选用了一块Arduino开发板、液晶显示屏和按键。

软件方面,我们使用了Arduino编程语言。

3. 连接硬件和编写代码:我们将液晶显示屏和按键与Arduino开发板连接起来,并编写了相应的代码。

代码中包括了计算器的逻辑运算和界面显示。

4. 测试计算器的功能和准确性:在完成硬件连接和代码编写后,我们对计算器进行了测试。

我们输入了一系列的算术表达式,包括简单的加减乘除运算,以及复杂的多步运算。

通过与手动计算的结果进行对比,我们验证了计算器的功能和准确性。

实验结果:经过多次测试,我们的计算器表现出了良好的功能和准确性。

无论是简单的加法还是复杂的多步运算,计算器都能够正确地给出结果。

液晶显示屏清晰地显示了算术表达式和计算结果,而按键的响应速度也非常迅速。

讨论:虽然我们的计算器在功能和准确性方面表现出色,但仍有一些改进的空间。

首先,我们可以增加更多的功能,如开方、求余等。

其次,我们可以改进界面设计,使其更加美观和易于使用。

此外,我们还可以考虑加入更强大的处理器和更大的内存,以提高计算器的性能。

结论:通过本次实验,我们成功设计和构建了一个简单的计算器,并验证了其功能和准确性。

计算器在各种算术运算中表现出色,并且具有清晰的界面和快速的响应速度。

然而,我们也意识到计算器仍有改进的空间,包括增加更多功能和改进界面设计。

总的来说,本次实验为我们深入了解计算器的原理和构造提供了宝贵的经验。

简单计算器实验报告

简单计算器实验报告

简单计算器实验报告
《简单计算器实验报告》
实验目的:通过使用简单计算器进行数学运算,探究其在日常生活中的实际应用价值。

实验材料:简单计算器、纸笔
实验步骤:
1. 使用简单计算器进行加法、减法、乘法和除法运算,记录运算过程和结果。

2. 尝试使用计算器进行复杂运算,如求平方根、求倒数等。

3. 计算器的功能和使用方法的讨论。

实验结果:
通过实验,我们发现简单计算器在日常生活中有着非常重要的应用价值。

它可以帮助我们快速准确地进行数学运算,节省时间和精力。

同时,计算器还具有一些高级的功能,如求平方根、求倒数等,这些功能在科学计算和工程计算中也具有很大的作用。

结论:
简单计算器是我们日常生活中必不可少的工具之一,它的实际应用价值是非常高的。

通过这次实验,我们更加深入地了解了计算器的功能和使用方法,对于我们的学习和工作都有着重要的帮助。

通过这次实验,我们不仅对计算器有了更深入的了解,也增加了对数学运算的兴趣,希望我们在日常生活中能够更加灵活地运用计算器,提高我们的数学运算能力。

计算器设计实验报告

计算器设计实验报告

计算器设计实验报告指导老师:张永安组长:潘文帅成员:宋王庆郭肖男常跃计算器设计实验报告一、实验目的1、通过实验了解计算器的程序代码。

2、能看懂计算器的电路原理图。

3、锻炼学生的动手实践能力。

二、实验内容设计一个简易的计算器,完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数。

三、实验设备四、实验说明1.计算器电板图2.计算器引脚原理图3.程序代码/*************************************************程序名称:计算器设计功能:完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示"E"**************************************************/#include<AT89X51.H>unsigned char code XIANSHI[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40}; unsigned char code XIANSHIXIAOSHUDIAN[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//带小数点//unsigned char code XIANSHIWRONG[]={0x00,0x00,0x00,0x00,0x79};//错误时的显示// unsigned char code SAOMIAO[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴极扫描码表格//unsigned char DANYUAN[8]={0,0,0,0,0,0,0,0};unsigned long CUNZHI;unsigned long SHU[2]={0,0};unsigned char k,key,m,n;/*************************************************SIGN 存运算符(+、-、*、/)FLAG 用第几个数组,(出现非运算符前为0,出现运算符后为1)WRONG 输入多于4个时错误标志位(0对、1错)COUNT 输入0~9数字的个数SIZE 减数大于被减数时为1SIGNCOUNT 输入运算符的个数XIAOSHU 存一位小数的值DIVKEY 运算除法时置为1**************************************************/unsigned char SIGN,FLAG,WRONG,COUNT,SIZE,SIGNCOUNT,XIAOSHU[2],DIVKEY;/*************************************************程序名称:显示程序入口参数:无功能:实现将CUNZHI中的值进行动态数码显示局部变量:i,j,q全局变量:CUNZHI,DANYUAN[0],DANYUAN[1],DANYUAN[2],DANYUAN[3] 所用端口功能:P1口送显示码P2口公共端扫描返回值:无**************************************************/void disp(void){ unsigned char i,j,p,q;/**************错误时的显示*************/if(WRONG==1){ for(i=0;i<5;i++){ P1=XIANSHIWRONG[i];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{ if(DIVKEY==1){ DANYUAN[0]=XIAOSHU[1];DANYUAN[1]=XIAOSHU[0];DANYUAN[2]=CUNZHI%10;DANYUAN[3]=CUNZHI/10%10;DANYUAN[4]=CUNZHI/100%10;DANYUAN[5]=CUNZHI/1000%10;for(p=5;p>2;p--){ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}for(i=0;i<5;i++){ if(i==2) //倒数第三位为小数位//{ P1=XIANSHIXIAOSHUDIAN[DANYUAN[i]];}else{P1=XIANSHI[DANYUAN[i]];}P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{DANYUAN[0]=CUNZHI%10;DANYUAN[1]=CUNZHI/10%10;DANYUAN[2]=CUNZHI/100%10;DANYUAN[3]=CUNZHI/1000%10;/*******************首位为零不显示*************/for(p=3;p>0;p--) //首位为零不显示//{ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}/**************为负数时的显示*****************/if(SIZE==1) //为负数第五位数码管显示"-"//{ DANYUAN[4]=17;}else //第五位数码管不显示//{ DANYUAN[4]=16;}for(i=0;i<5;i++){ P1=XIANSHI[DANYUAN[i]];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}}}/**************************************************程序名称:处理程序入口参数:key功能:实现加减乘除运算全局变量:key、CUNZHI、SHU[0]、SHU[1]、FLAG、SIGN返回值:无**************************************************/void CHULI(key){unsigned char i,j;/*****************声音“嘀”*****************/TR0=1;for(i=200;i>0;i--) //延时100ms//for(j=248;j>0;j--);TR0=0;/*****************************************/if(key==15) //按键为清除键//{ CUNZHI=0;SHU[0]=0;SHU[1]=0;COUNT=0;WRONG=0;SIZE=0;SIGNCOUNT=0;XIAOSHU[0]=0;XIAOSHU[1]=0;DIVKEY=0;}else if((key>=0)&&(key<=9)) //按键为数字键// { COUNT++; //按下的数字键的次数///*****************加权运算*****************/SHU[FLAG]=SHU[FLAG]*10+key; //加权运算//CUNZHI=SHU[FLAG];}else if((key>=10)&&(key<=13)) //按键为运算键//{ SIGNCOUNT++;SIGN=key;FLAG++;COUNT=0;}else if(key==14) //按键为等于键//{ switch(SIGN){ case 10:CUNZHI=SHU[0]+SHU[1];break;case 11:{ if(SHU[0]>SHU[1]){ CUNZHI=SHU[0]-SHU[1];}else{ SIZE=1;CUNZHI=SHU[1]-SHU[0];}}break;case 12:CUNZHI=SHU[0]*SHU[1];break;case 13:DIVKEY=1;CUNZHI=SHU[0]*100/SHU[1];XIAOSHU[1]=CUNZHI%10;XIAOSHU[0]=CUNZHI/10%10;CUNZHI/=100;if(CUNZHI>999){ WRONG=1;}break;}}if((COUNT==5)||(SIGNCOUNT>1)||(CUNZHI>9999)) //输入数字键大于5时将WRONG置1//{ WRONG=1;}}/**************************************************程序名称:键盘扫描入口参数:无功能:进行键盘扫描全局变量:k局部变量:i,j调用函数:CHULI(key)返回值:无**************************************************/void JIANPAN(void){ unsigned char i,j;P3=0xff;P3_4=0; //扫描P3.4这条线上的四个按键//k=P3;k=k&0x0f;if(k!=0x0f) //看P3.4这条线上是否真的有按键按下//{ for(i=20;i>0;i--) //延时一段时间//for(j=248;j>0;j--);k=P3; //再判断一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过可能发生的四种可能比较看是哪个按键按下//{ case 0x0e:key=0;break;case 0x0d:key=4;break;case 0x0b:key=8;break;case 0x07:key=12;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff;P3_5=0; //扫描P3.5这条线上的四个按键// k=P3;k=k&0x0f;if(k!=0x0f) //看P3.5这条线上是否有按键按下// { for(i=20;i>0;i--) //延时等待//for(j=248;j>0;j--);k=P3; //再看一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过比较看是P3.5这条线上的哪一个按键按下// { c ase 0x0e:key=1;break;case 0x0d:key=5;break;case 0x0b:key=9;break;case 0x07:key=13;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.6这条线上的四个按键是否按下//P3_6=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=2;break;case 0x0d:key=6;break;case 0x0b:key=10;break;case 0x07:key=14;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.7这条线上的四个按键是否按下//P3_7=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=3;break;case 0x0d:key=7;break;case 0x0b:key=11;break;case 0x07:key=15;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}}/**************************************************程序名称:主程序功能:实现计算器加减乘除运算并显示全局变量:CUNZHI、FLAG、SIGN调用函数:disp()、JIANPAN()返回值:无***************************************************/void main(void){ TMOD=0X02;ET0=1;EA=1;TR0=0;TH0=(256-200)%256;TL0=(256-200)/256;CUNZHI=0;FLAG=0;SIGN=0;WRONG=0;SIZE=0;XIAOSHU[0]=0;while(1){ d isp();JIANPAN();}}/**************************************************定时中断***************************************************/void t0(void) interrupt 1 using 1{ P0_0=~P0_0;}五、实验结果首先按复位键,输入想要计算的数,进行四则运算(+ - * /)操作完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示“E”运算错误或计算延迟则有警报声提示。

C#计算器实验报告

C#计算器实验报告

C#计算器实验报告班级:2010134学号:*********姓名:***一实验目的和要求设计一个简单计算器,具有一般计算功能,能进行基本的加减乘除运算,还具有求根号,倒数等功能。

特点是能进行不同进制的运算和不同进制间的转换。

主要的工作主要是操作数与被操作数进行简单的加、减、乘、除运算来完成基本的,而且还可以进行简单的科学运算例如计算一个数的平方、开方、正弦、余弦、log、ln等操作还可以计算面积、周长、体积和表面积等。

通过新的技术和新方法来实现计算功能显示界面为Windows From窗体。

二功能模块设计标准计算器通过Windows Form窗体中的对应按钮接受用户输入数据提交对应的方法中来完成相应的功能计算再将结果显示在显示框内。

显示界面为Windows From窗体。

下面是一个简单的计算器的基本功能:1加法两个数据进行加操作可以为小数。

2减法两个数据进行减操作可以为负数相减。

3乘法两个数相乘4除法两个数相除5 倒数可以求得一个数的倒数6开方开方后的结果可以精确到16位。

科学计算器1平方接收的数相乘结果保留一位小数。

2立方接收的数相乘两次3正弦正弦结果精确度同开方。

4余弦余弦结果精确度同上。

5 LogLog运算精确到16位。

6 Ln以e为底的对数。

7 二进制二进制数的运算8 八进制八进制数的运算9 十进制十进制数的运算11 十六进制十六进制的运算12 倒数可以求得一个数的倒数13 开方开方后的结果可以精确到16位。

14 颜色可以选择输入字体的颜色三设计界面标准型科学型四详细设计过程(一)打开VS2010创建项目(二)界面设计1.进入界面2.菜单设计(1)选择VS201的菜单栏中的“视图|工具箱”单击,调出工具箱(出现在VS用户区左侧。

(2)在工具箱中选择“菜单和工具栏|MenuStrip”,拖到程序界面用户区,并根据自己的喜好在“属性窗口”(可以使用“视图|属性窗口”调出,一般在用户区右下角)设置菜单栏宽度、颜色等。

计算器黑盒测试实验报告

计算器黑盒测试实验报告

西实科技验报算告?实验名称计算器黑盒测试I实验地点____________________实验日期_______________指导教师__________________学生班级________________学生姓名__________________学生学号_________________提交日期软件教研室制一、测试目的设计测试用例、使用各种测试方法进行计算器的测试,并对测试结果进行分析二、测试内容1•软件说明:实现一个小的计算器程序,只需要完成加、减、乘、除运算,设计测试用例,并对测试结果进行分析,同时计算器运行稳定。

2、设计测试用例3、执行测试4、测试结果分析5、源代码三、测试步骤(一)、计算器界面2、设计测试用例(1)等价类测试:1、4个等价类测试用例的分析过程如下:2、对应测试的结果分析: 整型:1.加(55+50)2.减(78-24)3.乘(15*25)4.除(36/4)小数1.加(25.3+12.7)2.减(14.3-11.7)3.乘(25.6*12.8)4.除(50.2/20.7)负数6.加-20+-217.减(-15)-(-14)8.乘-12*-129.除-16/-5(其中算式写法错误导致正常运算错误)无效输入1.加(E1+t2):程序中无效数字无法正常输入,程序无法进行。

2.减(G4-k5)程序中无效数字无法正常输入,程序无法进行。

(同上)3.乘(I5*l6)程序中无效数字无法正常输入,程序无法进行。

(同上)4.除(Ff/se)程序中无效数字无法正常输入,程序无法进行。

(同上)简易计食器1、计算器4个标准等价类测试用例的分析过程如下:测试用例被加数加数预期输出Testi 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -70 10 正常运算Test6 10 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Testil 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test2结果:Test3结果:Test4结果:Test5结果:Test6结果:减法:1、计算器4个标准等价类测试用例的分析过程如下:2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:乘法1、计算器42、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:除法1、计算器4个标准等价类测试用例的分析过程如下:测试用例被除数除数预期输出Test2结果:Test3结果:Test8结果:附录:源代码CCalculateDlg::CCalculateDlg(CWnd* pParent /*=NULL*/):CDialog(CCalculateDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculateDlg)m_parameter = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;} void CCalculateDlg::DoDataExchange(CDataExchange* pDX)CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCalculateDlg)DDX_Text(pDX, IDC_EDIT, m_parameter);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculateDlg, CDialog)//{{AFX_MSG_MAP(CCalculateDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_clear, Onclear)ON_BN_CLICKED(IDC_calculate, Oncalculate)ON_BN_CLICKED(IDC_para1, Onpara1)ON_BN_CLICKED(IDC_para2, Onpara2)ON_BN_CLICKED(IDC_para3, Onpara3)ON_BN_CLICKED(IDC_para4, Onpara4)ON_BN_CLICKED(IDC_para5, Onpara5)ON_BN_CLICKED(IDC_para6, Onpara6)ON_BN_CLICKED(IDC_para7, Onpara7)ON_BN_CLICKED(IDC_para8, Onpara8)ON_BN_CLICKED(IDC_para9, Onpara9)ON_BN_CLICKED(IDC_para0, Onpara0)ON_BN_CLICKED(IDC_point, Onpoint)ON_BN_CLICKED(IDC_minus, Onminus)ON_BN_CLICKED(IDC_plus, Onplus)ON_BN_CLICKED(IDC_subtrack, Onsubtrack)ON_BN_CLICKED(IDC_multiply, Onmultiply)ON_BN_CLICKED(IDC_divide, Ondivide)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CCalculateDlg message handlersBOOL CCalculateDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CCalculateDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CCalculateDlg::OnPaint(){if (IsIconic())CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icon dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CCalculateDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCalculateDlg::Onclear(){UpdateData(true);m_parameter = 0;CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code herevoid CCalculateDlg::Oncalculate(){UpdateData(true);CalculatePara = m_parameter;switch(CalculateExpre){case'+':CalculateResult += CalculatePara;m_parameter = CalculateResult;break;case,-':CalculateResult -= CalculatePara;m_parameter = CalculateResult;break;case,*,:CalculateResult *= CalculatePara;m_parameter = CalculateResult;break;case,/':if (CalculatePara){CalculateResult /= CalculatePara;m_parameter = CalculateResult;}else{m_parameter = 0;MessageBox(”除数不能为零!”);} break;}// TODO: Add your control notification handler code hereCalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);}void CCalculateDlg::Onpara1(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 1;}else{CalculatePara = m_parameter + 1/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara2(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 2;elseCalculatePara = m_parameter + 2/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara3(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 3;}else{CalculatePara = m_parameter + 3/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara4(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 4;}elseCalculatePara = m_parameter + 4/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara5(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 5;}else{CalculatePara = m_parameter + 5/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara6(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 6;}else{CalculatePara = m_parameter + 6/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara7(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 7;}else{CalculatePara = m_parameter + 7/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara8(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 8;}else{CalculatePara = m_parameter + 8/pow(10,Sumpoint);Sumpoint++;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara9(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 9;}else{CalculatePara = m_parameter + 9/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara0(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 0;}else{Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here void CCalculateDlg::Onpoint(){Ispoint = true;Sumpoint = 1;// TODO: Add your control notification handler code here}void CCalculateDlg::Onminus(){UpdateData(true);m_parameter = 0 - m_parameter;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onplus(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '+';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onsubtrack(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre =m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onmultiply(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '*';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Ondivide(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '/';m_parameter = 0;Ispoint = false;UpdateData(false);// TODO: Add your control notification handler code here。

计算器实验报告

计算器实验报告

计算器实验报告一,实验目的1、学习按键扫描及LED数码管显示的设计方法。

2、设计任务及要求利用实验平台上8个LED数码管,设计可以通过键盘输入,并能显示输入相对应的数字、能够进行加,减,乘,除准确的基本运算、能够进行3位或3位的以上的乘,除运算.二,实验要求基本要求:1、可以通过键盘输入,并能显示输入相对应的数字.2、能够进行加,减,乘,除准确的基本运算、3、能够进行3位或3位的以上的乘,除运算.三,实验基本原理利用单片机实现简单计算器的加减乘除,通过键盘输入数据并在数码管上显示出数据,然后按下加减乘除任意一个键,再输入第二个数并显示,再按下等于号时,执行第一次输入的数与第二个数的加减乘除函数,并显示出最终结果。

四,实验设计分析针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为按键扫描、数码管显示输入数据、加减乘除函数,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要键盘扫描,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。

计算器实验报告

计算器实验报告

题目:界面计算器学生姓名:专业:学号:指导老师:1.实验目的:设计一个简单的计算器程序,实现简单的计算功能。

2.实验内容:(1)体系设计:程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示。

(2)设计思路:1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator;2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框;3)设计按钮,并修改其相应的ID与Caption;4)选择和设置各控件的单击鼠标事件;5)为编辑框添加double类型的关联变量m_edit1;6)在calculatorDlg.h中添加math.h头文件,然后添加public成员;7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件的响应函数代码.3.程序调试4.附录添加的public成员:double tempvalue; //存储中间变量double result; //存储显示结果的值int sort; //判断后面是何种运算:1.加法2.减法 3.乘法 4.除法int append; //判断后面是否添加数字成员初始化:CCalculatorDlg::CCalculatorDlg(CWnd* pParent/*=NULL*/): CDialog(CCalculatorDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculatorDlg)m_edit1 = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);tempvalue=0;result=0;sort=0;append=0;}各控件响应函数代码:void CCalculatorDlg::OnButton1() //按钮“1”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+1;m_edit1=result;append=0;UpdateData(FALSE);void CCalculatorDlg::OnButton2() //按钮“2”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+2;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton3() //按钮“3”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+3;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton4() //按钮“4”// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+4;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton5() //按钮“5”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+5;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton6() //按钮“6”{// TODO: Add your control notification handler codehereif(append==1)result=0;result=result*10+6;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton7() //按钮“7”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+7;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton8() //按钮“8”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+8;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton9() //按钮“9”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+9;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONzero() //按钮“0”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+0;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONequal() //按钮“=”{// TODO: Add your control notification handler code hereswitch(sort){case 1:result=result+tempvalue;break;case 2:result=tempvalue-result;break;case 3:result=result*tempvalue;break;case 4:result=tempvalue/result;break;}m_edit1=result;sort=0;append=1;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONclean() //按钮“C”{// TODO: Add your control notification handler code heretempvalue=0;result=0;m_edit1=0.0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONplus() //按钮“+”{// TODO: Add your control notification handler code heresort=1;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONminus() //按钮“-”{// TODO: Add your control notification handler code heresort=2;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONmulti() //按钮“*”{// TODO: Add your control notification handler code heresort=3;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONdiv() //按钮“/”{// TODO: Add your control notification handler code heresort=4;tempvalue=result;m_edit1=0;append=1;}10。

计算器-MFC程序实验报告

计算器-MFC程序实验报告

题目:计算器编程实验一、目的:编写一个程序实现+、-、*、/、sqrt、x^n基本运算,同时有清除和归零的功能。

二、程序说明:(1)符号说明:SR[20]:是用来存储输入字符串的变量;SR1[20]:为第一个字符为’0’,其余都为’’的字符串变量,当按清零健时赋给SR[20]变量,实现SR[20]“清零”;NUM1:是存储输入的数值变量;NUM2:是用来存储第一个输入的数值变量,因为每一步计算都是两个数,在第一个输入结束后NUM1的只赋给NUM2,而NUM1继续储存新输入的数值;STNUM:是没有小数点的数值变量,于是实际进行计算的值只需将这个数除以10的小数点位数次方即可;FUHAO:是表示符号的数值变量,1、2、3、4、5、6分别表示+、—、*、/、x^n、sqrt;WEICOUNT:是表示输入的字符串的位数;DIANCOUNT:表示输入的“.”次数;FUCOUNT:表示输入符号(即+、-、*等)的次数;AFDIAN:表示输入的数字在小数点后的第几位,即相当于计算小树位数;m_S:表示计算结果的变量,勇于输出结果;(2)程序运行过程:①点击数字时,SR[WEICOUNT++]=”输入数字的字符”并输出;STNUM=10*STNUM+所输数字的大小;如果DIANCOUNT=1,则NUM1=STNUM/pow(10,AFDIAN++);否则就NUM1=STNUM;这样就能将有无小数点的情况进行判断而且计算出来;②点击符号(+、-、*、/、x^n、sqrt),SR[WEICOUNT++]=”输入符号的字符”并输出;NUM2=NUM1,NUM1=0,这样就相当于将第一个值付给了NUM2,同时STNUM=0,所以在输入数的时候又可以重新给NUM1赋值,减少了变量的数量。

同时将符号所对应的数赋给FUHAO以并在“=”时用;并且DIANCOUNT=0;这样新输入的书又可以继续输入小数点了;③点击“.”时,SR[WEICOUNT++]=”.”并输出;DIANCOUNT=1;这样后面如果再输入数就可以检测出是小数所以通过①就可以得到正确的结果;④点击“=”时,根据FUHAO的值来判定符号并进行运算赋给m_S并输出,其中NUM2是第一个输入的数的值,NUM1是第二个输入的数的值;之后并STNUM=0,NUM1=1;这样就相当于把上一步计算的结果当做了下一步计算的第一个值,实现了多步连续计算;于此同时将DIANCOUNT=0,AFDIAN=1,以致在后面的计算中仍能继续正常输出;⑤点击“清零”时,m_S=0;使输出结果的编辑框显示0;strcpy(SR,SR1),并输出SR,实现了输入编辑框显示0;WEICOUNT=0,DIANCOUNT=0;用于后面的继续输出;⑥点击“清除”时,SR[--WEICOUNT]=' ';输出字符串SR;STNUM=(int) STNUM/10;这样就实现了将之前的数去掉最后一个数字的作用,再用 DIANCOUNT=1?来判断,如果是就NUM1=STNUM/pow(10,AFDIAN),否则NUM1=STNUML来实现对小数点的清除。

计算器设计实验报告

计算器设计实验报告

计算器设计实验报告《计算器设计实验报告》摘要:本实验旨在设计一个简单的计算器,并测试其功能和准确性。

实验过程中,我们使用了基本的电子元件和逻辑门电路来实现计算器的各种功能。

经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

通过本实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

引言:计算器是现代生活中不可或缺的工具,它能够帮助人们进行各种数学运算,提高工作和学习效率。

在本实验中,我们将设计一个简单的计算器,并测试其功能和准确性。

通过这个实验,我们可以更深入地了解计算器的原理和设计,为今后的电子电路设计和实验打下基础。

材料和方法:1. 电子元件:逻辑门、电阻、电容、LED等2. 电路板和连接线3. 电源和示波器4. 计算器设计图纸和电路原理图实验步骤:1. 根据设计图纸和电路原理图,连接各种电子元件,组装成一个计算器电路。

2. 使用电源给电路供电,并使用示波器测试电路的输出波形和稳定性。

3. 进行加减乘除等运算测试,记录计算器的准确性和稳定性。

4. 对计算器进行长时间稳定性测试,观察其在长时间使用中的表现。

实验结果:经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

电路的输出波形清晰,没有明显的波动和噪声。

在长时间稳定性测试中,计算器表现良好,没有出现明显的故障和失效现象。

讨论:通过本实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

在今后的学习和工作中,我们可以根据这些知识和技能,设计和制作更复杂和功能更强大的计算器和其他电子设备。

结论:本实验设计了一个简单的计算器,并测试了其功能和准确性。

经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

通过这个实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

计算器实验报告

计算器实验报告

实验一计算器的制作一.实验要求1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

2.控件的焦点以及Tab键的设置和使用3.多个控件(按钮)事件的共享4.键盘的事件的应用二.设计思路1、首先要考虑将输入的内容在textbox上显示出来。

所以整个过程采用全局变量input来记录用户输入的内容(计算器的按键输入或者键盘输入)。

然后再将input的内容显示到textbox上。

2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。

本实验的计算器有“普通运算”和“科学运算”之分。

所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。

3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。

其中数字要先转换为double类型,再存入到栈中。

4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。

我是运用堆栈来实现的。

算法如下:每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,如果是“*”、“/”,则将“*”、“/”之前的一个数变成double类型,然后再存入栈中。

然后设置乘号的标识符flag1为true,或者设置除号的标识符flag2为true。

如果用户点击的是“+”、“-”,则先判断flag1,flag2是否为true,如果为true,则从栈中pop一个数,然后与当前用户输入的数进行计算,然后再push到栈中,并把“+”、“-”也存入到另一个栈中;如果为false,则将“+”、“-”之前的一个数变为double,然后存入栈中,把“+”、“-”也存入到另一个栈中。

5、当用户点击“=”号的时候,则对两个栈进行运算。

由于实验还要求可以支持键盘输入。

所以需要对Input进行判断。

计算器实验报告

计算器实验报告

Check(); UpdateData(false); } if(m_flag==4) { temp=temp/atof(m_s); m_s.Format("%lf",temp); Check(); UpdateData(false); } } 响应按钮清零‘CE’ void CCyyJSQDlg::OnCe() { m_s=" "; UpdateData(false); } 响应按钮乘‘*’ void CCyyJSQDlg::OnMul() { m_flag=3; UpdateData(true); temp=atof(m_s); m_s=" "; UpdateData(false); } 响应按钮除‘/’ void CCyyJSQDlg::OnDiv() { m_flag=4; UpdateData(true); temp=atof(m_s); m_s=" "; UpdateData(false); } 响应按钮倒数‘1/x’ void CCyyJSQDlg::OnDaoshu()
图所示。 (3)单击Next按钮,弹出MFC AppWinzard_Step2 of4对话框,如图所示。 (4)单击Next按钮,弹出MFC AppWinzard_Step3 of4对话框,如图所示。 (5)单击Next按钮,弹出MFC AppWinzard_Step4 of4
对话框,如图所示。单击Finish按钮,创建框 架。
{ UpdateData(true); temp=atof(m_s); m_s.Format("%lf",temp*atof(m_s)/100);
UpdateData(false); } 响应按钮清零‘C’ void CCyyJSQDlg::OnC() {

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

简易计算器设计实验报告

简易计算器设计实验报告

简易计算器设计实验报告一.设计任务及要求1.1实验任务:根据计算器的原理设计一个具有加减乘除功能的简易计算器。

如:5+3*4/8=4。

1.2 实验基本要求:(1)实现最大输入两位十进制数字的四则运算(加减乘除)。

(2)能够实现多次连算(无优先级,从左到右计算结果)。

如:12+34*56-78/90+9=36(3)最大长度以数码管最大个数为限,溢出报警。

二.实验设计方案(1)用QuartusII的原理图输入来完成系统的顶层设计。

(2)用VHDL编写以及直接拖模块来各功能模块。

(3)通过2个脉冲分别实现个位数和十位数的输入。

(4)通过选择每次的输出数值,将输出值反馈到运算输入端(4)通过除法运算实现十六进制到十进制的转换输出。

其具体实现流程图如下:三系统硬件设计FPGA:EP2C5T144C8目标板及相应外围硬件电路。

(从略)四系统软件设计1.数据输入模块原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。

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

具体实现代码见附录二。

3.输出模块原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。

当输出结果溢出是LED0亮,同时数码管显示都为零。

部分实现见附录二。

五实验调试输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。

计算器实验报告

计算器实验报告

实验一计算器的制作一.实验要求1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

3.多个控件〔按钮〕事件的共享二.设计思路1、首先要考虑将输入的内容在textbox上显示出来。

所以整个过程采用全局变量input来记录用户输入的内容〔计算器的按键输入或者键盘输入〕。

然后再将input的内容显示到textbox上。

2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。

本实验的计算器有“普通运算”和“科学运算”之分。

所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。

3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。

其中数字要先转换为double类型,再存入到栈中。

4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。

我是运用堆栈来实现的。

算法如下:每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,如果是“*”、“/”,则将“*”、“/”之前的一个数变成double类型,然后再存入栈中。

然后设置乘号的标识符flag1为true,或者设置除号的标识符flag2为true。

如果用户点击的是“+”、“-”,则先判断flag1,flag2是否为true,如果为true,则从栈中pop一个数,然后与当前用户输入的数进行计算,然后再push到栈中,并把“+”、“-”也存入到另一个栈中;如果为false,则将“+”、“-”之前的一个数变为double,然后存入栈中,把“+”、“-”也存入到另一个栈中。

5、当用户点击“=”号的时候,则对两个栈进行运算。

由于实验还要求可以支持键盘输入。

所以需要对Input进行判断。

因为如果是键盘输入,input的值为空,所以需要先把textbox中的内容读取进来,然后再进行判断,分割成数字和运算符,然后再分别存入到两个栈中。

计算器_实验报告

计算器_实验报告

一、实验目的1. 熟悉计算器的基本原理和设计方法。

2. 掌握计算器程序的设计与实现。

3. 提高编程能力和软件工程实践能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 计算器界面设计2. 计算器功能实现3. 计算器测试与优化四、实验步骤1. 计算器界面设计(1)创建一个Java项目,命名为“Calculator”。

(2)在项目中创建一个名为“CalculatorFrame”的类,继承自JFrame。

(3)在“CalculatorFrame”类中,创建一个JPanel作为计算器的面板,命名为“calculatorPanel”。

(4)在calculatorPanel中,添加一个JTextField作为显示输入和计算结果的文本框,命名为“resultField”。

(5)添加一个JButton数组,作为计算器的按钮,包括数字按钮、运算符按钮和功能按钮。

(6)为每个按钮设置事件监听器,实现按钮点击事件。

2. 计算器功能实现(1)在“CalculatorFrame”类中,定义一个私有成员变量,用于存储当前输入的字符串。

(2)为每个按钮的事件监听器添加逻辑,实现以下功能:- 数字按钮:将按钮对应的数字字符串添加到当前输入字符串中。

- 运算符按钮:将当前输入字符串、运算符和下一个输入字符串组合成一个表达式,并计算结果。

- 功能按钮:实现计算器的其他功能,如清除、求倒数、开平方等。

(3)计算结果存储在resultField中。

3. 计算器测试与优化(1)对计算器进行测试,确保所有功能正常运行。

(2)优化计算器的性能,提高计算速度。

(3)美化计算器界面,提高用户体验。

五、实验结果与分析1. 实验结果成功设计并实现了一个具有基本功能的计算器,界面简洁、操作方便。

2. 实验分析(1)通过学习计算器的基本原理和设计方法,掌握了计算器程序的设计与实现。

计算器实验报告

计算器实验报告

计算器实验报告计算器实验报告引言:计算器是一种现代化的数学工具,它的出现极大地方便了人们的生活和工作。

本实验旨在通过对计算器的研究和实践,了解其原理和功能,并对其性能进行评估。

一、计算器的原理和功能计算器是一种能够进行数学运算的电子设备。

它基于数字电路和微处理器技术,通过输入数据和运算符号,能够进行加减乘除等基本运算,同时还具备一些高级功能,如开方、取余、百分比等。

二、计算器的基本操作1. 开机与关机:按下计算器上的电源按钮,即可启动计算器。

在使用结束后,长按电源按钮即可关闭计算器。

2. 数字输入:计算器通常配备有0-9的数字键,通过按下相应的数字键,可以输入需要计算的数字。

3. 运算符输入:计算器上通常还有加减乘除等运算符号键,通过按下相应的运算符键,可以选择所需的运算方式。

4. 结果显示:计算器的显示屏会实时显示输入的数字和运算结果。

三、计算器的性能评估1. 精确度:计算器的精确度是评估其性能的重要指标之一。

通过进行一系列精确度测试,比较计算器的计算结果与实际值的差异程度,可以评估其精确度水平。

2. 反应速度:计算器的反应速度是指在输入数据后,计算器进行计算并显示结果的时间。

通过对不同计算器的反应速度进行对比,可以评估其性能优劣。

3. 功能完整性:计算器的功能完整性是指计算器是否具备基本的数学运算功能,并能够满足用户的需求。

通过测试计算器的各项功能,如开方、取余、百分比等,可以评估其功能完整性。

4. 电池寿命:对于便携计算器而言,电池寿命是一个重要的考量因素。

通过测试计算器在不同使用情况下的电池寿命,可以评估其续航能力。

结论:通过本次实验,我们对计算器的原理和功能有了更深入的了解。

计算器作为一种重要的数学工具,不仅能够进行基本的数学运算,还具备多种高级功能。

通过评估计算器的性能指标,我们可以选择适合自己需求的计算器。

计算器的发展将进一步推动数学学科的发展,为人们的生活和工作提供更多便利。

参考文献:无。

大一计算机实验报告

大一计算机实验报告

大一计算机实验报告实验名称,基于Python的简单计算器设计与实现。

实验目的,通过本次实验,掌握Python语言的基本语法和逻辑结构,了解简单的用户交互与数据处理,培养编程思维和解决问题的能力。

实验内容,设计一个简单的计算器程序,能够实现基本的加减乘除运算,具有用户友好的交互界面。

实验过程与结果:首先,我们需要明确计算器的基本功能和界面设计。

在Python中,我们可以使用tkinter库来实现图形用户界面。

通过tkinter库,我们可以轻松地创建按钮、标签和输入框,实现用户与程序的交互。

其次,我们需要考虑计算器的逻辑实现。

我们可以使用Python的基本数学运算符来实现加减乘除功能,同时需要考虑用户输入的合法性和错误处理。

接下来,我们开始编写代码。

首先,我们创建一个窗口,并在窗口中添加按钮和输入框,设计好用户界面。

然后,我们编写计算器的逻辑实现部分,包括用户输入的获取和处理,运算结果的显示等。

最后,我们进行测试。

我们输入不同的数值和运算符,测试计算器的功能是否正常,同时也需要测试一些边界情况和异常输入,确保程序的稳定性和健壮性。

通过以上步骤,我们成功实现了一个简单的计算器程序。

用户可以通过界面输入数字和运算符,程序能够正确地进行运算,并将结果显示在界面上。

实验总结与心得:通过本次实验,我深刻地理解了Python语言的基本语法和逻辑结构,掌握了tkinter库的基本使用方法,提高了编程能力和解决问题的能力。

同时,我也意识到编程的重要性和乐趣,希望在以后的学习和工作中能够更加深入地探索编程的世界。

在实验中遇到的困难和问题,我通过查阅资料和向同学请教,最终都得到了解决。

我相信,在未来的学习和工作中,只要保持耐心和勇气,就能够克服各种困难,不断提升自己的能力。

总之,本次实验让我收获颇丰,对计算机编程有了更深入的了解,也对自己未来的学习和职业规划有了更清晰的认识。

我会继续努力学习,不断提升自己,成为一名优秀的计算机专业人才。

大学大学计算机实验报告实验报告

大学大学计算机实验报告实验报告

大学计算机实验报告实验一:计算器设计实验目的本实验的主要目的是让学生能够够了解计算器的基本原理和结构,学会利用各种键盘实现各类功能,并且能够熟练掌握计算器的基本操作和输入语法。

同时,在本实验过程中,学生还可以通过实践发现计算机中各种错误信息,加深对计算机错误处理的认识与理解。

实验内容本实验主要涉及以下内容:1.计算器的结构和原理。

2.利用各键盘实现计算器的各种功能。

3.计算器的基本操作和输入语法。

4.计算机错误的处理与研究。

实验步骤1.分析计算器的结构和原理,写出计算器的结构图和研究计算器基本原理。

2.编写程序,实现计算器的基本功能,包括加、减、乘、除、取模、求幂等。

3.研究计算器的基本操作,包括输入数字、符号、运算结果、清除结果、重置操作等。

4.记录计算过程、错误信息等,深化对计算机错误的认识与理解。

实验数据分析在本次实验过程中,我们实现了计算器的基本功能,并且也对计算器的基本操作有了更深入的了解。

在输入数字和符号时,我们需要按照一定的语法和操作,输入符号和数字的结构相对比较简单,重要的是输入语法,比如加号+,减号-,乘号*,除号/等等。

在进行计算器功能操作的过程中,我们还需要对计算过程进行记录,以便在出现错误时及时进行处理和分析,比如出现除数为零的情况,计算过程出现错误的信息等等。

实验总结通过本次实验,我们深入了解了计算器的基本结构和原理,掌握了计算器的基本操作和输入语法,加深了对计算机错误处理的认识与理解。

在今后的学习和实践中,我们将进一步完善和扩展计算器的功能,并且不断探索计算器在计算机应用中的广泛应用价值。

计算器设计实验报告

计算器设计实验报告

一、实验目的1. 熟悉数字电路的基本原理和设计方法。

2. 培养学生的动手能力和创新意识。

3. 设计并实现一个功能齐全的计算器。

二、实验原理计算器是一种常见的电子设备,其核心部件为运算单元。

本实验通过设计并实现一个计算器,使学生掌握以下原理:1. 按键扫描电路:用于读取按键信息。

2. 数据存储电路:用于存储输入的数值和运算符。

3. 运算电路:根据输入的运算符进行相应的运算。

4. 显示电路:用于显示运算结果。

三、实验仪器与材料1. 数字电路实验箱2. 计算器原理图3. 连接导线4. 按键5. LED显示器6. 电阻、电容等元件四、实验步骤1. 按键扫描电路设计(1)设计按键扫描电路原理图,包括按键、电阻、二极管等元件。

(2)根据原理图,搭建实验电路,并进行调试。

2. 数据存储电路设计(1)设计数据存储电路原理图,包括寄存器、计数器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

3. 运算电路设计(1)设计运算电路原理图,包括加法器、减法器、乘法器、除法器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

4. 显示电路设计(1)设计显示电路原理图,包括LED显示器、译码器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

5. 整体电路设计(1)根据以上四个部分的设计,设计整体电路原理图。

(2)根据原理图,搭建实验电路,并进行调试。

五、实验结果与分析1. 按键扫描电路按键扫描电路能够正确读取按键信息,实现按键功能。

2. 数据存储电路数据存储电路能够存储输入的数值和运算符,为后续运算提供数据支持。

3. 运算电路运算电路能够根据输入的运算符进行相应的运算,实现加、减、乘、除等基本运算。

4. 显示电路显示电路能够将运算结果正确显示在LED显示器上。

5. 整体电路整体电路能够实现计算器的功能,满足实验要求。

六、实验总结1. 通过本次实验,掌握了数字电路的基本原理和设计方法。

2. 提高了动手能力和创新意识,培养了团队协作精神。

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

基于51单片机的简易计算器设计报告设计课题:基于STC89C52单片机的简易计算器小组成员:侯旭陈铭廖文凯黄超博吕佳铭指导老师:孙玉宽摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中是比较常见的电子产品之一。

可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘,可以进行加、减、乘、除7位带符号数字运算,同时支持括号的嵌套使用级浮点数的运算,并在LCD1602上显示操作过程。

本次设计注重设计方法及流程,首先根据原理设计电路,利用keil编程,借助实验开发平台进行仿真实验,进而利用altium designer 制作PCB,最后到焊接元器件,直至调试成功。

在设计的同时,特别注重keil软件和altium designer软件的使用方法和技巧以及常用的LCD显示器和矩阵键盘的设计和使用方法。

【关键词】计算器,STC89C52,矩阵键盘,1602液晶目录第一章绪论 (4)第二章整体框架 (5)1.1计算器发展现状 (6)1.2任务要求 (7)1.3研究意义 (8)第三章设计方案 (9)3.1总体设计方案 (10)3.2硬件部分 (11)3.2.1主控模块 (12)3.2.2显示模快 (13)3.2.3 输入模块 (14)3.2.4主控模块的选型与论证 (15)3.2.5显示模块的选型与论证 (15)3.2.6输入模块的选型与论证 (15)3.3软件部分 (16)3.3.1软件工具介绍 (16)3.3.2软件模块介绍 (17)第四章调试 (18)5.1.1硬件调试 (19)5.1.2软件调试 (19)5.2解决方案 (19)5.3实现展示 (19)第五章总结 (20)参考文献 (21)附录 (22)第一章绪论随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。

电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。

近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。

与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。

影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。

其中系统的抗干扰性能是系统可靠性的重要指标。

本设计采用STC89C52芯片,实现了利用单片机进行了一个简单计算器设计。

允许对输入数据进行加减乘除运算及LED 显示。

如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。

另外,实例所设计的计算器是用LED 显示屏显示的,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。

设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。

第二章整体框架1.1计算器现状计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。

低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。

高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。

键盘是计算器的输入部件,一般采用接触式或传感式。

为减小计算器的尺寸,一键常常有多种功能。

显示器是计算器的输出部件,有发光二极管显示器和液晶显示器等。

除显示计算结果外,还常有溢出指示、错误指示等。

计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。

为节省电能,计算器都采用CMOS工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。

计算器可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。

1.2任务要求制作一个简易计算器,其功能为完成简单的加减乘除操作,数据包括整数和小数。

1.2.1基本要求:1、设计完成过程中,各部分需要进行模块和总线式处理。

其中软件部分需要说明设计结构,子函数作用等。

硬件引脚位置固定位置,单列直插两列对称排列,每列20个引脚(至少2个电源2地线),两列间水平距离2000mil;2、输入及运算结果显示利用数码管,1602或12864其中一个显示即可,结果遇到小数时小数点后保留两位有效数字;3、输入方式利用独立键盘方式或者其他方式;4、输入和显示模块可作为单独的模块,或者两个模块在一块电路板上完成;5、实现两个数的相互计算,完成设计报告;1.2.2提高要求:1、实现N个数字的加减乘除运算;2、对于溢出或者无效运算的提示;3、其他扩展设计;(附加分满分10分)1.2.3其他要求:1、基本符合国家标准“GB/T 28169-2011嵌入式软件C语言编码规范”,/info/30122.html;2、报告格式可以参考/p-9949563050940.html中的格式,内容需要包括现状意义,总体设计方案、软硬件详细设计、测试方案(需要对现有测试方法进行介绍后,对本次作业进行测试方案设计)、测试结果以及参考文献;3、所有电路不能使用现有的模块;4、实验室提供单面覆铜板,51芯片及最小系统期间、按键、杜邦线,1602液晶(数量有限11月30日提供);5、验收时间12月4日。

1.3研究意义今天,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店,办公室,学校……。

因此设计一款简单实用的计算器会有很大的实际意义。

本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。

通过本设计的学习,使掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决实际问题的能力,为单片机应用和开发打下良好的基础。

1、对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用LCD(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程,设计LCD和单片机的接口电路,以及利用单片机对液晶模块的驱动和操作;2、在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。

第三章设计方案3.1总体设计方案本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。

该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。

整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。

3.1.1计算器设计总体思想根据功能和指示要求,本系统选用以MCS-51单片机为主控机。

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

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

2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。

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

4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。

3.2硬件部分3.2.1主控(运算)模块本设计选择了以STC89C52单片机作为主控(运算)模块进行计算器的设计。

1)STC89C52单片机的主要特性如下:Stc89c52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,stc的stc89c52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,stc89c52芯片引脚图如图3-1所示。

图3-1 stc89c52芯片引脚图主要特性:·与MCS-51 兼容·8K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·6个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2)STC89C52RC 引脚功能说明:1、主电源引脚V cc和V ccSTC89C52芯片引脚图V cc——(40脚)接+5V电压;V cc——接地。

2、外接晶体引脚XTAL1和XTAL2XTAL1(19脚)接外部晶体的一个引脚。

在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。

当采用外部振荡器时,对HMOS单片机,此引脚应接地;对SHMOS单片机,此引脚作为驱动端。

XTAL2(18脚)接外晶体的另一端。

在单片机内部,接至上述振荡器的反相放大器的输出端。

采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。

3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/V PP①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。

推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与V SS引脚之间连接一个约10μF的电容,以保证可靠地复位。

V SS掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。

当V SS主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM 提供备用电源。

相关文档
最新文档