搜档网
当前位置:搜档网 › 简单计算器

简单计算器

简单计算器
简单计算器

华中科技大学

《电子线路设计、测试与实验》实验报告实验名称:简单计算器设计

院(系):光学与电子信息学院

专业班级:光材1102

姓名:苏铁城

学号:U201115229

时间:2013.12.26

地点:南一楼

实验成绩:

指导教师:杨明

2013 年12 月25 日

一、功能要求:

要求设计并实现能够通过按键及拨码开关设置实现的 2 位十进制数字计算器。其中数字以数码管显示,2 位十进制操作数以拨码开关输入,符号位和计算符按键开关输入。

基本要求

1)实现2 位十进制数字的可带符号的加、减、乘、除计算,除法计算结果以商及余数方式呈现。

二、基本原理

1、数字输入部分

1)需要实现2位十进制的输入与显示,首先设置选择mode,mode0为数字A输入与显示,mode1为数字B输入与显示,mode2为数字C输出与显示。

2)数字A与B分为十位与个位,为实现个位与十位的分别输入,我们设置一个fm,当fm

为高电平时输入数字的个位数,当其为低电平时输入十位数。设置turn键为fm高低电平之间的转换。

3)数字的输入先设置change,用来改变数值大小,在上升沿的触发下,数字可以实现加一运算,当数字到达9时,自动跳到1。这里面设置的loop为长按change键可实现在4Hz的时钟频率下实现快速加一,这是在小组项目中多功能时钟中的功能,但是考虑到计算器数字只能从1~9,快速加一也没什么意义,不过这里还是保留了这个功能。

2、数字的转换

这里输入的A、B是个位数与十位数分别输入的,但是将其以二进制的形式合成很明显得不到需要输入的数字,因此我们需要做一个转换:

A1[7:0]=(A[0]+A[1]*2+A[2]*4+A[3]*8+A[4]*10+A[5]*20+A[6]*40+A[7]*80);

B1[7:0]=(B[0]+B[1]*2+B[2]*4+B[3]*8+B[4]*10+B[5]*20+B[6]*40+B[7]*80);

3、数字的计算

1)首先设置加减乘除的四个按钮,以及负号的输入,这里默认是正数。

2)带符号的运算只需设置运算规则即可,详见附录代码。

3)加减乘采用的是直接运算,因为加减乘本身比较简单,感觉没有用ip核的必要,另外使用过多ip核使用资源过多。除法器是采用的ip核中的divider,输出商与余数。考虑到除法器的显示问题,即把商显示在前两位余数显示在后两位,我们除法输出为

C=D[15:8]*100+D[7:0];

4、数字的显示

1)因为数字的输出为每个数码管显示每个位的十进制形式,可是实际计算的结果为二进制显示,因此我们必须把数字的每一位取出来。由于ISE只能除以二的幂,因此我们必须再次调用除法器的ip核,这里考虑到位数与之前的除法所使用的除法器位数不同,我们新建了个除法器,分别除以1000取余除以100取余除以10再取余即可分别得到各个位数上的十进制表示。

2)至于符号的显示问题,本来是想用数码管显示的,考虑到乘法算出来超过4位,因此改用LED灯显示,负数时LED亮。

3)最后就是不断刷新四个数码管,这要频率够快就行,然后就是数字1到9在数码管上的显示,这个每个实验都相似,这里就不说明了。

三、测试

经过测试,加减乘除计算结果均正常。

四、实验感悟

其实计算器的设计麻烦就在于要把我们日常计算的二进制转换为十进制,感觉主要容易忽略的问题就是一开始输入的数字需要进行转换,以及最后显示部分的转换,只要一开始明白了这个很快就可以实现功能,我就是一开始没有注意到这个问题,主要的问题也都出现在这里,加减乘除倒是很快就解决了,另外ip核的使用也遇到了一些麻烦,因为一开始没有接触过,也不会使用,经过多次尝试才知道其使用方法。这学期的verilog编程也到此结束了,比赛项目没有进复赛还是有点遗憾,不过我感觉自己还是收获挺大的,以前一直很害怕编程,当初学C语言的时候就感觉很烦恼,以至于不敢去考计算机二级,后来因为编程水平太捉急以至于失去了一次实习机会,不过这学期开始硬着头皮学习编程,总算是考过了计算机二级,学会了matlab,以及verilog的使用,这学期通过verilog制作了计数器、多功能时钟以及计算器,感觉还是挺有成就感的,经过这学期的学习,我也发现其实计算机语言都是相通的,其实学好了一门,其他的也很快就能掌握。

