简易计算器的设计_C#课程设计

5 篇文章 6 订阅
订阅专栏

以下内容可且仅可供参考,如有错误欢迎指正。

部分内容借鉴自百度

侵删致歉

位切换键盘的实现用了复杂的拖64给label的方法,此功能可以在自己计算机上的计算器里找到。

目录

一、设计简介

1.设计背景

2.开发工具及环境

二、需求分析

1.设计功能要求

2.其他要求

三、相关工作

1.设计基础

2.功能需求

四、设计原理

详见代码

五、源代码

1.界面

2. Form1.cs

3.Form2.cs

3.Program.cs


一、设计简介

1.设计背景

        伴随着日益升高的物质生活水平以及日常生活中对基本的计算需求的提高。如今,网络快速发展,对算数要求的需求日益增大,计算的效率和性能和人们的生活紧密相关。对此,使用c#语言开发出一个为人们生活带来便利的计算器,以期带来对数据计算的提高。该系统实现了对数的加、减、乘、除以及专业模式的运算。

2.开发工具及环境

1)   开发工具及介绍

        Microsoft Visual Studio(简称VS)。VS是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.Net Core、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。

2)   开发环境

        window10系统、window11系统、Microsoft Visual Studio2019、2022。

二、需求分析

1.设计功能要求

1)实现加、减、乘、除、求开方、求倒数等。

2)实现进制之间的转换功能:十进制、二进制、十六进制、八进制。

2.其他要求

1)界面美观,功能丰富

2)开放平台:vs2010及以上

三、相关工作

1.设计基础

        使用Windows窗体应用程序,设计出美观丰富的用户界面(UI)以及相关代码编写设计程序而集成的一个简易的计算器,通过Windows窗体应用程序来添加控件,来组成所需要的运算和数字来达到简易模式以及专业模式。

2.功能需求

        图形化用户界面,设计的简易计算器,用户通过button按钮选择用户想要的算法、数字以及运算符号,进行简易模式以及专业模式。具体如下:

1)当进行简易模式的时候

  1. 鼠标单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9、.)累次可以设置参与运算的数值。
  2. 鼠标单击“计算器”上的运算符号按钮(+、-、*、=、%)。
  3. 如果需要删除错误的数据,鼠标单击“计算器”上的Delete button按钮。
  4. 如果要清除历史就单击CE按钮。
  5. 此简易模式可以读取历史记录、清除历史记录、保存历史记录,以便于用户在旁边的空白处查看。

2)当进行专业模式的时候

  1. 鼠标单击“计算器”上面的数字按钮(button)(0、1、2、3、4、5、6、7、8、9、.、A、B、C、D、E、F、b、x、^、!、())累次可以设置参与运算的数值。
  2. 鼠标单击“计算器”上的运算符号按钮(content)(+、-、*、=、%、)。
  3. 鼠标单击“计算器”,选择进制(二进制(前缀0b)、八进制(前缀0)、十进制、十六进制(0x))。
  4. 此简易模式也可以读取历史记录、清除历史记录、保存历史记录,展示在旁边的空白格中。
  5. 在专业模式下,还有含有64位数字的二进制,在数字上修改二进制,变可在下方得到相应的八进制、十进制、十六进制。

四、设计原理

详见代码

五、源代码

1.界面

Form1.cs[设计]

 Form2.cs[设计]

 

2. Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;

