计算器设计报告书

合集下载

简易计算器的设计报告

简易计算器的设计报告

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

外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。

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

模块图如图1.2所示。

图1.2 方案二模块图1.1整体设计根据简易计算器的功能和指标要求,本设计系统选用MCS-51系列单片机AT89C51为主控机。

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

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

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

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

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

(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在七段数码管上提示错误。

线路原理框图如图1.3所示。

图1.3 线路原理框图2电路设计原理2.1键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。

矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。

这样键盘上按键的个数就为4×4个。

计算器课程设计报告

计算器课程设计报告

计算器课程设计报告一、课程目标本节计算器课程设计以提升学生的数学计算能力、逻辑思维能力和实际应用能力为核心,结合三年级学生的认知特点和实际需求,制定以下课程目标:1. 知识目标:(1)学生能够掌握计算器的基本功能及操作方法;(2)学生能够运用计算器进行简单的四则运算,并理解相关数学概念;(3)学生能够运用计算器解决生活中的实际问题,提高数学应用能力。

2. 技能目标:(1)培养学生运用计算器进行快速、准确计算的能力;(2)培养学生运用计算器辅助解决数学问题的能力;(3)提高学生逻辑思维能力,培养学生独立思考和解决问题的能力。

3. 情感态度价值观目标:(1)激发学生对计算器的兴趣,培养学生主动探究新知的习惯;(2)培养学生合作交流、分享成果的团队精神;(3)培养学生将所学知识应用于实际生活的意识,增强学生的自信心和成就感。

本课程旨在通过计算器教学,使学生在掌握基本计算技能的同时,提高数学素养,培养实际应用能力,激发学生对数学学习的兴趣,为学生的终身学习打下坚实基础。

二、教学内容本节计算器课程依据课程目标,结合课本内容,选择以下教学材料和安排:1. 教学大纲:(1)计算器的基本功能介绍与操作方法;(2)使用计算器进行加、减、乘、除四则运算;(3)运用计算器解决实际问题。

2. 教学内容安排与进度:第一课时:认识计算器,了解计算器的基本功能和操作方法,包括开关机、清屏、数字键、运算符号键等。

第二课时:学习使用计算器进行加、减、乘、除四则运算,并通过练习巩固运算方法。

第三课时:运用计算器解决生活中的实际问题,如购物找零、计算面积等。

3. 教材章节及内容列举:(1)第三章《计算器与计算》:介绍计算器的基本功能、操作方法及四则运算;(2)第四章《计算器在实际应用中的作用》:举例说明计算器在生活中的应用,提高学生实际操作能力。

教学内容科学系统地组织,注重理论与实践相结合,使学生能够熟练掌握计算器的使用方法,并能在实际生活中运用计算器解决简单问题,提高学生的数学素养。

简单计算器设计报告

简单计算器设计报告

简单计算器设计报告045一、基本功能描述通过文本编辑框实现基本整数的加减乘除运算二、设计思路如下图是整个程序进行的流程图, 基本方法是在ItemText文本编辑框输入字符, 程序对字符进行判断, 若输入不是数字则提示错误。

输入正常时, 通过下拉框ComboBox_InsertString选择相应运算符。

点击等号IDC_OK, 即可得出运算结果。

操作简便, 算法简单。

三、软件设计1、设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建, 在弹出框内选择MFC AppWizard[exe]工程, 输入工程名zhoutong及其所在位置, 点击确定将弹出MFC AppWizard-step 1对话框, 选择基本对话框, 点击完成MFC AppWizard就建立了一个基于对话窗口的程序框架四、主要程序分析1.字符判定函数BOOL IsInt(TCHAR*str) {int i=atoi(str);TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) {return FALSE;}Else{return TRUE;}}3、该函数通过atoi把文本编辑框读取的字符转换为数字, 再通过wsprintf把转换数字转换为字符, 通过strcmp比较原字符和转换得来的字符。