五、附录

源程序代码

module calculator(CLK,mode,change,turn,add,sub,div,multi,signA,signB,

LD_signA,LD_signB,LD_sign,LD_unit,LD_decade,out_display,display);

input CLK,mode,change,turn;

input add,sub,div,multi;

input signA,signB;

output reg LD_signA,LD_signB,LD_sign;

output reg LD_unit,LD_decade;

output reg [7:0]out_display;

output [3:0]display;

reg[3:0] display=4'b1110;

reg[15:0] cnt;

reg[3:0] type_temp;

reg [1:0]m,fm,num1,num2,num3,num4;

reg [23:0]middle_4Hz=24'd0;

reg clk_4Hz;

reg [1:0]loop1,loop2,loop3,loop4;

reg [7:0]A,B;

wire [7:0]A1,B1;

integer C;

reg [15:0]num;

reg counta1,counta2,countb1,countb2;

reg [9:0]divisor1=10'd1000;

reg [6:0]divisor2=7'd100;

reg [3:0]divisor3=4'd10;

wire [15:0]dividend1;

wire [11:0]dividend2;

wire [7:0]dividend3,dividend4,dividend5;

wire [7:0]A2;

wire [15:0]D,E;

wire rfd,rfd1,rfd2,rfd3;

always@(posedge CLK)

begin

