51单片机实现的简易计算器程序设计

需积分: 36 1 下载量 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单片机控制和简单计算器逻辑实现的好例子。