如相同返回true,不通则返回false.4、运算符选择程序BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP);ComboBox_InsertString(hwndComboOP,-1,TEXT("+"));ComboBox_InsertString(hwndComboOP,-1,TEXT("-"));ComboBox_InsertString(hwndComboOP,-1,TEXT("*"));ComboBox_InsertString(hwndComboOP,-1,TEXT("/"));return TRUE;}通过ComboBox_InsertString插入要输入的运算符5、主程序字符获取TCHAR str1[256];TCHAR str2[256];GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));调用子程序判断输入是否为数字if(IsInt(str1)==FALSE){MessageBox(hwnd,TEXT("第一个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR); return;}if(IsInt(str2)==FALSE){MessageBox(hwnd,TEXT("第二个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR); return;}将输入字符转换为数字int i1=atoi(str1);int i2=atoi(str2);int i3=0;获取运算符HWND hwndComboOp=GetDlgItem(hwnd,IDC_COMBOOP);int curIndex=ComboBox_GetCurSel(hwndComboOp);运算switch(curIndex){case 0:{i3=i1+i2;}break;case 1:{i3=i1-i2;}break;case 2:{i3=i1*i2;}break;case 3:{i3=i1/i2;}break;}运算结果转换为字符TCHAR str3[256];itoa(i3,str3,10);输出运算结果SetDlgItemText(hwnd,IDC_EDIT3,str3);}break;退出程序case IDC_EXIT:{exit(0);}break;五、结果分析六、该计算器只能实现简单的整数运算, 不能对小数分数进行运算。

计算器设计实验报告

计算器设计实验报告

计算器设计实验报告指导老师:张永安组长:潘文帅成员:宋王庆郭肖男常跃计算器设计实验报告一、实验目的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”运算错误或计算延迟则有警报声提示。

计算器程序设计报告

计算器程序设计报告

计算器程序设计报告计算器程序设计报告1. 引言2. 设计目标本计算器程序的设计目标如下:提供简单的四则运算功能,包括加法、减法、乘法和除法;提供括号功能,可以进行复杂的运算操作;提供求幂功能,支持指数运算;接受用户输入,并返回计算结果。

3. 系统设计3.1 输入与输出本计算器程序采用命令行界面。

用户可以通过键盘输入数学表达式,程序将对表达式进行解析计算,并将结果输出到屏幕上。

3.2 表达式解析与计算本计算器程序的关键功能是解析并计算用户输入的数学表达式。

为了实现这一功能,我们需要进行以下步骤:1. 从用户输入中提取出数字、运算符和括号,并将它们按照正确的顺序组合成一个合法的数学表达式。

2. 对表达式中的括号进行处理,按照括号的优先级逐步计算子表达式的值,最终得到整个表达式的结果。

3. 对表达式中的运算符进行处理,按照运算符的优先级进行相应的运算。

3.3 错误处理为了提高用户体验和程序的健壮性,我们需要对用户输入进行合法性检查,并及时给出错误提示。

例如,输入的表达式中如果缺少括号或运算符,或者存在不支持的字符,程序应该能够及时发现并提示用户进行修正。

4. 系统实现本计算器程序的实现可以采用编程语言。

提供了丰富的字符串处理和数值计算的库,十分适合用来实现一个简单的计算器程序。

具体的实现过程如下:1. ,我们需要定义一个函数,用于接受用户输入的数学表达式,并返回计算结果。

这个函数可以使用的input函数实现。

2. 接下来,我们需要编写一个函数,用于对用户输入的表达式进行解析,并把它们按正确的顺序组合成一个合法的数学表达式。

这个函数可以使用的字符串处理函数实现。

3. 对于带有括号的表达式,我们可以使用递归的方式进行解析和计算。

递归函数可以反复调用自身,处理子表达式,并将最终的计算结果返回。

4. ,我们需要编写一个函数,用于对表达式中的运算符进行处理,并按照优先级进行相应的运算。

5. 测试与验证为了验证计算器程序的正确性和可靠性,我们需要进行一系列的测试。

计算器设计报告.doc

计算器设计报告.doc

课程设计报告——计算器编程计算器系统编程设计一、设计背景:课堂所学与实际需求相结合,计算器的使用频率高 二、主要功能:能进行基本运算和稍复杂的操作 二、系统结构:三、设计说明 (一)控件的应用1、菜单编辑器的应用创建三个主菜单 ,分别命名为“编辑”、“查看”、“帮助” A 、“编辑”包含两个子菜单:复制、粘贴可 显示数字的 文本框 可操作的控件 可 显示数字的 文本框 可供选择的单选按钮 可操作的控件计算器主界面编辑 查看 帮助复制 粘贴标准型 科学型 辅导老师关于计算器B、“查看”标准型里包含三个子菜单:标准型、科学型、数字分组,科学型里还包括进制转换及角度转换的子菜单C、“帮助”包含两个子菜单:辅导老师、关于计算器2、文本框的应用普通型和科学型中各有一个,显示单击命令按钮的内容及运算结果3、命令按钮的应用通过创建数字按钮、算术运算按钮、函数运算等按钮,实现计算器的运算操作及窗体的转换4、单选按钮的应用在科学计算器中设置不同进制的转换、角度的转换5、标签的应用通过是否显示字母M表达数据是否被暂存(二)系统设计及实现1、主界面设计显示标准型的界面,通过菜单“查看”中的子菜单“科学型”及菜单“帮助”中的两个子菜单及期中的“返回”按钮实现窗体的转换2、工程的创建步骤如下:(1)新建一个“标准EXE”工程。