if(middle_4Hz>=24'd6249999)

begin middle_4Hz<=24'd0; clk_4Hz<=~clk_4Hz; end

else

begin middle_4Hz<=middle_4Hz+1'b1; end

end

always@(posedge mode) //mode0为数字A输入,mode1为数字B输入,mode2为数字C 输出

begin

if(m==2) m<=0;

else m<=m+1'b1;

end

always@(posedge turn)

fm<=~fm;

always@(m,fm)

begin

case(m)

0:begin if(fm)

begin counta1<=change; {LD_unit,LD_decade}<=2; end //改变数字A个位数

else

begin counta2<=change; {LD_unit,LD_decade}<=1; end //改变数字A 十位数

{countb1,countb2}<=0;

end

1:begin if(fm)

begin countb1<=change; {LD_unit,LD_decade}<=2; end

else

begin countb2<=change; {LD_unit,LD_decade}<=1; end

{counta1,counta2}<=0;

end

default:{counta1,counta2,countb1,countb2,LD_unit,LD_decade}<=0;

endcase

end

always@(posedge clk_4Hz)

if(counta1) begin

if(loop1==3) num1<=1;

else

begin loop1<=loop1+1; num1<=0; end

end

else begin loop1<=0; num1<=0; end

always@(posedge clk_4Hz)

if(counta2) begin

if(loop2==3) num2<=1;

else

begin loop2<=loop2+1; num2<=0; end

end

else begin loop2<=0; num2<=0; end

always@(posedge clk_4Hz)

if(countb1) begin

if(loop3==3) num3<=1;

else

begin loop3<=loop3+1; num3<=0; end

end

else begin loop3<=0; num3<=0; end

always@(posedge clk_4Hz)

if(countb2) begin

if(loop4==3) num4<=1;

else

begin loop4<=loop4; num4<=0; end

end

else begin loop4<=0; num4<=0; end

assign cta1={(num1&clk_4Hz)|(!num1&counta1)};

assign cta2={(num2&clk_4Hz)|(!num2&counta2)};

assign ctb1={(num3&clk_4Hz)|(!num3&countb1)};

assign ctb2={(num4&clk_4Hz)|(!num4&countb2)};

always@(posedge cta1)

begin

if(A[3:0]==9) A[3:0]<=0;

else A[3:0]<=A[3:0]+1;

end

always@(posedge cta2) //A,B的输入

begin

if(A[7:4]==9) A[7:4]<=0;

else A[7:4]<=A[7:4]+1;

end

always@(posedge ctb1)

begin

if(B[3:0]==9) B[3:0]<=0;

else B[3:0]<=B[3:0]+1;

end

always@(posedge ctb2)

begin

if(B[7:4]==9) B[7:4]<=0;

else B[7:4]<=B[7:4]+1;

end

assign A1[7:0]=(A[0]+A[1]*2+A[2]*4+A[3]*8+A[4]*10+A[5]*20+A[6]*40+A[7]*80); assign B1[7:0]=(B[0]+B[1]*2+B[2]*4+B[3]*8+B[4]*10+B[5]*20+B[6]*40+B[7]*80);

dividerd dividerd(

.clk(CLK),

.rfd(rfd),

.dividend(A1),

.divisor(B1),

.quotient(D[15:8]),

.fractional(D[7:0]));

always@(CLK)

begin

LD_sign<=0;

if(add)//加法

begin

if(signA&signB)

begin

C=A1+B1;

LD_sign<=1;

{LD_signA,LD_signB}<=3;

end

else if(signB)

begin

C=A1-B1;

if(C<0) begin LD_sign<=1; C=-C; end

else LD_sign<=0;

{LD_signA,LD_signB}<=1;

end

else if(signA)

begin

C=-A1+B1;

if(C<0) begin LD_sign<=1; C=-C; end

else LD_sign<=0;

{LD_signA,LD_signB}<=2;

end

else begin C=A1+B1; LD_sign<=0; {LD_signA,LD_signB}<=0; end

end

else if(sub)//减法

begin

if(signA&signB)

begin

C=-A1+B1;

if(C<0) begin LD_sign<=1; C=-C; end

else LD_sign<=0;

{LD_signA,LD_signB}<=3;

end

else if(signB) begin C=A1+B1; LD_sign<=0; {LD_signA,LD_signB}<=1; end else if(signA)

begin

C=-A1+B1;

if(C<0) begin LD_sign<=1; C=-C; end

else LD_sign<=0;

{LD_signA,LD_signB}<=2;

end

else

begin

C=A1-B1;

if(C<0) begin LD_sign<=1; C=-C; end

else LD_sign<=0;

{LD_signA,LD_signB}<=0;

end

end

else if(multi)//乘法

begin

if(signA&signB)

begin C=A1*B1; LD_sign<=0; {LD_signA,LD_signB}<=3; end

else if(signA)

begin C=A1*B1; LD_sign<=1; {LD_signA,LD_signB}<=2; end

else if(signB)

begin C=A1*B1; LD_sign<=1; {LD_signA,LD_signB}<=1; end

else begin C=A1*B1; LD_sign<=0; {LD_signA,LD_signB}<=0; end

end

else//除法

begin

C=D[15:8]*100+D[7:0];

if(signA&signB) begin LD_sign<=0; {LD_signA,LD_signB}<=3; end

else if(signA) begin LD_sign<=1; {LD_signA,LD_signB}<=2; end

else if(signB) begin LD_sign<=1; {LD_signA,LD_signB}<=1; end

else begin LD_sign<=0; {LD_signA,LD_signB}<=0; end

end

end

always@(m,div) //选择显示的数

case(m)

0:num<=A;

1:num<=B;

2:begin

num[15:12]<=E[15:12];

num[11:8]<=E[11:8];

num[7:4]<=E[7:4];

num[3:0]<=C-E[15:12]*1000-E[11:8]*100-E[7:4]*10;

end

endcase

assign dividend1=C;

assign dividend2=C-E[15:12]*1000;

assign dividend3=C-E[15:12]*1000-E[11:8]*100; assign dividend4=D[15:8];

assign dividend5=(A1-B1*D[15:8]);

divider divider1(

.clk(CLK),

.rfd(rfd1),

.dividend(dividend1),

.divisor(divisor1),

.quotient(E[15:12]),

.fractional());

divider divider2(

.clk(CLK),

.rfd(rfd2),

.dividend(dividend2),

.divisor(divisor2),

.quotient(E[11:8]),

.fractional());

divider divider3(

.clk(CLK),

.rfd(rfd3),

.dividend(dividend3),

.divisor(divisor3),

.quotient(E[7:4]),

.fractional());

/*divider divider4(

.clk(CLK),

.rfd(rfd4),

.dividend(dividend4),

.divisor(divisor3),

.quotient(F[15:12]),

.fractional());

divider divider5(

.clk(CLK),

.rfd(rfd5),

.dividend(dividend5),

.divisor(divisor3),

.quotient(F[7:4]),

.fractional());

*/

always@(posedge CLK)

begin

cnt<=cnt+1'b1;

end

always@(posedge cnt[15])

begin

display[3:1]<=display[2:0];

display[0] <=display[3];

end

always@(display)

begin

case(display)

4'b1110:type_temp=num[3:0];

4'b1101:type_temp=num[7:4];

4'b1011:type_temp=num[11:8];

4'b0111:type_temp=num[15:12];

default:type_temp=num[3:0];

endcase

end

always@(type_temp) //显示

begin

case(type_temp)

4'd0:out_display <= 8'b11000000;

4'd1:out_display <= 8'b11111001;

4'd2:out_display <= 8'b10100100;

4'd3:out_display <= 8'b10110000;

4'd4:out_display <= 8'b10011001;

4'd5:out_display <= 8'b10010010;

4'd6:out_display <= 8'b10000010;

4'd7:out_display <= 8'b11111000;

4'd8:out_display <= 8'b10000000;

4'd9:out_display <= 8'b10010000;

default:out_display <= 8'b11111000;

endcase

end

endmodule

管脚约束

NET "CLK" LOC = B8;

NET "LD_decade" LOC = M11; NET "LD_sign" LOC = G1;

NET "LD_signA" LOC = P6; NET "LD_signB" LOC = P7; NET "LD_unit" LOC = M5;

NET "add" LOC = N3;

NET "display[0]" LOC = F12; NET "display[1]" LOC = J12; NET "display[2]" LOC = M13; NET "display[3]" LOC = K14; NET "div" LOC = G3;

NET "mode" LOC = A7;

NET "multi" LOC = F3;

NET "out_display[0]" LOC = L14; NET "out_display[1]" LOC = H12; NET "out_display[2]" LOC = N14; NET "out_display[3]" LOC = N11; NET "out_display[4]" LOC = P12; NET "out_display[5]" LOC = L13; NET "out_display[6]" LOC = M12; NET "out_display[7]" LOC = N13; NET "signA" LOC = B4;

NET "signB" LOC = K3;

NET "sub" LOC = E2;

NET "turn" LOC =C11 ;

NET "change" LOC =M4 ;

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出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; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 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; } 3