namespace _1._2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private static List<String> temp = new List<string>();
        private static long tempx = 0;
        private void Add(object sender, EventArgs e)
        {   //数字和符号的Click事件
            Button button = (Button)sender;
            textBox1.Text += button.Text;
        }
        private void Reset(object sender, EventArgs e)
        {   // CE的Click事件
            textBox1.Text = "";
        }
        private void Delete(object sender, EventArgs e)
        {   // ←的Click事件
            //移除最后一个字符
            if (textBox1.TextLength > 0)
                textBox1.Text = textBox1.Text.Remove(textBox1.TextLength - 1);
        }
        private void Equal(object sender, EventArgs e)
        {   // = 的Click事件,计算并显示
            //自动清除历史文件夹
            Cleanf();
            List<string> zhonglist = ToList(textBox1.Text);
            List<string> houlist = houzhui(zhonglist);
            List<string> s = zhonglist;
            s.Add("=");
            s.Add(Calculate(houlist));
            string s1 = string.Join("", s);
            if (temp.Count > 9)//最多存十条记录
            {
                temp.RemoveAt(0);
            }
            temp.Add(s1);
            textBox2.Text = string.Join(",",temp);
            textBox1.Text = Calculate(houlist);
        }
        //中缀转List
        static List<string> ToList(string s)
        {
            List<string> ls = new List<string>();//存放中缀表达式
            String str = "";               //拼接多位数、小数
            char c = ' ';                  //遍历输入的字符
            int i = 0;

            do
            {
                if((s[i] == '-' && i == 0) || (i > 0 && s[i] == '-' && !char.IsDigit(s[i - 1])))//在负数前加零方便后续计算
                {
                    ls.Add("0");
                }
                if (!char.IsDigit(c = s[i])&&c != '.') //如果c不是数字和'.',就加入ls
                {
                    ls.Add(c.ToString());
                    i++;    //i后移
                }
                else//如果是数字,需要考虑多位数
                {
                    str = "";   //先将str清空
                    while (i < s.Length && (char.IsDigit(c = s[i]) || c == '.'))
                    {
                        str += c;
                        i++;
                    }
                    ls.Add(str);
                }
            } while (i < s.Length);
            return ls;
        }
        //中缀改后缀
        static List<string> houzhui(List<string> ls)
        {
            //定义两个栈,一个存临时结果,一个存运算符
            Stack<string> operators = new Stack<string>();
            
            List<string> num = new List<string>();

            //遍历 ls
            foreach (var item in ls)
            {
                Regex regex = new Regex("[+-]?\\d+.?\\d*");//整数和浮点数
                //如果是一个数,则加入num
                if (regex.Match(item).Length > 0)
                {
                    num.Add(item);
                }
                else if (item.Equals("("))//Equals:比较是否相同
                {
                    operators.Push(item);
                }
                else if (item.Equals(")"))
                {
                    //如果是右括号,则依次弹出operators栈顶的运算符,并压入num,直到遇到左括号为止,并将这对括号丢弃
                    while (!operators.Peek().Equals("("))//Peek()返回顶部对象
                    {
                        num.Add(operators.Pop());
                    }
                    operators.Pop();   //将 ( 弹出
                }
                else
                {
                    //当item 的 优先级小于或等于operators栈顶运算符,将operators栈顶的运算符弹出并加入到num中,再次转到operators与operators中新的栈顶运算符比较
                    while (operators.Count != 0 && compare(operators.Peek()) >= compare(item))
                    {
                        num.Add(operators.Pop());
                    }
                    //还需要将 item 压入栈
                    operators.Push(item);
                }
            }

            //将operators中剩余的运算符依次弹出并加入num
            while (operators.Count != 0)
            {
                num.Add(operators.Pop());
            }

            return num;  //按顺序输出就是对应的后缀表达式对应的List
        }
        //运算符优先级
        public static int compare(string operation)
        {
            int res = 0;
            switch (operation)
            {
                case "+":
                    res = 1;
                    break;
                case "-":
                    res = 1;
                    break;
                case "*":
                    res = 2;
                    break;
                case "/":
                    res = 2;
                    break;
                case "%":
                    res = 3;
                    break;
                case "^":
                    res = 4;
                    break;
                case "!":
                    res = 5;
                    break;
                default:
                    Console.WriteLine("不存在该运算符");
                    break;
            }
            return res;
        }
        //计算后缀表达式
        static string Calculate(List<string> ls)
        {
            Regex regex = new Regex("[+-]?\\d+.?\\d*");
            //创建栈
            Stack<string> stack = new Stack<string>();
            //遍历 list
            foreach (var item in ls)
            {
                //使用正则表达式来取出数
                if (regex.Match(item).Length > 0) //如果是数字,就压入栈中
                {
                    stack.Push(regex.Match(item).Value);
                }
                else if (item.Equals("!"))//弹出一个数字进行计算
                {
                    int num1 = int.Parse(stack.Pop());
                    int res = leicheng(num1);
                    stack.Push(res.ToString());
                }
                else    //不是数就弹出两个数字进行计算
                {
                    double num2 = double.Parse(stack.Pop());
                    if (stack.Count == 0)
                    {
                        stack.Push("0");
                    }
                    double num1 = double.Parse(stack.Pop());
                    double res = 0;
                    if (item.Equals("+"))
                    {
                        res = num1 + num2;
                    }
                    else if (item.Equals("-"))
                    {
                        res = num1 - num2;
                    }
                    else if (item.Equals("*"))
                    {
                        res = num1 * num2;
                    }
                    else if (item.Equals("÷"))
                    {
                        res = num1 / num2;
                    }
                    else if (item.Equals("%"))
                    {
                        res = num1 % num2;
                    }
                    else if (item.Equals("^"))
                    {
                        res = Math.Pow(num1, num2);
                    }
                    else
                    {
                        throw new Exception("表达式有误");
                    }
                    stack.Push(res.ToString());
                }
            }

            //最后留在stack中的数据就是运算结果
            return stack.Pop();
        }
        //累乘
        private static int leicheng(int n)
        {
            if(n == 1)
            {
                return n;
            }
            else
            {
                return n * leicheng(n - 1);
            }
        }
        //进制转换
        //二进制的前缀为 0b
        //八进制的前缀为 0
        //十六进制的前缀为 0x
        private void jinzhi2(object sender, EventArgs e)
        {
            String s = textBox1.Text;
            switch(s[0])
            {
                case '0':
                    switch (s[1])
                    {
                        case 'x'://十六转二
                            s = s.Substring(2);//去掉前缀
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 16), 2);//先转十再转二
                            break;
                        default://八转二
                            s = s.Substring(1);
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 8), 2);
                            break;
                    }
                    break;
                default://十转二
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s), 2);
                    break;
            }
        }
        private void jinzhi8(object sender, EventArgs e)
        {
            String s = textBox1.Text;
            switch (s[0])
            {
                case '0':
                    switch (s[1])
                    {
                        case 'x'://十六转八
                            s = s.Substring(2);//去掉前缀
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 16), 8);//先转十再转八
                            break;
                        case 'b'://二转八
                            s = s.Substring(2);
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 2), 8);
                            break;
                    }
                    break;
                default://十转八
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s), 8);
                    break;
            }
        }
        private void jinzhi10(object sender, EventArgs e)
        {
            String s = textBox1.Text;
            
            switch (s[1])
            {
                case 'x'://十六转十
                    s = s.Substring(2);//去掉前缀
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s, 16));
                    break;
                case 'b'://二转十
                    s = s.Substring(2);
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s, 2));
                    break;
                default://八转十
                    s = s.Substring(1);
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s, 8));
                    break;
            }
        }
        private void jinzhi16(object sender, EventArgs e)
        {
            String s = textBox1.Text;
            switch (s[0])
            {
                case '0':
                    switch (s[1])
                    {
                        case 'b'://二转十六
                            s = s.Substring(2);//去掉前缀
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 2), 16); ;//先转十再转十六
                            break;
                        default://八转十六
                            s = s.Substring(1);
                            textBox1.Text = Convert.ToString(Convert.ToInt32(s, 8), 16);
                            break;
                    }
                    break;
                default://十转十六
                    textBox1.Text = Convert.ToString(Convert.ToInt32(s), 16);
                    break;
            }
        }
        private void Reset2(object sender, EventArgs e)
        {   // 清除历史记录的Click事件
            textBox2.Text = "";
            temp.Clear();
            Cleanf();
        }
        //清空历史记录文件
        private void Cleanf()
        {
            File.Delete("历史记录1.txt");
            FileStream f = File.Create("历史记录1.txt");
            f.Close();
        }
        //读取文件到历史记录
        private void Readf(object sender, EventArgs e)
        {   //读取历史记录的Click事件
            StreamReader sr = new StreamReader("历史记录1.txt");
            string s;
            if((s = sr.ReadLine()) != null)
            {
                String[] s1 = s.Split(',');
                List<String> s2 = new List<string>(s1);
                temp = s2;
                textBox2.Text = string.Join(",", temp);
            }
            sr.Close();
        }
        //打开文件,
        private void Openf(object sender, EventArgs e)
        {  //保存历史记录的Click事件
            StreamWriter sw = new StreamWriter("历史记录1.txt");
            sw.WriteLine(string.Join(",", temp));
            sw.Close();
        }

        //以下是位切换键盘设计代码,不会高级方法,拖了64个label控制0和1

        private void jisuan(string s,int n)
        {
            long t = 1;
            for(int i = 0;i < n - 1;i++)
            {
                t *= 2;
            }
            if(s == "0")
            {
                tempx -= t;
            }
            else
            {
                tempx += t;
            }

            label72.Text = Convert.ToString(tempx , 8);
            label73.Text = Convert.ToString(tempx);
            label74.Text = Convert.ToString(tempx, 16);
        }
        private void ex1(object sender, EventArgs e)
        {
            if(label1.Text == "0")
            {
                label1.Text = "1";
            }
            else
            {
                label1.Text = "0";
            }
            jisuan(label1.Text,1);
        }

        private void ex2(object sender, EventArgs e)
        {
            if (label2.Text == "0")
            {
                label2.Text = "1";
            }
            else
            {
                label2.Text = "0";
            }
            jisuan(label2.Text, 2);
        }

        private void ex3(object sender, EventArgs e)
        {
            if (label3.Text == "0")
            {
                label3.Text = "1";
            }
            else
            {
                label3.Text = "0";
            }
            jisuan(label3.Text, 3);
        }

        private void ex4(object sender, EventArgs e)
        {
            if (label4.Text == "0")
            {
                label4.Text = "1";
            }
            else
            {
                label4.Text = "0";
            }
            jisuan(label4.Text, 4);
        }

        private void ex5(object sender, EventArgs e)
        {
            if (label5.Text == "0")
            {
                label5.Text = "1";
            }
            else
            {
                label5.Text = "0";
            }
            jisuan(label5.Text, 5);
        }

        private void ex6(object sender, EventArgs e)
        {
            if (label6.Text == "0")
            {
                label6.Text = "1";
            }
            else
            {
                label6.Text = "0";
            }
            jisuan(label6.Text, 6);
        }

        private void ex7(object sender, EventArgs e)
        {
            if (label7.Text == "0")
            {
                label7.Text = "1";
            }
            else
            {
                label7.Text = "0";
            }
            jisuan(label7.Text, 7);
        }

        private void ex8(object sender, EventArgs e)
        {
            if (label8.Text == "0")
            {
                label8.Text = "1";
            }
            else
            {
                label8.Text = "0";
            }
            jisuan(label8.Text, 8);
        }

        private void ex9(object sender, EventArgs e)
        {
            if (label9.Text == "0")
            {
                label9.Text = "1";
            }
            else
            {
                label9.Text = "0";
            }
            jisuan(label9.Text, 9);
        }

        private void ex10(object sender, EventArgs e)
        {
            if (label10.Text == "0")
            {
                label10.Text = "1";
            }
            else
            {
                label10.Text = "0";
            }
            jisuan(label10.Text, 10);
        }

        private void ex11(object sender, EventArgs e)
        {
            if (label11.Text == "0")
            {
                label11.Text = "1";
            }
            else
            {
                label11.Text = "0";
            }
            jisuan(label11.Text, 11);
        }

        private void ex12(object sender, EventArgs e)
        {
            if (label12.Text == "0")
            {
                label12.Text = "1";
            }
            else
            {
                label12.Text = "0";
            }
            jisuan(label12.Text, 12);
        }

        private void ex13(object sender, EventArgs e)
        {
            if (label13.Text == "0")
            {
                label13.Text = "1";
            }
            else
            {
                label13.Text = "0";
            }
            jisuan(label13.Text, 13);
        }

        private void ex14(object sender, EventArgs e)
        {
            if (label14.Text == "0")
            {
                label14.Text = "1";
            }
            else
            {
                label14.Text = "0";
            }
            jisuan(label14.Text, 14);
        }

        private void ex15(object sender, EventArgs e)
        {
            if (label15.Text == "0")
            {
                label15.Text = "1";
            }
            else
            {
                label15.Text = "0";
            }
            jisuan(label15.Text, 15);
        }

        private void ex16(object sender, EventArgs e)
        {
            if (label16.Text == "0")
            {
                label16.Text = "1";
            }
            else
            {
                label16.Text = "0";
            }
            jisuan(label16.Text, 16);
        }

        private void ex17(object sender, EventArgs e)
        {
            if (label17.Text == "0")
            {
                label17.Text = "1";
            }
            else
            {
                label17.Text = "0";
            }
            jisuan(label17.Text, 17);
        }

        private void ex18(object sender, EventArgs e)
        {
            if (label18.Text == "0")
            {
                label18.Text = "1";
            }
            else
            {
                label18.Text = "0";
            }
            jisuan(label18.Text, 18);
        }

        private void ex19(object sender, EventArgs e)
        {
            if (label19.Text == "0")
            {
                label19.Text = "1";
            }
            else
            {
                label19.Text = "0";
            }
            jisuan(label19.Text, 19);
        }

        private void ex20(object sender, EventArgs e)
        {
            if (label20.Text == "0")
            {
                label20.Text = "1";
            }
            else
            {
                label20.Text = "0";
            }
            jisuan(label20.Text, 20);
        }

        private void ex21(object sender, EventArgs e)
        {
            if (label21.Text == "0")
            {
                label21.Text = "1";
            }
            else
            {
                label21.Text = "0";
            }
            jisuan(label21.Text, 21);
        }

        private void ex22(object sender, EventArgs e)
        {
            if (label22.Text == "0")
            {
                label22.Text = "1";
            }
            else
            {
                label22.Text = "0";
            }
            jisuan(label22.Text, 22);
        }

        private void ex23(object sender, EventArgs e)
        {
            if (label23.Text == "0")
            {
                label23.Text = "1";
            }
            else
            {
                label23.Text = "0";
            }
            jisuan(label23.Text, 23);
        }

        private void ex24(object sender, EventArgs e)
        {
            if (label24.Text == "0")
            {
                label24.Text = "1";
            }
            else
            {
                label24.Text = "0";
            }
            jisuan(label24.Text, 24);
        }

        private void ex25(object sender, EventArgs e)
        {
            if (label25.Text == "0")
            {
                label25.Text = "1";
            }
            else
            {
                label25.Text = "0";
            }
            jisuan(label25.Text, 25);
        }

        private void ex26(object sender, EventArgs e)
        {
            if (label26.Text == "0")
            {
                label26.Text = "1";
            }
            else
            {
                label26.Text = "0";
            }
            jisuan(label26.Text, 26);
        }

        private void ex27(object sender, EventArgs e)
        {
            if (label27.Text == "0")
            {
                label27.Text = "1";
            }
            else
            {
                label27.Text = "0";
            }
            jisuan(label27.Text, 27);
        }

        private void ex28(object sender, EventArgs e)
        {
            if (label28.Text == "0")
            {
                label28.Text = "1";
            }
            else
            {
                label28.Text = "0";
            }
            jisuan(label28.Text, 28);
        }

        private void ex29(object sender, EventArgs e)
        {
            if (label29.Text == "0")
            {
                label29.Text = "1";
            }
            else
            {
                label29.Text = "0";
            }
            jisuan(label29.Text, 29);
        }

        private void ex30(object sender, EventArgs e)
        {
            if (label30.Text == "0")
            {
                label30.Text = "1";
            }
            else
            {
                label30.Text = "0";
            }
            jisuan(label30.Text, 30);
        }

        private void ex31(object sender, EventArgs e)
        {
            if (label31.Text == "0")
            {
                label31.Text = "1";
            }
            else
            {
                label31.Text = "0";
            }
            jisuan(label31.Text, 31);
        }
        private void ex32(object sender, EventArgs e)
        {
            if (label32.Text == "0")
            {
                label32.Text = "1";
            }
            else
            {
                label32.Text = "0";
            }
            jisuan(label32.Text, 32);
        }
        private void ex33(object sender, EventArgs e)
        {
            if (label33.Text == "0")
            {
                label33.Text = "1";
            }
            else
            {
                label33.Text = "0";
            }
            jisuan(label33.Text, 33);
        }
        private void ex34(object sender, EventArgs e)
        {
            if (label34.Text == "0")
            {
                label34.Text = "1";
            }
            else
            {
                label34.Text = "0";
            }
            jisuan(label34.Text, 34);
        }
        private void ex35(object sender, EventArgs e)
        {
            if (label35.Text == "0")
            {
                label35.Text = "1";
            }
            else
            {
                label35.Text = "0";
            }
            jisuan(label35.Text, 35);
        }
        private void ex36(object sender, EventArgs e)
        {
            if (label36.Text == "0")
            {
                label36.Text = "1";
            }
            else
            {
                label36.Text = "0";
            }
            jisuan(label36.Text, 36);
        }
        private void ex37(object sender, EventArgs e)
        {
            if (label37.Text == "0")
            {
                label37.Text = "1";
            }
            else
            {
                label37.Text = "0";
            }
            jisuan(label37.Text, 37);
        }
        private void ex38(object sender, EventArgs e)
        {
            if (label38.Text == "0")
            {
                label38.Text = "1";
            }
            else
            {
                label38.Text = "0";
            }
            jisuan(label38.Text, 38);
        }
        private void ex39(object sender, EventArgs e)
        {
            if (label39.Text == "0")
            {
                label39.Text = "1";
            }
            else
            {
                label39.Text = "0";
            }
            jisuan(label39.Text, 39);
        }
        private void ex40(object sender, EventArgs e)
        {
            if (label40.Text == "0")
            {
                label40.Text = "1";
            }
            else
            {
                label40.Text = "0";
            }
            jisuan(label40.Text, 40);
        }
        private void ex41(object sender, EventArgs e)
        {
            if (label41.Text == "0")
            {
                label41.Text = "1";
            }
            else
            {
                label41.Text = "0";
            }
            jisuan(label41.Text, 41);
        }
        private void ex42(object sender, EventArgs e)
        {
            if (label42.Text == "0")
            {
                label42.Text = "1";
            }
            else
            {
                label42.Text = "0";
            }
            jisuan(label42.Text, 42);
        }
        private void ex43(object sender, EventArgs e)
        {
            if (label43.Text == "0")
            {
                label43.Text = "1";
            }
            else
            {
                label43.Text = "0";
            }
            jisuan(label43.Text, 43);
        }
        private void ex44(object sender, EventArgs e)
        {
            if (label44.Text == "0")
            {
                label44.Text = "1";
            }
            else
            {
                label44.Text = "0";
            }
            jisuan(label44.Text, 44);
        }
        private void ex45(object sender, EventArgs e)
        {
            if (label45.Text == "0")
            {
                label45.Text = "1";
            }
            else
            {
                label45.Text = "0";
            }
            jisuan(label45.Text, 45);
        }
        private void ex46(object sender, EventArgs e)
        {
            if (label46.Text == "0")
            {
                label46.Text = "1";
            }
            else
            {
                label46.Text = "0";
            }
            jisuan(label46.Text, 46);
        }
        private void ex47(object sender, EventArgs e)
        {
            if (label47.Text == "0")
            {
                label47.Text = "1";
            }
            else
            {
                label47.Text = "0";
            }
            jisuan(label47.Text, 47);
        }
        private void ex48(object sender, EventArgs e)
        {
            if (label48.Text == "0")
            {
                label48.Text = "1";
            }
            else
            {
                label48.Text = "0";
            }
            jisuan(label48.Text, 48);
        }
        private void ex49(object sender, EventArgs e)
        {
            if (label49.Text == "0")
            {
                label49.Text = "1";
            }
            else
            {
                label49.Text = "0";
            }
            jisuan(label49.Text, 9);
        }
        private void ex50(object sender, EventArgs e)
        {
            if (label50.Text == "0")
            {
                label50.Text = "1";
            }
            else
            {
                label50.Text = "0";
            }
            jisuan(label50.Text, 50);
        }
        private void ex51(object sender, EventArgs e)
        {
            if (label51.Text == "0")
            {
                label51.Text = "1";
            }
            else
            {
                label51.Text = "0";
            }
            jisuan(label51.Text, 51);
        }
        private void ex52(object sender, EventArgs e)
        {
            if (label52.Text == "0")
            {
                label52.Text = "1";
            }
            else
            {
                label52.Text = "0";
            }
            jisuan(label52.Text, 52);
        }
        private void ex53(object sender, EventArgs e)
        {
            if (label53.Text == "0")
            {
                label53.Text = "1";
            }
            else
            {
                label53.Text = "0";
            }
            jisuan(label53.Text, 53);
        }
        private void ex54(object sender, EventArgs e)
        {
            if (label54.Text == "0")
            {
                label54.Text = "1";
            }
            else
            {
                label54.Text = "0";
            }
            jisuan(label54.Text, 54);
        }
        private void ex55(object sender, EventArgs e)
        {
            if (label55.Text == "0")
            {
                label55.Text = "1";
            }
            else
            {
                label55.Text = "0";
            }
            jisuan(label55.Text, 55);
        }
        private void ex56(object sender, EventArgs e)
        {
            if (label56.Text == "0")
            {
                label56.Text = "1";
            }
            else
            {
                label56.Text = "0";
            }
            jisuan(label56.Text, 56);
        }
        private void ex57(object sender, EventArgs e)
        {
            if (label57.Text == "0")
            {
                label57.Text = "1";
            }
            else
            {
                label57.Text = "0";
            }
            jisuan(label57.Text, 57);
        }
        private void ex58(object sender, EventArgs e)
        {
            if (label58.Text == "0")
            {
                label58.Text = "1";
            }
            else
            {
                label58.Text = "0";
            }
            jisuan(label58.Text, 58);
        }
        private void ex59(object sender, EventArgs e)
        {
            if (label59.Text == "0")
            {
                label59.Text = "1";
            }
            else
            {
                label59.Text = "0";
            }
            jisuan(label59.Text, 59);
        }
        private void ex60(object sender, EventArgs e)
        {
            if (label60.Text == "0")
            {
                label60.Text = "1";
            }
            else
            {
                label60.Text = "0";
            }
            jisuan(label60.Text, 60);
        }
        private void ex61(object sender, EventArgs e)
        {
            if (label61.Text == "0")
            {
                label61.Text = "1";
            }
            else
            {
                label61.Text = "0";
            }
            jisuan(label61.Text, 61);
        }
        private void ex62(object sender, EventArgs e)
        {
            if (label62.Text == "0")
            {
                label62.Text = "1";
            }
            else
            {
                label62.Text = "0";
            }
            jisuan(label62.Text, 62);
        }
        private void ex63(object sender, EventArgs e)
        {
            if (label63.Text == "0")
            {
                label63.Text = "1";
            }
            else
            {
                label63.Text = "0";
            }
            jisuan(label63.Text, 63);
        }
        private void ex64(object sender, EventArgs e)
        {
            if (label64.Text == "0")
            {
                label64.Text = "1";
            }
            else
            {
                label64.Text = "0";
            }
            jisuan(label64.Text, 64);
        }

        private void label79_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }
        //
    }
}