(2)添加4个子窗体(3)对所有的窗体进行简单的属性设置,如下表默认名称(Name)标题(Caption)Form1 计算器(1)Form1 计算器(2)Form1 辅导老师Form1 关于计算器3、菜单的创建(1) 标准型通过“菜单编辑器”创建,如下表标题(Caption)名称(Name)快捷键(ShortCut)编辑Edit……复制Copy Ctrl+C……粘贴Paste Ctrl+V查看View……标准型Biao……科学型Ke……数字分组Identify帮助Help……辅导老师Teacher……关于计算器About(2)科学型在查看菜单中增添了部分子菜单,如下表标题(Caption)名称(Name)快捷键(ShortCut)十六进制Liu F5十进制Shi F6八进制Ba F7二进制Er F8角度Jiao F2弧度Hu F3梯度Ti F44、窗体的设计(1)标准型标准型计算器的功能由“计算器(1)”窗体完成,用到的控件主要有:菜单、命令按钮、标签、文本框。

计算器设计实验报告

计算器设计实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

简易计算器设计报告

简易计算器设计报告

1602液晶显示计算器设计报告2016年10月一、摘要计算器是人们的日常生活最常见的电子产品之一,应用广泛,功能强大。

本次我们小组设计制作了一个简易计算器,能够在-9999999~9999999的范围内进行整数、小数的四则运算运算,并求解ax+e x=b类型方程。

该计算器以AT89C51单片机芯片作为核心,采4*4矩阵键盘作为输入,将数据输入单片机内部处理,用LCD1602工业字符液晶显示出运算和结果。

进行显示。

经过检验能够实现预设功能,具有很高的实用价值。

关键词:单片机;简易计算器;AT89C51;LCD1602。

本设计具有以下功能:1、能够实现-9999999~9999999范围内整数,小数的基本运算(超出范围后报错)。

2、储存运算结果,掉电不丢失。

3、实现6位及以上有效数字。

4、解ax+e x=b方程。

5、能够连续运算,即上次运算结果作为下次的输入。

6、能够在一次操作中连续运算。

二、方案论证方案描述:方案一:以51单片机为核心,4*4矩阵键盘输入,数码管显示输入数字和运算结果。

方案二:以51单片机为核心,4*4矩阵键盘输入,LCD1602显示输入数字和运算结果。

方案比较与选择:LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,又有微功耗、体积小、显示内容丰富超薄轻巧等优点,而数码管虽然亮度高,但是操作复杂、能耗高、且不能显示符号,本设计对亮度要求不是特别高,故采用方案二。

三、解方程算法ax+e x=b为非线性方程,采用牛顿法迭代求解。

原理是利用泰勒公式在X0处展开,且展开到一阶,即f(X)=f(X0)+(X- X0)f’(X0),求解X=X1= X0-f(X0)/f’(X0),进而推出Xn+1=Xn-f(Xn)/f’(Xn)。

通过迭代,这个式子必然在f(x)=0的时候收敛,进而得到方程的解。

四、电路与程序系统组成:电源系统,复位电路,晶振电路,4*4矩阵键盘,独立按键,STC80C52,LCD1602。

计算器设计报告.

计算器设计报告.

程序设计与课题设计计算器设计报告电信1302何倩雯林然然索引概要 (3)一.设计任务与目标 (3)1.基本功能 (3)2.附加功能 (3)二.方案设计与功能说明 (3)1.程序界面总体规划 (3)2.程序功能实现 (4)三.程序类图 (5)四.主要程序清单 (6)alculationDlg类 (6)2.CSquare类 (11)3.XBitmapButton类 (13)五.程序运行的测试与分析 (14)1.测试基础加减乘除功能运算 (14)2.测试连加,连乘,连减,连除功能 (14)3.连等以及等号后直接进行运算的测试 (14)4.测试退格,清0,全清 (14)5.寄存器功能测试 (14)6.16进制、8进制、2进制功能测试 (14)六.负责完成内容 (14)七.结论与心得 (15)概要在《程序设计课程设计》课程中,我们选择Visual C++6.0作为开发平台,两人一组,设计开发一个模拟计算器。

