51单片机实现的简易计算器程序设计
需积分: 36 72 浏览量
更新于2024-09-12
收藏 46KB DOC 举报
"51计算器程序的源代码"
该程序是一个基于51单片机的简单计算器实现。51单片机是Atmel公司生产的8位微处理器,广泛应用于嵌入式系统。以下是对程序中关键知识点的详细解释:
1. **头文件**:
- `#include<reg52.h>`:包含了51系列单片机的寄存器定义,如P0到P3等I/O端口。
- `#include<intrins.h>`:提供了51内核的内置函数支持,如位操作等。
- `#include<string.h>`:包含字符串处理函数,如`strcpy`、`strlen`等,虽然在这个例子中没有使用。
- `#include<math.h>`:提供数学函数,但51单片机可能不直接支持浮点运算,这里可能仅用于注释。
- `#include<stdio.h>`:包含标准输入输出函数,如`printf`等,通常用于调试,但在这个程序中也没有使用。
2. **变量定义**:
- `uchar key, sym, sumsz[13], adders=0;`:定义了无符号字符型变量`key`用于接收按键值,`sym`存储运算符,`sumsz`数组存储计算结果,`adders`计数器。
- `float sum, number1=0, number2=0;`:定义了浮点型变量`sum`用于存储计算结果,`number1`和`number2`存储两个操作数。
3. **位变量和IO口定义**:
- `sbit lcdrs=P2^5;`:定义了一个位变量`lcdrs`,用于控制液晶显示器的读取操作,`P2^5`表示P2口的第五位。
- `sbit lcdwr=P2^6;`:定义了位变量`lcdwr`,用于控制液晶的写入操作,对应P2口的第六位。
- `sbit lcden=P2^7;`:定义了位变量`lcden`,表示液晶的使能信号,用于启动液晶的读写操作,对应P2口的第七位。
4. **函数声明**:
- `void keyscan();`:声明键盘扫描函数,用于检测按键输入。
- `void delayms(uchar z);`:延时函数,以毫秒为单位。
- `void write_com(uchar com);`:写液晶命令函数,用于发送控制指令到液晶。
- `void write_data(uchardat);`:写液晶数据函数,用于显示数据到液晶。
- `void init();`:液晶初始化函数,设置液晶的工作模式。
- `void delay(int z);`:另一个延时函数,可能是以整数为单位。
- `bit buzz();`:可能是蜂鸣器控制函数,返回一个位值表示是否有键被按下。
- `void yuans();`:未在代码中定义的函数,可能是处理小数点的函数。
- `void clear();`:清除屏幕或变量的函数。
5. **主函数`main()`**:
- `init();`:初始化液晶显示器。
- `while(1)`:无限循环,程序将不断运行键盘扫描函数`keyscan()`,直到单片机复位。
6. **键盘扫描函数`keyscan()`**:
- 检测按键是否被按下,通过多次读取P1口并进行位操作来确定按键状态。
- 使用`switch(temp)`结构处理不同的按键输入,进行相应的计算操作。
7. **其他辅助函数**:
- `void delayms(uchar z)` 和 `void delay(int z)`:实现延时功能,用于处理按键抖动和液晶操作中的等待时间。
- `void write_com(uchar com)` 和 `void write_data(uchardat)`:向液晶发送命令和数据,实现字符显示。
- `void init()`:液晶初始化,配置接口和设置工作模式。
总结来说,这个51计算器程序利用51单片机的I/O端口与外部按键和液晶显示器交互,通过扫描按键获取输入,进行基本的算术运算,并在液晶上显示结果。程序的结构清晰,易于理解,是学习51单片机控制和简单计算器逻辑实现的好例子。
2013-10-27 上传
2011-12-07 上传
2018-01-23 上传
2011-11-18 上传
2009-09-28 上传
2011-12-15 上传
130 浏览量
2010-10-27 上传
deviljiaxu
- 粉丝: 0
- 资源: 1
最新资源
- StringImpl:带有C ++的字符串类impl
- apm32f407 单片机 u盘 rtthread 例程
- Project Cleaner-开源
- svn代码查看工具及团队合作
- 电工技术手册(软件版).zip
- html-css-spotifyweb
- ImageS3Android:一个Android SDK,可帮助集成ImageS3(图像调整大小并托管开源服务)
- client-treender
- PHP Newswriter 2005-开源
- treslek-vote:一个 treslek 插件,提供轮询频道的命令
- ptaska.github.io:个人网站
- windows下jak1.8安装及教程.zip
- 07.亚马逊广告整体知识整理.png.zip
- communal-property-registry
- Javadoc Taglets-开源
- SwitchButton:一个不带图片的简单开关按钮