自编计算器
- 格式:xlsx
- 大小:40.94 KB
- 文档页数:2
目录第一章:设计目的11.1课程设计目的.................................................................................. 错误!未定义书签。
1.2简易计算器设计的意义 (1)1.3系统的基本要求 (1)1.4功能设计 (3)第二章:功能描述 (3)2.1功能模块框图 (3)2.2相关功能介绍.................................................................................. 错误!未定义书签。
2.1系统模块机构框图 (4)第三章:总体设计 (5)3.1系统流程图 (3)3.2模块描述 (5)3.3函数声明 (5)第四章:程序实现 (5)4.1界面设计 (10)4.2计算界面 (11)4.3退出界面 (12)第五章:课程设计的结果展示 (13)第六章:参考文献................................................................................................. - 15 -第七章:课程设计总结......................................................................................... - 16 -第一章课程设计目的1.通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。
通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。
2.通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函等。
《可视化编程技术课程设计》报告题目仿照Windows系统计算器设计计算器1.引言计算器的产生和发展是建立在电子计算机基础之上的,现代社会很需要一个健全、高效率的计算器。
为了提高自己的实践能力和将来开发一个更实用更全能更智能的计算器,以设计与实现计算器为课题。
此次设计的计算器应用软件从visual studio 2012编程环境中开发,是一个简单的窗体应用程序,实现简单的计算器功能。
以微软自带的计算器为模板,设计了简单易懂的计算器。
这款计算器不仅实现了简单的四则运算的功能,还可以进行复杂数学运算,和进制转换(十进制转二进制、八进制、十六进制)。
具有简洁的外观,即时准确的获得所需要要计算的结果,充分降低了数字计算器的难度和所需要的时间,对人们生活和学习具有有很大的帮助。
2. 系统设计(1)功能设计本计算器由四大模块,分别为:1.标准计算器(即为主窗口)2.科学型计算器3.程序员计算器(进制转换)4.开发者介绍(2)界面设计主窗口界面(from1)科学型计算器界面(from2)程序员界面(from3)开发者介绍(from4)1.文本框的设置:textBox1.Text = "0";窗口启动前:Form1.x = 0;//point:1 ;nopoint: 0Form1.a = 0;//1:+ 2:- 3:* 4:/Form1.b = 0;//判D断?是否执行过运算执行过运算Form1.shu1 = 0;Form1.shu2 = 0;Form1.result = 0;2.按键的设置:数字键及小数点:public static void number(object sender, TextBox textBox1){Button btn = (Button)sender;if ( == "one"){if (x == 1)//判断有小数点Ì{textBox1.Text = textBox1.Text + '1';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 1";elsetextBox1.Text = (textBox1.Text + '1').ToString(); }if ( == "two"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '2';return;}if (b != 0){textBox1.Text = "0";b = 0;}textBox1.Text = " 2";elsetextBox1.Text = (textBox1.Text + '2').ToString(); }if ( == "three"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '3';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 3";elsetextBox1.Text = (textBox1.Text + '3').ToString(); }if ( == "four"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '4';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 4";elsetextBox1.Text = (textBox1.Text + '4').ToString(); }if ( == "five"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '5';return;if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 5";elsetextBox1.Text = (textBox1.Text + '5').ToString(); }if ( == "six"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '6';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 6";elsetextBox1.Text = (textBox1.Text + '6').ToString(); }if ( == "seven"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '7';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 7";elsetextBox1.Text = (textBox1.Text + '7').ToString(); }{if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '8';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 8";elsetextBox1.Text = (textBox1.Text + '8').ToString(); }if ( == "nine"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '9';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 9";elsetextBox1.Text = (textBox1.Text + '9').ToString(); }if ( == "zero"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '0';return;}if (b != 0)//两个数的界限判断?{textBox1.Text = "0";b = 0;if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 0";elsetextBox1.Text = (textBox1.Text + '0').ToString();}}public void one_Click(object sender, EventArgs e){number(sender, textBox1);}public void Form1_Load(object sender, EventArgs e){textBox1.Text = "0";}public static void point(object sender, TextBox textBox1){if (double.Parse(textBox1.Text) == 0)x = 1;textBox1.Text = (textBox1.Text + '.').ToString();}public void xiaoshudian_Click(object sender, EventArgs e){point(sender, textBox1);}运算符号1(加减乘除、退格。
电子技术课程设计电气与信息工程学院建筑电气与智能化专业题目:简易加减计算器设计姓名:徐雪娇学号:094412110指导教师:祁林简易加减计算器设计一、设计目的1、在前导验证性认知实验基础上,进行更高层次的命题设计实验.2、在教师指导下独立查阅资料、设计、特定功能的电子电路。
3、培养利用数字电路知识,解决电子线路中常见实际问题的能力.4、积累电子制作经验,巩固基础、培养技能、追求创新、走向实用。
5、培养严肃认真的工作作风和严谨的科学态度。
二、设计要求1、用于两位一下十进制的加减运算。
2、以合适方式显示输入数据及计算结果。
三、总体设计第一步置入两个四位二进制数。
例如(1001)2,(0011)2和(0101)2,(1000)2,同时在两个七段译码显示器上显示出对应的十进制数9,3和5,8。
第二步通过开关选择加(减)运算方式;第三步若选择加运算方式所置数送入加法运算电路进行运算;同理若选择减运算方式,则所置数送入减法运算电路运算;第四步前面所得结果通过另外两个七段译码器显示。
即:方案一通过开关J1-J8接不同的高低电平来控制输入端所置的两个一位十进制数,译码显示器U10和U13分别显示所置入的两个数。
数A直接置入四位超前进位加法器74LS283的A4-A1端,74LS283的B4-B1端接四个2输入异或门。
四个2输入异或门的一输入端同时接到开关S1上,另一输入端分别接开关J5-J8,通过开关J5-J8控制数B的输入。
当开关S1接低电平时,B与0异或的结果为B,通过加法器74LS283完成两个数A和B的相加。
当开关J1接高电平时,B与1异或的结果为B非,置入的数B在74LS283的输入端为B的反码,且74LS283的进位信号C0为1,其完成S=A+B(反码)+1,实际上其计算的结果为S=A-B完成减法运算。
由于译码显示器只能显示0-9,所以当A+B>9时不能显示,我们在此用另一片芯片74LS283完成二进制码与8421BCD码的转换,即S>9(1001)时加上6(0110)2,产生的进位信号送入译码器U12来显示结果的十位,U11 2显示结果的个位。
单片机课程设计一汇编语言实现四位数计算器
四位数计算器是一种能够进行基本数学运算的设备,它可以对四位数进行加法、减法、乘法和除法运算。
这个计算器的设计基于单片机和汇编语言,它可以方便地进行各种数学运算,满足用户的需求。
我们需要一个单片机作为计算器的核心。
单片机是一种集成电路,可以完成各种计算和控制任务。
我们选择一款适合的单片机,并将其与其他必要的电子元件进行连接,以构建一个完整的计算器系统。
接下来,我们需要使用汇编语言编写相应的程序来实现计算器功能。
汇编语言是一种低级语言,可以直接控制计算机的硬件,实现各种操作。
通过编写汇编语言程序,我们可以实现加法、减法、乘法和除法等运算。
在程序中,我们首先需要设计一个界面,将计算器的输入和输出与单片机相连接。
用户可以通过按键输入需要计算的四位数和运算符,计算器将根据用户的输入进行相应的运算,并将结果显示在数码管上。
在程序的编写过程中,我们需要考虑各种可能的输入情况,例如用户输入的数字是否超出了四位数的范围,用户是否输入了错误的运算符等。
我们需要对这些情况进行处理,保证计算器的运算结果是准确的。
除了基本的加减乘除运算,我们还可以在计算器中添加其他功能,
例如开根号、取余数等。
这些功能的实现也需要通过编写相应的汇编语言程序来完成。
通过单片机和汇编语言的结合,我们可以实现一个功能完备的四位数计算器。
这个计算器可以方便地进行各种数学运算,满足用户的需求。
通过合理的设计和编程,我们可以使计算器的使用变得简单而高效,为用户提供便利的计算体验。
编写一个简单的计算器程序计算器程序是一种非常实用的工具,它可以帮助我们进行数学计算,并简化复杂的运算过程。
本文将介绍如何编写一个简单的计算器程序,实现基本的加减乘除运算。
首先,我们需要确定计算器程序的功能和界面设计。
在本文中,我们将使用Python编程语言来编写计算器程序,并使用命令行界面(CLI)进行交互。
这意味着我们将在终端窗口中输入表达式,并显示结果。
接下来,我们需要考虑计算器程序的基本运算功能。
一个简单的计算器需要实现四个基本的运算:加法、减法、乘法和除法。
我们将使用函数来实现每个运算功能。
以下是一个示例代码:```pythondef add(x, y):return x + ydef subtract(x, y):return x - ydef multiply(x, y):return x * ydef divide(x, y):return x / y```在这个示例代码中,我们定义了四个函数,每个函数接受两个参数,并返回计算结果。
接下来,我们需要处理输入表达式并调用相应的运算函数。
我们将使用一个循环来持续接收用户输入,并在用户输入“exit”时退出程序。
以下是一个示例代码:```pythonwhile True:expression = input("请输入一个表达式:")if expression == "exit":break#解析表达式,提取运算符和操作数operator = Nonefor op in ["+", "-", "*", "/"]:if op in expression:operator = opbreakif not operator:print("表达式错误,请重新输入!") continueoperands = expression.split(operator) x = float(operands[0])y = float(operands[1])if operator == "+":result = add(x, y)elif operator == "-":result = subtract(x, y)elif operator == "*":result = multiply(x, y)elif operator == "/":result = divide(x, y)print("运算结果:", result)print("谢谢使用,再见!")```在这个示例代码中,我们使用了一个无限循环来持续接收用户输入。
作品:科学计算器作者:欧宗龙编写环境:vc++6.0语言:c#include"stdafx.h"#include<stdio.h>#include<windows.h>#include<windowsx.h>#include"resource.h"#include"MainDlg.h"#include<math.h>#include<string.h>#definePI3.141593BOOLA_Op=FALSE;BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) {switch(uMsg){HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);}returnFALSE;}BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam){returnTRUE;}voidTrimNumber(chara[])//判断并删除小数点后无用的零{for(unsignedi=0;i<strlen(a);i++){if(a[i]=='.'){for(unsignedj=strlen(a)-1;j>=i;j--){if(a[j]=='0'){a[j]='\0';}elseif(a[j]=='.'){a[j]='\0';}elsebreak;}}}}doubleOperate(charOperator,doublen1,doublen2)//判断符号,进行相应的运算{if(Operator=='0'){}if(Operator=='+'){n2+=n1;}if(Operator=='-'){n2=n1-n2;}if(Operator=='*'){n2*=n1;}if(Operator=='/'){n2=n1/n2;}if(Operator=='^'){n2=pow(n1,n2);}return n2;}////////////////////////////////////////////////voidIntBinary(chara[],intn){if(n>1)IntBinary(a,n/2);sprintf(a,"%s%i",a,n%2);}voiddecimal(chara[],doublem){if(m>0.000001){m=m*2;sprintf(a,"%s%d",a,(long)m);decimal(a,m-(long)m);}}voidBinary(chara[],doubleNum){charDecP[256]="";doublex,y;double*iptr=&y;x=modf(Num,iptr);decimal(DecP,x);IntBinary(a,(int)y);strcat(a,".");strcat(a,DecP);}////////////////////////////////////voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) {staticDELTIMES=0;staticcharstr[256];staticcharOperator='0';staticdoubleRNum[3];switch(id){caseIDC_BUTTONN1://数字1{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"1");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN2://数字2{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"2");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN3://数字3{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"3");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN4://数字4{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"4");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN5://数字5{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"5");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN6://数字6{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"6");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN7://数字7{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"7");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN8://数字8{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"8");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN9://数字9{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"9");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN0://数字0{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"0");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;case{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(DELTIMES==0){strcat(str,".");}DELTIMES++;SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=FALSE;}break;caseIDC_BUTTONADD://加法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='+';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONSUB://减法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);DELTIMES=0;A_Op=TRUE;Operator='-';}break;caseIDC_BUTTONMUL://乘法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='*';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONDIV://除法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='/';DELTIMES=0;A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='^';DELTIMES=0;}break;caseIDC_BUTTONPI://圆周率PI,弧度{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(atof(str)!=0){RNum[2]=atof(str)*PI;sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);}else{sprintf(str,"%f",PI);SetDlgItemText(hwnd,IDC_EDIT,str);}A_Op=TRUE;}break;caseIDC_BUTTONSQRT://开根号{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sqrt(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSIN://三角函数sin函数{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sin(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=cos(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=tan(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSQ://平方{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=exp(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=pow(10,atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLN://lnx{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLOG10://log10{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log10(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONBINARY://十进制转换为二进制{chara[256]="";GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str);Binary(a,RNum[2]);strcpy(str,a);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{DELTIMES=0;Operator='0';RNum[0]=RNum[1]=RNum[2]=0;memset(str,0,sizeof(str));SetDlgItemText(hwnd,IDC_EDIT,NULL);A_Op=FALSE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));inti=strlen(str);str[i-1]='\0';SetDlgItemText(hwnd,IDC_EDIT,str);}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='0';DELTIMES=0;}break;default:break;}}voidMain_OnClose(HWNDhwnd){EndDialog(hwnd,0);}本人拙作,如有不足之处请谅解。
摘要最近几年来随着科技的飞速进展,单片机的应用正在不断深切,同时带动传统控制检测技术日趋更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来利用,但仅单片机方面的知识是不够的,还应按照具体硬件结构、软硬件结合,来加以完善。
运算机在人们的日常生活中是比较常见的电子产品之一。
可是它还在进展当中,以后必将出现功能加倍壮大的运算机,基于如此的理念,本次设计是用8051单片机、数码管显示器、控制按键为元件来设计的计算器。
利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/O端口的功能和大体用途的了解。
关键字:8051数码管控制按键汇编语言目录摘要 (1)第一章绪论 (5)课题简介 (5)设计目的 (5)设计任务 (5)第二章课题背景 (6)单片机进展现状 (6)计算器系统现状 (7)矩阵按键 (8)第三章硬件系统设置 (9)硬件电路原理图 (9)键盘接口电路 (9)数码管显示 (10)第四章软件设计 (11)算术运算流程图设计 (11)源程序设计 (12)MOV DISPBUF+1,#0C0H (12)MOV DISPBUF+2,#0C0H (12)MOV R6,27H (12)SJMP LOOP (12)JB ,K12 (12)CJNE R5,#00H,L1 (12)L1: LJMP CEND (13)JB ,K13 (13)CJNE R5,#00H,L2 (13)L2: LJMP CEND (13)JB ,K22 (13)LJMP DYU (13)K22: MOV P2,#0DFH (13)JB ,K23 (13)MOV 25H,#3H (13)CCTV:LJMP KEND (13)JB ,K32 (13)JB ,K33 (13)MOV 25H,#2H (13)JB ,K42 (13)INC 27H (13)K42: MOV P2,#0DFH (13)JB ,K43 (13)MOV 25H,#1H (13)CJNE R5,#00H,CHANG (13)ZHI: MOV A,20H (14)MOV B,#0AH (14)CZH: MOV 24H,A (14)LJMP KEND (14)KEND:MOV P2,#0FH (14)MOV A,P2 (14)ANL A,#0FH (14)CHANG: CJNE R4,#2H,HONG (14)AJMP ZHI (14)HONG:JNC CEND (14)INC R5 (14)MOV 20H,25H (14)KBK: JNC CEND (14)MOV 20H,25H (14)MOV 23H,25H (14)MOV R4,#00H (14)S: CJNE R3,#2H,S1 (14)CLR C (14)MOV A,23H (14)JIANFA:SUBB A,24H (15)MOV 23H,A (15)SJMP CEND (15)S1: CJNE R3,#3H,S2 (15)MOV A,23H (15)MOV B,24H (15)S2: CJNE R3,#4,CEND (15)MOV A,24H (15)CJNE A,#00H,ZY (15)ZY: MOV A,23H (15)MOV B,24H (15)DIV AB (15)CEND:MOV P2,#0FH (15)MOV A,P2 (15)ANL A,#0FH (15)CONV: CJNE R5,#02H,BEI ;数码管显示数据转换子程序 (15)DIV AB (15)MOV DPTR,#TABLE (15)MOV R2,#4H (16)MOV A,#1H (16)SC: PUSH ACC (16)MOV A,@R0 (16)MOV P1,A (16)DEL12: MOV R6,#1EH (16)DEL2: MOV R7,#64H (16)DEL1: DJNZ R7,DEL1 (16)DJNZ R6,DEL2 (16)RET (16)D2: MOV R7,#100 (16)DJNZ R7,$ (16)DJNZ R6,D2 (16)TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;------字符表------ (16)DB 92H,82H,0F8H,80H,90H (16)DB 88H,83H,0C6H,0A1H,86H (16)第五章系统调试与存在的问题 (17)硬件调试 (17)软件调试 (17)总结 (18)参考文献 (19)附录 (20)附录一:计算器硬件连线图 (20)第一章绪论课题简介现今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,仍是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易犯错。
基于单片机的计算器设计一、设计背景计算器作为一种便携式的计算工具,广泛应用于日常生活和工作中。
随着计算器的智能化程度越来越高,它的功能越来越丰富。
本设计以基于单片机的计算器设计为目标,设计一个具备基本计算功能和显示功能的计算器,能够满足用户的日常计算需求。
二、设计内容1.功能本设计的计算器主要包括基本的算术运算功能,包括加、减、乘、除、取余等。
此外,还应该具备一些常用的科学计算功能,例如开方、平方等。
2.界面计算器采用1602液晶屏作为显示界面,在界面上能够显示输入的数字和计算结果。
液晶屏上可以设置清屏、退格等按钮。
3.输入计算器通过数字按钮和功能按钮进行输入。
数字按钮可以输入0至9的数字,功能按钮可以输入加、减、乘、除等功能选项。
4.输出计算结果将在液晶屏上显示,并且可以选择将计算结果通过串口输出到其他设备。
三、实现思路1.硬件部分本设计需要使用单片机作为计算器的核心处理器,采用1602液晶屏作为显示界面,并通过数字按钮和功能按钮进行输入。
此外,还需要考虑电源部分和按键部分的设计。
2.软件部分软件部分主要是编程实现计算器的各种功能和界面显示。
首先,需要编写界面显示的程序,包括液晶屏的初始化和显示结果的函数。
然后,需要编写按键输入的程序,包括数字按钮和功能按钮的检测和响应。
接着,需要编写计算功能的程序,包括加、减、乘、除等基本运算以及一些科学计算的函数。
最后,需要编写串口输出的程序,将计算结果输出到其他设备。
四、实施计划1.硬件部分首先,需要确定所需的单片机型号,并进行相应的硬件电路设计,包括电源部分、按键部分等。
然后可以开始进行电路制版和焊接工作。
2.软件部分首先,需把液晶屏控制程序编写好,实现液晶屏初始化和显示功能。
然后,编写键盘输入程序,实现数字按钮和功能按钮的响应。
接着,编写计算功能程序,实现加、减、乘、除等基本运算以及科学计算函数。
最后,编写串口输出程序,实现计算结果的输出。
3.调试测试完成软硬件部分的设计后,需要对整个计算器进行调试和测试。