尽量向windows自带计算器靠近。

完成了普通计算器以及科学计算器,能够满足一般计算要求,也提供了二进制、八进制、十六进制的四则运算。

在计算器外观上也做了改进。

一.设计任务与目标1、完成基本功能:1)计算器窗口界面的绘制以及基本加减乘除运算及其连续运算的实现2)寄存器的存储,读取及清空,显示寄存器内容3)运算过程的显示5)按等号重复最后一次运算6)退格,清空及全部清空7)取反,开根号及倒数运算2、附加功能1)增加科学型计算功能2)增加十六进制, 二进制,八进制数据计算功能;3)美化模拟计算器界面,如按钮被选中后自动改变颜色,增加菜单栏根据需要选择不同类型的计算器等。

二.方案设计与功能说明1.程序界面总体规划创建CALCULATION_DIALOG和SCIENCE_DIALOG两个对话框界面分别用于显示普通型计算器与科学型计算器。

为两个对话框添加菜单,供用户选择所需计算器类型(即相应的对话框窗口)。

(1)普通型计算器数字0-9,小数点,+,-,x,÷,倒数,取负,根号,百分号,=,清零,全部清零,退格,读寄存器,存寄存器,清寄存器共26个按钮,用于用户的运算操作。

简单计算器课程设计报告

简单计算器课程设计报告

简单计算器课程设计报告目录1.基本功能描述 (1)2.设计思路 (1)2.1相关说明 (1)2.2各块流程图 (2)3.软件设计 (7)3.1 设计步骤 (7)3.2 界面设计 (9)3.2.1添加图标 (9)2.2.2添加控件 (10)3.2.3添加菜单 (12)3.3 关键功能的实现 (14)4.结论与心得体会 (16)5.参考文献 (18)6.思考题 (18)7.附录 (20)7.1调试报告 (20)7.2测试结果 (21)7.3关键源代码 (23)简单计算器1.基本功能描述该简单计算器主要实现了双目运算和单目运算功能。

双目运算符包含基本的四则运算及乘幂功能,单目运算符主要包含正余弦,阶乘,对数,开方,倒数等运算,同时也包含角度制的转换、科学型与标准型的转换、输出设计者信息、清除、退格、退出功能。

简单计算器可对输入的任意操作数,包括小数和整数及正数和负数进行上述各种运算并能实现连续运算,并且能在出现错误时给出相应提示。

同时也可以操作与运算按钮相对应的菜单项。

2.设计思路2.1相关说明1)相关的变量标志位:m_num:与编辑框相关联的变量num1:作为临时变量储存当时按下的按钮值num2:作为临时变量储存编辑框的值m_hudu:角度制的标志位,为0时为弧度m_jiao:角度转换的临时变量point:bool值,小数点有无标志位,当值为ture时为有小数点dianhou:小数点后位数记录位danshuang:单双目运算符标志位zhengfu:bool值,作为正负数标志位,当为ture时为正数2)主要功能设计简述:该简单计算器的重难点主要在一个编辑框要实现输入和输出的显示,小数的实现,正负数的交替输入,退格时数的实现,单双目运算符的不同如何实现等方面。

其中单目运算符sin、cos、tan等要考虑角度转换,之后的运算和其他单目运算符没有差别,基于以上的考虑,想到必须对相关的操作进行相应的标志位,具体的如上列举。

计算器设计实验报告

计算器设计实验报告

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

它能够进行基本的数学运算,如加减乘除,以及更复杂的科学计算,如对数、三角函数等。

本实验旨在设计一个简单的计算器,以了解计算器的工作原理,并通过实践来提高我们的电子设计和编程能力。

第二部分:设计思路在设计计算器之前,我们首先需要确定所需的功能和要使用的技术。

基于我们的目标是设计一个简单的计算器,我们决定使用数字显示屏、按键和微控制器来实现。

数字显示屏是用于显示计算结果和用户输入的设备,我们选择了七段数码管作为显示器。

按键则用于接收用户输入的数字和操作符。

微控制器是计算器的核心部件,它负责接收按键输入,进行计算,并将结果显示在数码管上。

第三部分:实验步骤1. 硬件设计我们首先设计了数字显示屏的电路。

通过连接七段数码管和相应的电阻,我们能够控制数码管的亮灭,从而显示不同的数字和符号。

接下来,我们设计了按键的电路。