简单的四则运算计算器程序

简单的四则运算计算器程序

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

附件:程序源代码 // sizheyunsuan.cpp : Defines the entry point for the console application. #include #include const int MAX=100; class Operand{ private: double operS; public: Operand(){} Operand(double opers){ operS=opers; } void set(double opers){ operS=opers; } double get() { return operS;} }; class Operator{ private: char operF; int priority; public: Operator(){} Operator(char operf) { operF=operf; switch(operf) { case'(':priority=-1;break; case'+':priority=0;break; case'-':priority=0;break; case'*':priority=1;break; case'/':priority=1;break; case')':priority=2;break; } } void set(char operf){ operF=operf; } char get(){ return operF;} int getpriority(){ return priority; } };

LABVIEW计算器设计报告

虚拟仪器大作业——模拟计算器 班级:电1004 姓名: 学号:20102389

一、设计思想: .创建3个字符串显示控件num1,num2,num3,其中: 1、第一个输入数据存储在num1中 2、第二个输入数据存入num2中 3、将其赋给 num3,并使num2为空,以便输入的数据存入num2 4、所有的运算是在num1和 num3间进行 5、运算结果都赋给result,同时赋给num1,用于下一次的运算 .创建4个布尔开关按钮change,change1,change2,change3,其中: 1、Change的真假用来判断是第一个数据还是第二个数据 2、change1的功能是在输入=,运算完后,不需要初始化即可进行下一次运算 3、change2用来去掉数据小数末尾的0 4、change3用来保证backspace键仅对输入的数据有效,对运算结果无效 .创建2个数值显示控件type1,type2,并分别在其后面板的属性——数据类型——表示法中选择U8其中: 1、type1用来存储运算符号 2、type2用来保证连续“+、-、*、/”的正确性 3、所有的运算结果都赋给result 4、result经过去零处理后得到result1,将数据显示在前面板上。 二、实现过程 1、面板按键的设计及感应 首先,在前面板上建立一个簇 然后在簇中再建立布尔量,复制20个以满足键的需求(0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个平方键,一个倒数键,一个反号键,一个清零键及一个退出键并注意按键的顺序)。 将按键给值并作适当的美化处理