3.Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;

namespace _1._2
{


    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private static List<String> temp = new List<string>();

        private void button2_Click(object sender, EventArgs e)//CE按钮
        {
            textBox1.Text = "";
        }

        private void button5_Click(object sender, EventArgs e)
        {

        }

        private void Add(object sender, EventArgs e)
        {   //数字和符号的Click事件
            Button button = (Button)sender;
            textBox1.Text += button.Text;
        }

        private void button8_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)//delect按钮
        {
            if (textBox1.TextLength > 0)
                textBox1.Text = textBox1.Text.Remove(textBox1.TextLength - 1);
        }

        private void button9_Click(object sender, EventArgs e)//“=”按钮
        {
            Cleanf();
            List<string> zhonglist = ToList(textBox1.Text);
            List<string> houlist = houzhui(zhonglist);
            List<string> s = zhonglist;
            s.Add("=");
            s.Add(Calculate(houlist));
            string s1 = string.Join("", s);
            if (temp.Count > 9)//最多存十条记录
            {
                temp.RemoveAt(0);
            }
            temp.Add(s1);
            textBox2.Text = string.Join(",", temp);
            textBox1.Text = Calculate(houlist);
        }
        //中缀转List
        static List<string> ToList(string s)
        {
            List<string> ls = new List<string>();//存放中缀表达式
            String str = "";               //拼接多位数、小数
            char c = ' ';                  //遍历输入的字符
            int i = 0;

            do
            {
                if ((s[i] == '-' && i == 0) || (i > 0 && s[i] == '-' && !char.IsDigit(s[i - 1])))//在负数前加零方便后续计算
                {
                    ls.Add("0");
                }
                if (!char.IsDigit(c = s[i]) && c != '.') //如果c不是数字和'.',就加入ls
                {
                    ls.Add(c.ToString());
                    i++;    //i后移
                }
                else//如果是数字,需要考虑多位数
                {
                    str = "";   //先将str清空
                    while (i < s.Length && (char.IsDigit(c = s[i]) || c == '.'))
                    {
                        str += c;
                        i++;
                    }
                    ls.Add(str);
                }
            } while (i < s.Length);
            return ls;
        }
        static List<string> houzhui(List<string> ls)
        {
            //定义两个栈,一个存临时结果,一个存运算符
            Stack<string> operators = new Stack<string>();

            List<string> num = new List<string>();

            //遍历 ls
            foreach (var item in ls)
            {
                Regex regex = new Regex("[+-]?\\d+.?\\d*");//整数和浮点数
                //如果是一个数,则加入num
                if (regex.Match(item).Length > 0)
                {
                    num.Add(item);
                }
                else if (item.Equals("("))//Equals:比较是否相同
                {
                    operators.Push(item);
                }
                else if (item.Equals(")"))
                {
                    //如果是右括号,则依次弹出operators栈顶的运算符,并压入num,直到遇到左括号为止,并将这对括号丢弃
                    while (!operators.Peek().Equals("("))//Peek()返回顶部对象
                    {
                        num.Add(operators.Pop());
                    }
                    operators.Pop();   //将 ( 弹出
                }
                else
                {
                    //当item 的 优先级小于或等于operators栈顶运算符,将operators栈顶的运算符弹出并加入到num中,再次转到operators与operators中新的栈顶运算符比较
                    while (operators.Count != 0 && compare(operators.Peek()) >= compare(item))
                    {
                        num.Add(operators.Pop());
                    }
                    //还需要将 item 压入栈
                    operators.Push(item);
                }
            }

            //将operators中剩余的运算符依次弹出并加入num
            while (operators.Count != 0)
            {
                num.Add(operators.Pop());
            }

            return num;  //按顺序输出就是对应的后缀表达式对应的List
        }
        //运算符优先级
        public static int compare(string operation)
        {
            int res = 0;
            switch (operation)
            {
                case "+":
                    res = 1;
                    break;
                case "-":
                    res = 1;
                    break;
                case "^":
                    res = 3;
                    break;
                case "*":
                    res = 2;
                    break;
                case "÷":
                    res = 3;
                    break;
                case "%":
                    res = 4;
                    break;
                case "!":
                    res = 5;
                    break;
                default:
                    Console.WriteLine("不存在该运算符");
                    break;
            }
            return res;
        }
        //计算后缀表达式
        static string Calculate(List<string> ls)
        {
            Regex regex = new Regex("[+-]?\\d+.?\\d*");
            //创建栈
            Stack<string> stack = new Stack<string>();
            //遍历 list
            foreach (var item in ls)
            {
                //使用正则表达式来取出数
                if (regex.Match(item).Length > 0) //如果是数字,就压入栈中
                {
                    stack.Push(regex.Match(item).Value);
                }
                else    //不是数就弹出两个数字进行计算
                {
                    double num2 = double.Parse(stack.Pop());
                    double num1 = double.Parse(stack.Pop());
                    double res = 0;
                    if (item.Equals("+"))
                    {
                        res = num1 + num2;
                    }
                    else if (item.Equals("-"))
                    {
                        res = num1 - num2;
                    }
                    else if (item.Equals("×"))
                    {
                        res = num1 * num2;
                    }
                    else if (item.Equals("÷"))
                    {
                        res = num1 / num2;
                    }
                    else if (item.Equals("%"))
                    {
                        res = num1 % num2;
                    }
                    else
                    {
                        throw new Exception("表达式有误");
                    }
                    stack.Push(res.ToString());
                }
            }

            //最后留在stack中的数据就是运算结果
            return stack.Pop();
        }
        private void Cleanf()
        {
            File.Delete("历史记录2.txt");
            FileStream f = File.Create("历史记录2.txt");
            f.Close();
        }

        private void button22_Click(object sender, EventArgs e)//“读取历史”按钮
        {
            StreamReader sr = new StreamReader("历史记录2.txt");
            String s;
            if ((s = sr.ReadLine() )!= null)
            {
                String[] s1 = s.Split(',');
                List<String> s2 = new List<string>(s1);
                temp = s2;
                textBox2.Text = string.Join(",", temp);
            }
            sr.Close();
        }

        private void button23_Click(object sender, EventArgs e)//“清除历史记录”
        {
            textBox2.Text = "";
            temp.Clear();
            Cleanf();
        }

        private void button24_Click(object sender, EventArgs e)
        {
            StreamWriter sw = new StreamWriter("历史记录2.txt");
            sw.WriteLine(string.Join(",", temp));
            sw.Close();
        }

        private void label1_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }
    }
    }