每个按键都与微控制器的引脚相连,当按键被按下时,引脚会接收到一个电平信号,微控制器通过检测引脚状态来确定用户的输入。

2. 软件编程在硬件设计完成后,我们开始编写微控制器的程序。

程序的主要任务是接收按键输入,并根据用户的操作进行相应的计算。

首先,我们设置了一个变量来存储用户的输入,然后通过检测按键状态来更新这个变量。

当用户按下数字键时,程序将数字添加到变量中;当用户按下操作符键时,程序将根据当前的操作符和变量进行相应的计算。

最后,程序将计算结果显示在数码管上。

我们使用了一个函数来将计算结果转换为七段数码管的控制信号,并通过相应的引脚将信号发送到数码管。

第四部分:实验结果经过一段时间的设计和调试,我们成功地完成了计算器的制作。

它能够准确地接收用户的输入,并进行相应的计算。

计算结果也能够正确地显示在数码管上。

我们进行了一系列测试来验证计算器的功能和性能。

测试包括基本的加减乘除运算,以及一些复杂的科学计算,如对数和三角函数。

计算器程序设计报告

计算器程序设计报告

计算器程序设计报告计算器程序设计报告1-引言1-1 背景计算器是一种常见的工具,可以进行基本的数学运算,如加减乘除等。

为了满足用户的需求,我们决定设计一个计算器程序,使用户能够方便地进行各种数学运算。

1-2 目的本报告旨在描述我们设计的计算器程序的详细功能和实现过程。

通过本文档,读者将了解到如何使用计算器程序进行各种数学运算,并且可以根据需要进行扩展。

2-需求分析2-1 用户需求用户希望使用一个具有简单操作界面、支持各种基本数学运算,并具备一些额外功能的计算器程序。

2-2 功能需求●支持基本的四则运算:加法、减法、乘法、除法。

●支持括号的运算优先级。

●支持取余和取模运算。

●支持科学计数法。

●支持计算平方根、立方根等常用数学函数。

●支持存储和读取计算结果。

●支持清除当前输入和计算结果。

●支持多种界面主题选择。

●支持历史记录功能,记录之前的计算操作。

3-设计方案3-1 总体架构计算器程序将采用分层架构,包括界面层、业务逻辑层和数据存储层。

界面层负责用户交互,业务逻辑层负责处理用户的输入和计算逻辑,数据存储层负责存储用户的计算结果和历史记录。

3-2 界面设计界面将采用简洁直观的设计,包括数字按钮、运算符按钮和其他功能按钮。

用户可以通过按钮进行数学运算和额外功能的操作。

3-3 数据结构设计程序将使用栈来处理运算符的优先级和括号的匹配。

同时,还需设计适当的数据结构来存储计算结果和历史记录。

4-功能实现4-1 基本四则运算程序将设计相应的函数来实现加法、减法、乘法和除法运算,并考虑数值溢出和除数为零的异常情况。

4-2 括号的运算优先级程序将使用栈来处理具有括号的运算,保证括号内的运算先于外层运算。

4-3 科学计数法程序将设计函数来处理科学计数法表示的数值,并进行相应的运算。

4-4 常用数学函数程序将设计函数来计算平方根、立方根等常用数学函数,并进行相应的运算。

4-5 计算结果的存储和读取程序将提供存储计算结果和读取之前结果的功能,方便用户进行连续计算和结果的查看。

简易计算器实验报告

简易计算器实验报告

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

二、实验原理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、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)

51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。

而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。

设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。

1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。

2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。

3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。

设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。

其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。

2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。

根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。

可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。

•改进操作方式,使其更加符合人体工程学原理。

•添加储存器,使用户能够将计算结果进行存储和调用。

总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。

虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。

•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。

•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。

综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。

51单片机计算器设计报告

51单片机计算器设计报告

目录一设计概述------------------------------------------3 二硬件电路图---------------------------------------3 三软件流程图---------------------------------------4 四结论------------------------------------------------11 五参考文献-------------------------------------------13一、1.1设计概述计算器通过编译,能实现简单的四位数加减及两位数的乘除,输入的数通过键盘给出,要求显示要操作的数,并显示结果,编译十进制跟十六进制之间转换的程序,实现十进制转十六进制,显示结果。

1.2功能说明简单的运算功能:当通过输入键盘数字时,能够在显示器上显示输出的数值,并且通过想实现的简单运算功能,实现计算器的加、减、乘、除,并将结果显示出来。

进制转换的功能:通过输入的十进制数,经过计算器的功能将其转换为十六进制数,并将结果显示出来。

