C51单片机基础计算器程序设计与实现

需积分: 9 2 下载量 201 浏览量 更新于2024-09-14 收藏 38KB DOC 举报
本篇文档介绍了一个基于C51编写的单片机计算器程序,它主要利用了8051系列单片机的特性来实现基本的加减乘除功能。该程序的核心组成部分包括数据结构定义、中断服务函数以及按键处理和结果显示。 首先,程序引入了必要的头文件,如`<reg52.h>`、`<intrins.h>`、`<stdio.h>`、`<1602.h>`和`<math.h>`,它们分别为硬件寄存器定义、C语言内联函数库、标准输入输出库、1602液晶显示驱动以及数学函数库。这些库文件为程序提供了硬件操作和数学计算的基础支持。 定义了一些字符数组,如`codeshow1[]`用于存储数字和运算符的显示字符,`codekey1[]`则对应按键的物理位置,以及`codeKey[]`用于存储按键的映射代码。`mode[]`和`show[]`数组可能用于存储模式和临时显示结果,`ch1[]`可能是用于处理数字和运算的结果。 程序中定义了几个重要的函数: 1. `T0Server()`:此函数设置定时器0为中断服务,可能是为了在50毫秒或1秒后执行特定操作。 2. `delay_50ms()` 和 `delay_1s()`:这两个延时函数分别用于实现50毫秒和1秒的定时,通过调整定时器的值实现。 3. `delay(uchari)`:这是一个通用的延时函数,接受一个整数参数表示需要的延长时间,通过循环计数器实现延时。 4. `up()`:这个函数用于读取P0口的状态,以便获取按键输入,返回按键的实际代码。 `jilu()` 函数是关键部分,它负责处理用户按键输入。通过`KeyV`变量获取当前按键,然后与`codekey1[]`数组中的键位进行比较。如果匹配,则根据键位类型执行相应的操作。当遇到等号(=)或者连续输入超过15位数字时,设置结束标志`S`,同时更新显示结果。 在处理完用户输入后,可能会调用其他函数来更新显示或进行计算。例如,如果`S`标志被置位,可能意味着计算已结束,此时需要将结果显示在液晶屏上,或者根据计算结果进行下一步操作。 这个单片机计算器程序利用C51语言编写,通过按键输入实现基本的数学运算,并能显示结果。通过定时器实现延迟处理,提高了程序的响应性和准确性。整个程序结构紧凑,体现了单片机编程的基本原理和实践应用。