3.Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace _1._2
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //跳转窗口


         Form2 EasyModel = new Form2();
         Form1 PerModel = new Form1(); 
         EasyModel.ShowDialog();
        for(int i=0;i<1;i++)
            {
                if (EasyModel.DialogResult == DialogResult.OK)
                {
                    PerModel.ShowDialog();
                }
                if (PerModel.DialogResult == DialogResult.Cancel)
                {
                    EasyModel.ShowDialog();
                    i = -1;
                }
             
            }
      

        }
    }
}

简易计算器设计
m0_58822223的博客
06-07 826
一、简易计算器设计主要包含三个input输入框,两个button按钮,以及一个下拉选择框。 目标效果如下: 二、以下为解析
python简易计算器报告_用 Python 实现简易计算器 ( 下 )
weixin_39521835的博客
02-21 1519
上一篇讲了 用 Python 实现一个计算器的前期准备,从新建项目到 PyQt5安装、配置和使用,最后完成了一个比较丑的计算器界面布局。本篇文章开始详细讲解后续实现计算器功能的讲解。主要涉及的知识点有:1、Python 变量的认识;2、Python 运算符的知识;3、Python 的数据类型的理解和运用;4、PyQt5 designer 添加 CSS 样式等高级点的用法;5、将 Python 代码...
课程设计简易计算器设计
11-20
课程程设计,简易议计算器!实验已经成功目录 1、引言……………………………………………………………………………………………… 2 1.1 计算器意义………………………………………………………………………………2 1.2 电子计算器的特殊键 …………………………………………………………………2 2 、单片机概述.……………………………………………………………………………………2 3 、芯片简介 ………………………………………………………………………………………3 3.1 MSC-51芯片简介…………………………………………………………………………3 4 、相关知识 ………………………………………………………………………………………6 4.1数码管显示…………………………………………………………………………………6 4.2矩阵按键 …………………………………………………………………………………6 5 、计算器硬件电路设 …………………………………………………………………………7 6 、计算器程序设计………………………………………………………………………………7 6.1存储单元分配………………………………………………………………………………7 6.2 主程序设计…………………………………………………………………………………7 6.3 数码管显示数据转换子程序CONV ……………………………………………………7 6.4 数码管动态显示子程序………………………………………………………………… 7 7 、系统硬件设计……………………………………………………………………………………7 7.1 系统总框图如下……………………………………………………………………………8 7.2 计算器硬件线路图…………………………………………………………………………8 7.3 系统工作原理 ………………………………………………………………………………9 8、汇编语言程序源代码……………………………………………………………………………10 9 、结语………………………………………………………………………………………………17 10、设计实物图……………………………………………………………………………18 摘要 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 关键词: 单片机 计算器 范围 加减乘除 1 引言 1.1 计算器的历史 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 1.2 电子计算器的特殊键 在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。除了这些按键,还有一些特殊键,可以使计算更加简便迅速。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。 3 芯片简介 3.1 MSC-51芯片简介 MCS-51单片机内部结构 AT89C51是与MCS-51系列单片机兼容的典型产品,我们以这一代表性的机型进行系统的讲解。 AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: •中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 •数据存储器(RAM) AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 图1 •程序存储器(ROM): AT89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 •定时/计数器(ROM): AT89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 •并行输入输出(I/O)口: AT89C51共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。 •全双工串行口: AT89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 •中断系统: AT89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。 •时钟电路: AT89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但AT89C51单片机需外置振荡电容。 单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。 下图是MCS-51系列单片机的内部结构示意图2。 图2 MCS-51的引脚说明: MCS-51系列单片机中的8031、AT89C51及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: MCS-51的引脚说明: MCS-51系列单片机中的8031、AT89C51及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3 图3 Pin9:RESET/Vpd复位信号复用脚,当AT89C51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,AT89C51的初始态。 AT89C51的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 图4 •Pin30:ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。 如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。 •Pin29: 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。 •Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。 在编程时,EA/Vpp脚还需加上21V的编程电压。 4 相关知识 4.1数码管显示 在本任务中用4位数码管显示当前数值的千,百,十,个,由于数码管个数多,如采用静态显示方式,则占用单片机的I/O口线太多,如果用定时器/计数器的串行移位寄存器工作方式及外接串入并出移位寄存器74LS164的方式,则电路复杂。所以,在数码管个数较多时,常采用动态显示方式。 如图1-1所示为单片机应用系统中的一种数码管动态显示电路图,4位数码管的相同段并联在一起,由一个8位I/O(P1口)输出字形码控制显示某一字形,每个数码管的公共端由另外一个I/O口(P0口)输出的字位码控制,即数码管显示的字形是由单片机I/O口输出的字形码确定,而哪个数码管点亮是由单片机I/O口输出的字位码确定的。4个数码管分时轮流循环点亮,在同一时刻只有1个数码管点亮,但由于数码管具有余辉特性及人眼具有视觉暂留特性,所以适当地选取循环扫描频率,看上去所有数码管是同时点亮的,察觉不出闪烁现象。动态显示方式所接数码管不能太多,否则会因每个数码管所分配的实际导通时间太少,使得数码管的亮度不足。在本任务中,为了简便,字形码和字位码都没由加驱动电路,在实际应用中应加驱动电路。数码管有共阴极和共阳极两种,对于共阳数码管,字形驱动输出0有效,字位驱动输出1有效;而对于共阴数码管则相反,即:字形驱动输出1有效,字位驱动输出0有效。 4.2矩阵按键 键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。 矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。 本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。 本键盘扫描子程序名叫key,每次要扫描时用lcall key调用即可。 5 计算器硬件电路设计 AT89C51单片机的P2口作键盘口,其中P2.4-P2.7为键盘扫描输出线,P2.0-P2.3为键盘扫描输入线。键盘由4*4共16个按键组成,10个数字键(由0-9组成)5个运算符号(加减乘除等于)组成,1个清除键(作用相当于整体复位)。4个数码管用于显示当前数值的千,百,十,个,采用动态显示方式,P1口接4个数码管的七段,P0口分别接4个数码管的公共端,P1口输出数码管的字形码,P0口输出数码管的字位码。 6 计算器程序设计 6.1存储单元分配 30H单元:数值个位显示单元;31H单元:数值十位显示单元;32H单元:数值百位显示单元;33H单元:数值千位显示单元;23H单元:第一操作数存储单元;24H单元:第二操作数存储单元;25H单元:键值暂存单元;27H单元:清除键状态;34H-37H单元:结果数据转换暂存单元;38H-39H单元:结果高低8位暂存单元;R5单元:操作数计数单元;R4单元:操作数数值位数计数单元;R3单元:运算符号存储单元。 6.2 主程序设计 主程序进行程序中用到的一些存储单元的初始化,数值显示和4*4键盘扫描。首先,进行存储单元初始化,给数码管显示单元30H-33H赋予“0000”字形数据,将数值计数单元,存储单元,23H-25H,34H-37H,38H,39H,3AH,3BH,3CH,赋予初值零。之后,调用键盘扫描子程序,和数码管显示数据转换程序,数码管动态显示子程序。主程序不断进行键盘扫描,数码管显示数据转换子程序和动态显示子程序。 6.3 数码管显示数据转换子程序CONV 由于数值单元存放的是二进制数,而用户熟悉的是十进制数,所以应将数值单元中的二进制转换为十进制数,即BCD码。要通过数码管显示出当前数值,还必须将BCD码进一步转换为七段码,转换的最终结果数据存放于显示缓冲区30H-33H单元中,其中30H单元存放数值的个位七段码,31H单元存放数值的十位七段码,32H单元存放数值的百位七段码,33H单元存放数值的千位七段码。 6.4 数码管动态显示子程序 本任务由P1口输出字形码,P0口输出字位码。先将存放于30H单元的数值个位七段码由P1口输出,同时P0口输出使数值个位显示数码管点亮的字位码。由于采用的是共阳数码管,所以只有该位数码管对应的P0.0为1,其他位P0.1-P0.3位0,点亮延时10MS。然后P1口输出数值十位七段码,P0.1位1,数值十位数码管点亮,延时10MS。接着P1口输出数值百位七段码,P0.2为1,数值百位数码管点亮,延时10MS。最后P1口输出数值千位七段码,P0.3为1,数值千位数码管点亮,延时10MS。 7 系统硬件设计 选用设备AT89C51单片机一片,选用设备:AT89C51单片机一片,17个键盘,4位共阳极的七段数码管一个,连线若干,电容3个,电阻5个,晶振1个。 7.1 系统总框图如下:
简易计算器设计
Grit的博客
12-23 2167
设计旨在编写一简易计算机,可以进行:“加”“减”“乘”“除”的计算。 //简易计算机的设计 //双目运算 #include<stdio.h> int Add(int a, int b); int Sub(int a, int b); int Mul(int a, int b); double Div(int a, int b); void main() { while(1) { int a,b; char temp; printf("请输入两个待处理的数字:\n");
计算器设计
10-26 194
做软件这个行业,我们必须知道,用户的需求是不断变化的,有时候,用户提的要求可能非常不过分,只是改动一些表面的小地方。但是面对已完成的代码,却是需要几乎重头来过的尴尬,实在痛苦不堪。 之所以会出现这种状况,就是因为我们原先所写的程序,不容易维护,灵活性差,不容易扩展,更谈不上复用了。 面向对象分析设计编程思想,通过封装、继承、多态把程序的耦合度降低,将功能按块儿进行划分,降低彼此之间的...
简单计算器设计
03-27
NULL 博文链接:https://feifeiyu1000.iteye.com/blog/1172664
课程作业:基于C#winform的简易计算器设计
最新发布
05-11
在本课程作业中,我们将探讨如何使用C#编程语言和Windows Forms(Winform)框架来设计一个简易的计算器。这个计算器不仅支持基本的数学运算,如加法、减法、乘法和除法,还增加了对小数运算、清零复位、括号运算以及...
C#-简单计算器.zip
07-01
这个计算器是为初学者设计的,特别是那些正在进行课程设计或学习C#基础的学员。它利用Microsoft Visual Studio 2017(VS2017)作为集成开发环境(IDE),提供了加、减、乘、除等基本的数学运算功能。 C#是一种面向...
c语言课程设计简易计算器,简易计算器课程设计 帮忙写简单计算器课程设计...
weixin_42357837的博客
05-20 818
帮忙写简单计算器课程设计书繁华若真如一梦,过而无痕多好,人就不必失意,只当醉了一场,醒来仍过平淡的生活。程序 #include #include //定义atlf函数 #include 简介下的 要分享是什么要想幸福一点,心就要简单一点;要想洒脱一点,对生活要分享就简单一点。分享数字电路课程设计简易计算器》。。。。。。小弟学电子信息的,这学期要做课程设计,不怎么会。请教高手们 最好是成设计要...
数据结构课程设计-----简易计算器
03-05
在这个项目中,我们关注的是“简易计算器”的实现,这是一个常见的课程设计任务,旨在结合数据结构的知识来解决实际问题。这个简易计算器的开发通常会涉及解析、计算表达式以及错误处理等核心功能。 首先,我们要...
简易计算器(c语言课程设计
07-25
简易计算器(c语言课程设计简易计算器(c语言课程设计简易计算器(c语言课程设计简易计算器(c语言课程设计简易计算器(c语言课程设计
简易计算器课程设计
09-07
设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。
c#设计的计算器程序
06-05
c#设计的简单实用计算器程序
简易计算器--课程设计
06-07
可以包含加减乘除等运算(例:(12+45)*4-4/2),然后正确求出其值,将计算结果保存到文件,能进行以下运算:加、减、乘、除;幂运算;三角函数;任意进制转换;有括号
一个简单的计算器设计
09-20
一个简单的计算器设计 可视化程序编程环境 课 程 设 计
C#计算器设计
吕小威的博客
06-11 6108
C#计算器设计 1.掌握计算器界面设计的方法。 2.掌握和分析需求,并根据需求实现相应的功能 。 3.熟悉系统调试等相关能力,形成初步的有实用意义的计算器程序。 计算器运行结果如下: public static List<char> inputStr = new List<char>(1000); //用户的输入 public Form1() ...
计算器的设计和实现
封苧的博客
12-01 2638
计算器的设计和实现 实现思路 1.界面设计 2.实现功能函数 3.重构布局代码 4.按键回调函数绑定 具体实现过程 一、选择语言 考虑到个人没有接触过C++图形界面的操作,故一开始选择的是JAVA。但在实际设计过程中屡屡碰壁,没有实现“(”、“)”的具体功能,或在界面操作上有所障碍,最后选择了Python。 二、实现基本窗口 创建一个400x400的窗口,并且设置标题。 下面展示一些 内联代码片。 // A code block var foo = 'bar'; // An highlighted blo
写文章

热门文章

  • 高校学籍管理系统 _数据库系统概论课程设计 28618
  • 学生考勤管理系统设计_c++课程设计 12462
  • 算术表达式求值的程序设计与实现_数据结构课程设计 9448
  • 简易计算器的设计_C#课程设计 4070
  • 进出口商品管理系统_java课程设计 576

分类专栏

  • 课程设计 5篇

最新评论

  • 学生考勤管理系统设计_c++课程设计

    2401_83304939: 为什么学生信息录入了 但是考勤信息录不进去表情包

  • 学生考勤管理系统设计_c++课程设计

    2401_83304939: 我也是这个问题考勤信息录入不了

  • 学生考勤管理系统设计_c++课程设计

    熹熹大人: 没有做前端页面

  • 学生考勤管理系统设计_c++课程设计

    星周星星: 现在搞好了吗你表情包

  • 学生考勤管理系统设计_c++课程设计

    2401_83304939: 有用户登录界面吗

最新文章

  • 进出口商品管理系统_java课程设计
  • 学生考勤管理系统设计_c++课程设计
  • 算术表达式求值的程序设计与实现_数据结构课程设计
2022年3篇
2021年2篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王商丘seo网站优化怎么选网站推广优化公司济南网站优化公司哪家好南阳网站优化招商网站关键字优化快排黄南湖南网站优化推广网站优化需要哪些工具江门德阳网站优化服务淘宝客网站怎么做优化芜湖网站seo优化服务网站的优化都择火14星规范搭建好网站后如何优化界面望江网站优化公司推荐浙江优化网站排名费用销售类网站如何优化安溪网站优化推广青岛智能网站优化制作新网站优化分析牡丹江专业的企业网站优化江苏网站优化方式开封网站优化地址怎样优化网站搜索关键词快速网站优化计划响应式网站适合优化安庆网站优化公司报价网站点击优化普陀区专业网站优化邳州网站推广优化价格福州搜索网站优化附近网站优化推广公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化