基于Proteus的C51远程计算器

基于Proteus的C51远程计算器

一、具体要求:
1、 主机的矩阵键盘输入数和运算符号,从机显示运算结果
2、 主从单片机串行通信系统,并在 LCD 上显示运算内容及结果

二、实验要点:
1、按键扫描
2、串口通信
3、字符串数据处理
4、LCD实时显示

三、设计方案:

1、主机通过扫描矩阵按键,返回对应数据,并经程序处理后将字符通过串口发送给从机,主机并不执行其他功能。

2、从机接收串口发送的数据,当接收到字符"="时,进行等式运算,并实时进行LCD显示。当接收到字符"c"时,LCD清屏,缓存的全部数据清0。

四、程序源码:
由于我是以小项目分块写的,所以各个程序不在同一个页面,如果强行复制在一起,可能会出问题,就只给出了main函数的程序,各个子函数就需要另外安排了,这就当给大家提供一个思路。
我开始还想着直接主机处理完全部数据,从机直接LCD显示就是了,为此还浪费了我不少时间,没想到换个思路主机传输数据,从机来处理计算一下子就好了。
当然如果大家需要,我的整个项目文件包括源程序和仿真我都放在文章末尾如果大家需要可以直接下载,喜欢的话点个关注,来个赞呗,谢谢哦。
1、主机main:

// 主机:按键扫描,并实时发送给从机
void main()
{   
    UsartInit();//串口初始化
    delay(200); 
    while(1)
    {          
        num=KeyPro();//按键扫描
        if(num!=0xff) //按键按下
        {  
            putchar(num);//串口实时发送
        }
    }
}

2、从机main:

// 接收串口数据,实时显示,并适时做等式运算
void main()
{      
    UsartInit();  //串口初始化
    LCD_init();   //LCD初始化
    putstring("Hello,this is calaulator\r\n");//串口打印数据,但LCD不显示
    putstring("He is made from Hebin and Wangshaoji\r\n");
    showstring(0,0,Hello_0);//LCD1602第1行
    showstring(0,1,Hello_1);//LCD1602第2行
    delayms(500);
    while(1)
    {   
  // 字符数据处理程序是写在中断函数里面的,所以这里直接调用显示就可以了
        showstring(0,0,dis_table0);//LCD实时显示
        showstring(0,1,dis_table1);
    }
}

五、Proteus仿真:
在这里插入图片描述
六、项目资料
失效链接:https://pan.baidu.com/s/1OAhFDi9IraFuk_7ZbbuOGA
提取码:nzfd

更新链接:https://pan.baidu.com/s/1fPRoXaYUJqUE23Uh_9PMzA
提取码:t9q4

蓝奏云:https://wwi.lanzoup.com/iRNRd0rdbwfe
更新日期20230329
最近才看见有小伙伴需要这个项目的资料,于是重新更新了一下链接。
不过找不到proteus软件了,而且我当时完成的时候软件是一个比较老版本的。
还好的是代码和基于老版本的仿真图还在,自己重新绘制一下仿真就行。

另外还有个问题:
大家都看见了,我在仿真时,调用了Proteus的矩阵键盘,但是又自己画了一个,是有原因的,就是调用的矩阵键盘不能使用,我也没有找到原因,但估计时程序里面的按键扫描函数需要升级,如果大家解决了,希望留言。

感谢大家的阅读,欢迎提问和共同学习。

以下是一个简易的Java计算器程序的示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator extends JFrame implements ActionListener { private JTextField textField; private JButton[] buttons; private String[] buttonLabels = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" }; private double num1, num2, result; private char operator; public Calculator() { setTitle("简易计算器"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); textField = new JTextField(); textField.setHorizontalAlignment(JTextField.RIGHT); add(textField, BorderLayout.NORTH); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(4, 4)); buttons = new JButton[buttonLabels.length]; for (int i = 0; i < buttonLabels.length; i++) { buttons[i] = new JButton(buttonLabels[i]); buttons[i].addActionListener(this); buttonPanel.add(buttons[i]); } add(buttonPanel, BorderLayout.CENTER); pack(); setVisible(true); } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.matches("[0-9.]")) { textField.setText(textField.getText() + command); } else if (command.matches("[/*\\-+]")) { num1 = Double.parseDouble(textField.getText()); operator = command.charAt(0); textField.setText(""); } else if (command.equals("=")) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case '/': result = num1 / num2; break; case '*': result = num1 * num2; break; case '-': result = num1 - num2; break; case '+': result = num1 + num2; break; } textField.setText(String.valueOf(result)); } } public static void main(String[] args) { new Calculator(); } } ``` 这个程序使用了Java Swing库来创建一个简易的计算器界面。用户可以通过鼠标或键盘输入数字和运算符,然后计算器会显示结果。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值