c51写一个完整的计算器代码

时间: 2023-08-31 10:43:08 浏览: 58
### 回答1: 答案:#include <stdio.h> int main() { float num1, num2, result; char op; printf("请输入一个数字: "); scanf("%f", &num1); printf("请输入一个操作符(+,-,*或/): "); scanf(" %c", &op); printf("请输入另一个数字: "); scanf("%f", &num2); switch(op) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; } printf("%.2f %c %.2f = %.2f\n", num1, op, num2, result); return 0; } ### 回答2: C51是一种经典的单片机芯片,下面给出一个基于C51的简单计算器代码: ```c #include <reg52.h> sbit LCD_RS = P1^0; // LCD使能引脚定义 sbit LCD_RW = P1^1; // LCD读写引脚定义 sbit LCD_EN = P1^2; // LCD使能引脚定义 sbit BUTTON = P2^0; // 按钮引脚定义 unsigned char code table[] = {"0123456789+-*/="}; // 键盘对应的字符, 最后一个为等号 void delay(unsigned int i) { unsigned int j, k; for(j = i; j > 0; j--) for(k = 0; k < 100; k++); } void LCD_Init() { LCD_RS = 0; LCD_EN = 0; LCD_RW = 0; delay(15); LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; P0 = 0X38; delay(5); LCD_EN = 0; delay(2); LCD_EN = 1; P0 = 0X0F; delay(5); LCD_EN = 0; delay(2); LCD_EN = 1; P0 = 0X01; delay(5); LCD_EN = 0; delay(2); LCD_EN = 1; P0 = 0X06; delay(5); LCD_EN = 0; } void LCD_WriteCommand(unsigned char Command) { LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; P0 = Command; delay(5); LCD_EN = 0; } void LCD_WriteData(unsigned char Data) { LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; P0 = Data; delay(5); LCD_EN = 0; } void KeyScan() { unsigned char key; unsigned char result; if (BUTTON == 0) { delay(100); // 消抖 while(BUTTON == 0); // 等待按钮松开 key = P1 & 0x0f; // 读取按键值 if (key < 10) // 数字按键 { LCD_WriteData(table[key]); } else if (key < 15) // 运算符按键 { LCD_WriteCommand(0x01); // 清屏 switch(key) { case 10: // 加法 result = table[10]+table[11]; break; case 11: // 减法 result = table[10]-table[11]; break; case 12: // 乘法 result = table[10]*table[11]; break; case 13: // 除法 result = table[10]/table[11]; break; } LCD_WriteData(result); } else if (key == 15) // 等号按键 { LCD_WriteCommand(0x01); // 清屏 LCD_WriteData(result); } } } void main() { LCD_Init(); while(1) { KeyScan(); } } ``` 这段代码实现了一个简单的计算器功能,通过C51单片机读取数字和运算符按键,然后在LCD1602液晶屏上显示计算结果。代码中使用了按键消抖和按钮松开检测,保证按键输入的准确性。计算结果包括四则运算,并通过等号键显示出来。 ### 回答3: C51是一种基于8位单片机的架构,我们可以使用汇编语言来编写一个简单的计算器代码。以下是一个完整的C51计算器程序的示例: ``` #include<reg51.h> // 定义按键和LED接口的引脚 sbit key1 = P1^0; // 按键1 sbit key2 = P1^1; // 按键2 sbit key3 = P1^2; // 按键3 sbit key4 = P1^3; // 按键4 sbit key5 = P1^4; // 按键5 sbit key6 = P1^5; // 按键6 sbit key7 = P1^6; // 按键7 sbit key8 = P1^7; // 按键8 sbit led = P2^0; // LED unsigned char temp; // 存储器的临时变量 // 延时函数,用于模拟短暂按键抖动现象 void delay() { unsigned int i, j; for(i = 0; i < 100; i++) for(j = 0; j < 1000; j++); } // 按键扫描函数 unsigned char keyScan() { while(1) { key1 = 0; key2 = 1; key3 = 1; key4 = 1; // 检测第1列 if(key5 == 0) { delay(); return 1; } if(key6 == 0) { delay(); return 4; } if(key7 == 0) { delay(); return 7; } if(key8 == 0) { delay(); return 0; } key1 = 1; key2 = 0; key3 = 1; key4 = 1; // 检测第2列 if(key5 == 0) { delay(); return 2; } if(key6 == 0) { delay(); return 5; } if(key7 == 0) { delay(); return 8; } if(key8 == 0) { delay(); return 0; } key1 = 1; key2 = 1; key3 = 0; key4 = 1; // 检测第3列 if(key5 == 0) { delay(); return 3; } if(key6 == 0) { delay(); return 6; } if(key7 == 0) { delay(); return 9; } if(key8 == 0) { delay(); return 0; } key1 = 1; key2 = 1; key3 = 1; key4 = 0; // 检测第4列 if(key5 == 0) { delay(); return '+'; } // 加法 if(key6 == 0) { delay(); return '-'; } // 减法 if(key7 == 0) { delay(); return '*'; } // 乘法 if(key8 == 0) { delay(); return '/'; } // 除法 } } // 显示数字函数 void showNumber(unsigned char number) { if(number < 10) { P0 = number; } else { P0 = number - 10 + 'A'; } } // 进行计算的函数 void calculate(unsigned char key) { switch(key) { case '+': temp = P3 + P4; break; case '-': temp = P3 - P4; break; case '*': temp = P3 * P4; break; case '/': temp = P3 / P4; break; default: break; } } void main() { while(1) { P2 = 0x00; // 将LED置为灭 showNumber(P3); // 显示P3的当前值 temp = keyScan(); if(temp >= 0 && temp <= 9) { P4 = temp; // 更新P4的值 } else { calculate(temp); P3 = temp; // 更新P3的值 } } } ``` 这段代码实现了一个简单的C51计算器,使用了8个按键和一个LED显示结果。用户可以通过按下按键来输入数字,然后再按下对应的操作符键进行计算。最后,计算结果将通过LED显示。

相关推荐

最新推荐

recommend-type

基于AT89C51单片机简易计算器的设计.doc

设计的是简单的计算器,可以进行四则运算(+、-、×、÷),C语言编程,PROTUES仿真,实验报告 单片机课程设计
recommend-type

华为OD机试D卷 - 用连续自然数之和来表达整数 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg
recommend-type

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip
recommend-type

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告.docx

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。