在后面板中通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每个键与数字(0--20)之间的对应。每次按下一个键时,通过 查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对一个键的感应过程。 2、数字的键入(0~8键入1~9数字) 由于第一个输入和第二个输入所存放的地方不同(第一个存于num1,第二个存于num2→mun3再清空num2),所以有必要对此分开处理。创建2分支(真、假)的case结构。 用change控制分支的选择:在处创建局部变量并转换为读入。由于数字的键入是数据输入,change3用来保证backspace键仅对输入的数据有

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

java编写的简单的计算器程序

计算器 项目内容:编写一个Applet,模仿windows附件所带计算器的功能,可以帮助用户完成计算功能,具体如下图所示。 项目要求:使用图形的方式借助窗口、菜单、按钮等标准界面元素和鼠标操作,来帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户,这样更加直观和生动; 1.Applet容器中组件的添加与设置,包括面板以及菜单的使用; 2.容器中组件的布局管理; 3.Java核心包中数组、数学计算类的使用; 4.异常的处理; 5.事件处理模型中的三类对象的使用: 1.Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。 2.Event Source-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。 3.Event handler-事件处理者,接收事件对象并对其进行处理的对象。 6.程序中事件处理的流程:

1.计算流程的细化 参考代码: import .*;

import .*; import .*; import import import public class Calculator implements ActionListener { #############"); dd(panel); panel1 = new JPanel(); panel2 = new JPanel(); (new BorderLayout()); 键入计算的第一个数字。\n"); ("2. 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n"); ("3. 键入计算的下一个数字。\n"); ("4. 输入所有剩余的运算符和数字。\n"); ("5. 单击“=”。\n"); aboutCal = new JMenuItem(" 关于计算器(A)"); (this);

MFC做的一个简单的计算器

目录 一.设计题目。 (1) 二.设计目的和内容。 (1) 三.基本功能描述。 (2) 四.设计思路。 (2) 五.软件设计:设计步骤、界面设计、关键功能的实现。 (3) a)设计步骤。 (3) b)界面设计。 (4) c)关键功能的实现。 (5) 六.附录。 (8) 一.设计题目。 小型计算器程序的编写. 二.设计目的和内容。 【设计目的】 1学习Visual C++的MFC开发程序的步骤。 2综合运用所学的类、继承和多态的知识。 3进一步掌握程序的调试方法。 【设计内容】 1利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件; 第1页