二、硬件电路图主要程序流程说明:主程序首先进行初始化,设定一些变量及其意义,扫描键盘,当输入有0~9数字时,通过键盘的扫描程序,将数值赋给second并在显示器上来,当输入的是加减符号的时候,通过键盘的扫面程序,赋予OP相应值,并跳到运算部分,通过判断preop的值,执行相应的运算部分,将OP的值赋给preop并把second的值赋给first。

再一次通过输入0~9的数字,再一次经过键盘的扫描程序,输出second的值,最后通过输入键盘上的等号,右键盘扫描得出相应的OP,跳到运算部分,根据程序的流程,将第一个数的跟第二个数进行简单的加、减、乘、除运算,并将结果通过显示器输出。

同理,当需要进行进制之间的转换时,输入相应的数字,通过键盘的扫描不显示在显示器上,再通过控制,进制转换开关,如果进制转换开关置0 按下,就实现了进制之间的相互转换。

计算器设计报告

计算器设计报告

高级语言程序设计课程设计报告题目:计算器学号:20131211420姓名:路延红指导教师:李菊霞计算机科学与应用系一、选题分析计算器:1.内容: 编写一个高精度计算器程序,可以计算任意精度的数字。

2.制作菜单;3.为各操作设计函数;二、算法设计1. 设计菜单界面2.添加成功后返回主菜单;3.选择相应数字进入系统;4.退出系统。

三、数据结构void fun1()//算术运算void menu()void fun2()//进制转换void main()四.程序源码#include<stdio.h>#include<math.h>void menu(){printf(" |============================|\n"); printf(" | 1.算术运算; 2.进制转换; |\n"); printf(" |============================|\n\n"); }void fun1()//算术运算{int a,b;char oper; printf("请输入算式:");scanf("%d%c%d",&a,&oper,&b);switch(oper){case '+':printf("结果为:%d\n",a+b);break;case '-':printf("结果为:%d\n",a-b);break;case '*':printf("结果为:%d\n",a*b);break;case '/':printf("结果为:%.2f\n",(float)a/b);break;case '%':printf("结果为:%d\n",a%b);break;default:printf("输入有误!\n");break;}}void fun2()//进制转换{int choice,value,i,j=0,k,t;char s[50];int a[4];printf("********************************************************\n");printf(" 1.十进制转换成二进制; 2.十进制转换成十六进制;\n");printf(" 3.二进制转换成十进制; 4.二进制转换成十六进制;\n");printf(" 5.十六进制转换成二进制; 6.十六进制转换成十进制;\n");printf("********************************************************\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:printf("请输入十进制数值:");scanf("%d",&value);while(value>=2){if(value%2!=0)s[j++]='1';elses[j++]='0';value=value/2;}if(value==1)s[j]='1';printf("结果为:");for(i=j;i>=0;i--)printf("%c",s[i]);break;case 2:printf("请输入十进制数值:");scanf("%d",&value);printf("结果为:%x",value);break;case 3:printf("请输入二进制数:");scanf("%s",s);for(i=0;s[i]!='\0';i++);i--;value=0;for(j=0;j<=i;j++){ t=1;if(s[j]=='1'){ for(k=i-j;k>0;k--)t*=2;value+=t;}}printf("结果为:%d\n",value);break;case 4:printf("请输入二进制数:");scanf("%s",s);for(i=0;s[i]!='\0';i++);i--;value=0;for(j=0;j<=i;j++){ t=1;if(s[j]=='1'){ for(k=i-j;k>0;k--)t*=2;value+=t;}}printf("结果为:%x\n",value);break;case 5:printf("请输入十六进制数值:");scanf("%x",&value); while(value>=2){if(value%2!=0)s[j++]='1';elses[j++]='0';value=value/2;}if(value==1)s[j]='1';printf("结果为:");for(i=j;i>=0;i--)printf("%c",s[i]);break;case 6:printf("请输入十六进制数值:");scanf("%x",value); printf("结果为:%d\n",value);break;default:printf("选择有误!\n");break;}}void main(){int choice;while(choice!=0){menu();printf("请选择(0退出):");scanf("%d",&choice);if(choice==1)fun1();else if(choice==2)fun2();printf("\n");}}五、运行结果六、课程设计总结通过这次课程设计,学到了很多编程知识,也知道了自己欠缺。

电子计算器课程设计报告书

电子计算器课程设计报告书