2实现算术加、减、乘、除等运算; 3选做:三角函数的运算、对数运算、指数运算、进制转换等。 三.基本功能描述。 具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果,按‘C E’键清屏。 四.设计思路。 a)首先考虑对所有按键分为两类,数字类和符号类。0,1,2,3,4,5,6,7,8,9为 数字类,+,-,*,/为符号类。数字在计算过程中最多需要保存两个,所以定义了两个double型变量num1和num2来进行存储,符号需要一个char型变量cal来存储。 b)为显示数字的编辑框设立一个double型的关联变量m_Num,为显示符号的编 辑框设立一个CString型的关联变量m_result,设立一个int型的小数点标志dotflag,设立一个int型的键入数字标志numflag,设立一个long型的小数部分权值quan,最后为了防止用户输入错误,设立一个判断输入是否为数字的int型标志mark。 c)然后考虑到在计算过程中num1和num2的储存状态有三种,num1==0和 num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0和num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时候把m_Num的值赋给num1,m_Num归零;num1!=0和num2!=0,把m_Num的值赋给num2,m_Num归零,令m_Num等于num1和num2合并后的值。

基于AT89C51的简单计算器设计

设计题目:基于单片机的简易计算器设计与仿真 一、设计实验条件: 地点: 实验设备:PC机(装有Keil;Protues;Word ;Visio ) 二、设计任务: 本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示overflow;当除数为0时,计算器会在LCD上提示error。 设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 三、设计时间与设计时间安排: 1、设计时间:6月27日~7月8日 2、设计时间安排: 熟悉课题、收集资料:3天(6月27日~6月29日)

具体设计(含上机实验):6天(6月30日~7月5日) 编写课程设计说明书:2天(7月6日~7月7日) 答辩:1天(7月8日) 四、设计说明书的内容: 1、前言:(自己写,组员之间不能相同,写完后将红字删除,排版时注意对齐) 本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。 2、设计题目与设计任务: 现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减、乘、除四则运算;(4)对错误的控制及提示。 针对上述功能,计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD显示模块;(3)算术运算模块;(4)错误处理及提示模块。3、主体设计部分: (1)、系统模块图:

java简单计算器源代码

简单计算器代码 package calcultorthree; import java.awt.BorderLayout;//导入边界布局管理器类 import java.awt.GridLayout;//导入网格布局管理器类 import java.awt.TextField;//导入文本区域类 import java.awt.event.ActionEvent;//导入事件类 import java.awt.event.ActionListener;//导入事件监听者类 import javax.swing.JButton;//导入按钮类 import javax.swing.JFrame;//导入窗体 import javax.swing.JPanel;//导入面板 /** *本例实现了简单计算器代码,具备加减乘除和正弦功能,旨在抱砖引玉。熟悉java的同学,可以在此基础上实现更复杂的功能。 * @author Fjsh */ public class CalcultorThree { //新建对象,在构造函数中进行初始化 JFrame frame;//新建窗体对象 JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=” JButton buttonplus,buttonminus,buttonmultiple,buttondevision, buttonsin,buttontozero;//新建按钮“+”“-”“*”“/”“sin”和归零按钮JButton buttonone,buttontwo,buttonthree,buttonfour,buttonfive,buttonsix, buttonseven,buttoneight,buttonnine;//新建数字按钮“0”“1”“2”“3”“4”“5”“6”“7”“8”“9” JPanel panelwest,panelcenter,paneleast;//新建三个面板 TextField tf;//新建文本区域对象 public CalcultorThree(){ //初始化对象 tf=new TextField(30);//构造空文本字段,字符宽度为30 frame =new JFrame("CalculatorThree");//构造窗体对象,名称为“CalculatorThree”

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

基于单片机的简易计算器设计 摘要 (2) 关键字:80C51 LCD1602 4*4矩阵键盘计算器 (2) 第一章绪论 (3) 1.1系统开发背景 (3) 1.2系统开发意义 (3) 1.3设计目的 (3) 1.4设计任务 (3) 第二章单片机发展现状 (4) 2.1目前单片机的发展状况 (4) 2.1.1单片机的应用场合 (4) 2.2计算器系统现状 (5) 2.3简易计算器系统介绍 (5) 第三章系统硬件设计及说明 (6) 3.1系统组成及总体框图 (7) 3.2AT89S52单片机介绍 (7) 3.3其它器件介绍及说明 (10) 3.3.1 LCD1602液晶显示 (10) 3.3.2 4*4矩阵扫描按键 (13) 第四章 PROTEUS模拟仿真 (14) 第五章系统硬件设计及说明 (16) 第六章软件设计 (17) 6.1汇编语言和C语言的特点及选择 (17) 6.2源程序代码 (17)

摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。 关键字:80C51 LCD1602 4*4矩阵键盘计算器

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

C++简单计算器课程设计报告

武汉理工大学《专业课程设计2》课程设计说明书 目录 1 基本功能描述 (1) 2 设计思路 (1) 3 软件设计 (4) 3.1 设计步骤 (4) 4 结论与心得体会 (12) 7 附:设计中的关键源代码 (14) 7.2 测试结果 (15)

简单计算器 1 基本功能描述 简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。 回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。

输入数据子函数 N 图1 输入数据子函数流程图

图2 简单计算器总流程图

3 软件设计 3.1 设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名09107xuzhujie及其所在位置,点击确定,如图3所示。 图3 新建MFC AppWizard[exe]工程 将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4所示。

java编写简单计算器源代码

import javax.swing.*; import java.awt.event.*; import java.awt.*; import https://www.sodocs.net/doc/d93458525.html,ng.Math; class ring extends JFrame implements ActionListener { //定义成员变量: //JFrame frame;//定义一个窗口类; JTextField text;//定义一个文本框类; JLabel label;//定义一个标签类; JPanel p1,p2,p3,p4,p5,p6;//定义面板类; String s1,s,s2;//定义三个字符串变量; int count=0; JButton a1,a2,a3,a4,a5,a6,b1,b2,b3,b4,b5,b6,c1,c2,c3,c4,c5,c6,d1,d2,d3,d4 ,d5,d6; //ring的构造函数; ring() { this.setTitle("计算器"); // super("计算器"); JMenuBar menubar1=new JMenuBar();//新建菜单条; this.setJMenuBar(menubar1); JMenu menu1=new JMenu("编辑(E)"); JMenu menu2=new JMenu("查看(V)"); JMenu menu3=new JMenu("帮助(H)"); menubar1.add(menu1); menubar1.add(menu2); menubar1.add(menu3); JMenuItem item1=new JMenuItem("复制(c) ctrl+c"); JMenuItem item2=new JMenuItem("粘贴(p) ctrl+v"); JMenuItem item3=new JMenuItem("标准型(T)"); JMenuItem item4=new JMenuItem("科学型(s)"); JMenuItem item5=new JMenuItem("数字分组(I)"); JMenuItem item6=new JMenuItem("帮助主题(H)"); JMenuItem item7=new JMenuItem("关于计算机(A)"); menu1.add(item1); menu1.add(item2); menu2.add(item3); menu2.add(item4); menu2.add(item5); menu3.add(item6);

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 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亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

单片机简易计算器课程设计

单片机简易计算器课程设计 课程设计 题目名称________________ 简易计算器设计____________ 课程名称_____________ 单片机原理及应用____________ 学生姓名________________

班级学号________________ 2018年6月20日

目录 一设计目的 (2) 二总体设计及功能介绍 (2) 三硬件仿真图 (3) 四主程序流程图 (4) 五程序源代码 (5) 六课程设计体会 (28)

设计目的 本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUE仿真。 二总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51 系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(0?9)、符号键(+、-、x、十)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘;

执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 三硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

C编写简易计算器附源代码超详细

超详细 一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里 使用Windows窗体应用程序,并命名为Calc,如下图所示: 二、向窗体中拖入需要的控件,如下图所示: (完成效果图) 结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name修改为btn_dot,按键【+-*/】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。 三、代码部分(含解释),采用switch多分支语句编写 using System; using System.Drawing; using System.Collections; using https://www.sodocs.net/doc/d93458525.html,ponentModel; using using System.Data; namespace Calc { ///

///温柔一刀C#简易计算器的实现 /// publicclass CalcForm:Form { private Button btn_0; private Button btn_1; private Button btn_2; private Button btn_3;

相关主题