目录1 设计任务和性能指标 (1)1.1 设计任务 (1)1.2 性能指标 (1)2 设计方案 (1)2.1 需求分析 (1)2.2 方案论证 (1)3 系统硬件设计 (2)3.1 总体框图设计 (2)3.2 单片机选型 (2)3.3 单片机附属电路设计 (3)3.4 LCD液晶显示 (4)4 系统软件设计 (4)4.1 设计思路 (4)4.2 总体流程图 (4)4.3 子程序设计 (5)4.4 总程序清单 (6)5 仿真与调试 (6)5.1 调试步骤 (6)5.2 仿真结果及性能分析 (8)6 总结 (8)参考文献 (8)附录1 系统硬件电路图 (10)附录2 程序清单 (11)1 设计任务和性能指标1.1 设计任务电子计算器设计1、能实现4位整数的加减法和2位整数的乘法;2、结果通过5个LED数码管显示(4位整数加法会有进位)或通过液晶显示屏显示。

1.2 性能指标1.用数字键盘输入4位整数,通过LED数码显示管或液晶显示屏显示。

2.完成四位数的加减法应算。

当四位数想加时产生的进位时,显示进位。

3.显示2位,并进行2位整数的乘法。

4.设计4*4矩阵键盘输入线的连接。

2 设计方案2.1 需求分析我们日常生活的开支,大额数字或是多倍小数的计算都需要计算器的帮助,处理数字的开方、正余弦都离不开计算器。

虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。

所以,我们想到可不可以用自己所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求。

2.2 方案论证使用单片机为ATMEL公司生产AT89C51,AT89C51提供以下标准功能:4K字节FLASH 闪速存储器,128字节部RAM,32个I/O口线,两个16位定时/计数器,一个向量两级中断结构,一个全双工串行通讯口,置一个精密比较器,片振荡器及时钟电路,同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的工作模式,空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信及中断系统继续工作。

计算器设计实验报告

计算器设计实验报告

一、实验目的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单片机的计算器
专业:电气工程及其自动化
学号:
姓名:
成绩:
指导教师:
基于51单片机的计算器设计
一、系统方案
本课题计算器设计硬件电路采用三部分电路模块构成,第一部分是键盘模块电路,采用4*4矩阵式键盘作为输入电路;第二部分是LCD1602液晶显示模块;第三部分是以51单片机作为控制核心。

软件程序主要由三部分组成:主程序、按键扫描程序和LCD1602显示程序。

二、硬件设计
如图1所示,该图是一个计算器的PCB线路模型。

我们用到了17个键位,1个自锁开关,分别负责控制计算器的运行与电源开关。

1个STC89C51单片机,负责存储与执行计算器各部分的运行状况,是整个电路的核心部分。

一个LCD1602显示屏,负责计算器的显示模块。

部分电阻、电容、晶振等,用来支持计算机电路的正常执行。

在此线路中,设计时未设计下载接口,但使用了电源接口代替下载口,负责电路板的供电等。

三、软件设计
首先,我们使用了Proteus设计进行仿真,确认该设计思路可执行后,通过DXP设计电路。

Proteus仿真例如图2所示。

原理图参考了中国电子科技论坛提供的一些相关资料,同时自己进行了适当的改进。

依据Proteus所绘制的原理图,我们在Autium Designer上绘制了AD版的原理图,如图3所示。

在生成PCB版图时,第一次使用的封
装为中国电子科技论坛提供的封装,但是由于该封装存在明显缺陷,即:焊盘太小,部分接口太接近等问题,然后我们将大量的元件更换至了由老师提供的封装,部分元件仍然使用原封装。

在将程序下载至单片机的过程中,我借用了同学购买的单片机开发板,使用了STC 公司提供的软件
四、系统调试与结果
在使用Proteus仿真阶段,我们就开始了程序编写的任务。

程序编写我们真的感觉是从0开始。

因为在编写程序过程中,我们并没有完成51系列单片机的C语言程序的学习、LCD1602等元器件理论性知识的学习。

编写程序时,参考了《C51单片机入门(第二版)》,《单片机原理与应用(第三版)》,以及部分网络资源。

使用的软件为Keil 第四版。

部分核心代码如下:
核心代码第一部分:反转法键盘扫描(参考了《C51单片机入门(第二版)》)
short keycheckdown() /* 反转法键盘扫描*/
{
short temp1,temp2,temp,a=0xff;
P1=0xf0; /* 输入行值(或列值)*/
LCD_Delay_ms(20); /* 延时*/
temp1=P1; /* 读列值(或行值)*/
P1=0xff;
LCD_Delay_ms(20); /* 延时*/
P1=0x0f; /* 输入列值(或行值)*/
LCD_Delay_ms(20); /* 延时*/
temp2=P1; /* 读行值(或列值)*/
P1=0xff;
temp=(temp1&0xf0)|(temp2&0xf); /* 将两次读入数据组合*/ switch(temp) /* 通过读入数据组合判断按键位置*/ {
case 0x77 :a=0x0d;break;// 按键/
case 0x7b :a=0x0e; break;// 按键=
case 0x7d :a=0; break;// 按键0
case 0x7e :a=0x0f; break;// 按键CE
case 0xb7 :a=0x0c;break;// 按键*
case 0xbb :a=0x9;break; // 按键9
case 0xbd :a=0x8;break; // 按键8
case 0xbe :a=0x7;break; // 按键7
case 0xd7 :a=0x0b;break;// 按键-
case 0xdb :a=0x6;break; // 按键6
case 0xdd :a=0x5;break; // 按键5
case 0xde :a=0x4;break; // 按键4
case 0xe7 :a=0x0a; break;// 按键+
case 0xeb :a=3;break; // 按键3
case 0xed :a=2;break; // 按键2
case 0xee :a=1;break; // 按键1
default :a=0xff;
}
return a; /* 返回按键值*/
}
核心代码第二部分:主函数
void main()
{
uchar key=0xff; //键值初始化
uchar n=0; //第1个数可以按1-4次uchar m=5; //第2个数可以按1-4次uchar x=0;
data_a=0; //前一个数
data_b=0; //后一个数
data_c=0; //结果
init_lcd(); //1602液晶初始化
display_a();
while(1)
{
key=keycheckdown(); /*动态扫描键盘,返回按键对应值,赋给j key=0到f */
if(0xff!=key) /*若返回值有效,进入内部处理程序*/
{
if(key<10)
{
if(n<4){data_a=data_a*10+key;m=5;display_a();}n++; //首先输入第一个数
if(m<4){data_b=data_b*10+key;n=5;display_b();}m++; //必须按了+-*/才能输入第二个数
}
else
{ switch(key) /*功能键选择*/
{
case 0xa:n=5;m=0;x=1;W_lcd(5,0,'+');break; //加/* + S=1 */ /* 数值转换函数*/
case 0xb:n=5;m=0;x=2;W_lcd(5,0,'-');break;
/* - S=2 *///减
case 0xc:n=5;m=0;x=3;W_lcd(5,0,'*');break;
/* * S=3 *///乘
case 0xd:n=5;m=0;x=4;W_lcd(5,0,'/');break; /* / S=4 *///除
case
0xe:n=5;m=5;eql(x);W_lcd(12,0,'=');display_c(x);break; /* = */
case 0xf:n=0;x=0;m=5;
data_a=0;data_b=0;data_c=0;LCD_Write_String(0,0,table);LCD_Write_String( 0,1,table);W_lcd(0,0,'0');break; /* C*/
}
}
do{P1=0xf0;}while(P1!=0xf0); /*等待按键松开*/
}//(0xff!=key)
}//while
}//main
经过Proteus仿真后,发现方案可行。

再进行实际制作。

实际制作过程中,由于电路板线路腐蚀过度,导致部分线路无法正常导通,以及在焊接的过程中,由于焊接操作不当,导致部分功能无法正常实现。

目前对于部分线路无法正常工作的临时解决方案是,补充导线走飞线或对这些线路补焊锡。

五、总结
这次制作过程中,虽然并未完美的完成任务,但是还是能收获到
很多心得:
一方面,本次设计有以下几点我做的比较正确。

1、我善于借助网络资源以及部分参考书。

通过自己对资料的寻求,能够较为便捷快速地找到自己需要的内容。

2、在真正执行设计前,我先使用了Proteus仿真,保证了设计的可执行性,避免资源浪费。

另一方面,此次设计有以下不足。

1、设计时并未首先使用老师提供的封装库,导致时间上无谓的浪费。

2、没有设计程序下载接口,属于此次设计时的重大失误,但通过开发板下载程序,暂缓性的解决了该问题。

3、对老师依赖程度过小,导致有些问题解决时绕了很多弯路。

图1 计算器设计的PCB图
图2 计算器的Proteus仿真效果图
图3 计算器的DXP原理图
附件:
1.设计计算器Proteus仿真文件。

2.设计计算器的C语言程序文件。

3.设计计算器的DXP原理图文件与封装图文件。

相关文档
最新文档