09-51_四位数码管计算器_仿真
基于51单片机的四位数码管计算器
矩阵键盘输入 · 四则运算 · 数码管显示 · Proteus仿真
一、项目简介
本项目实现了一个基于51单片机的简易计算器,支持加减乘除四则运算。系统使用4×4矩阵键盘输入数字和运算符,4位数码管动态扫描显示输入数字和运算结果。
计算器功能包括:0~9数字输入、+−×÷运算符、等号计算、清零键。输入数字最大4位(0~9999),运算结果若超出4位则显示溢出提示。除法运算保留整数部分,除数为零时显示错误。数码管采用动态扫描方式,利用视觉暂留效应实现4位同时显示。
项目属性 | 说明 |
主控平台 | AT89C52(Proteus仿真) |
开发语言 | C语言 |
开发环境 | Keil C51 / Keil MDK |
仿真工具 | Proteus(部分项目) |
图1-1 系统整体效果图
二、系统总体架构
本系统以单片机为核心,外围连接传感器、显示模块、按键模块和执行机构。系统总体架构如下:单片机通过相应接口与各外设通信,采集传感器数据后进行处理,结果输出至显示模块,同时根据逻辑控制执行机构动作。
图2-1 系统总体架构框图
模块 | 功能描述 |
主控模块 | 系统核心,负责数据采集、逻辑处理和输出控制 |
传感器模块 | 采集环境参数(温度/光照/按键输入等) |
显示模块 | LCD1602/OLED实时显示数据和状态 |
按键模块 | 用户输入,参数调整和模式切换 |
执行机构 | 蜂鸣器/LED/电机等,执行报警和驱动动作 |
三、硬件设计
3.1 核心器件选型
器件 | 型号 | 说明 |
主控芯片 | AT89C52 | Proteus仿真 |
矩阵键盘 | 4×4 | 0~9数字键 + 运算符 + 功能键 |
数码管 | 4位共阴 | 动态扫描显示 |
驱动芯片 | 74HC245 | 数码管段驱动 |
图3-1 核心器件实物图
3.2 引脚分配
单片机各引脚分配如下表所示,在设计时需注意引脚复用和电平匹配问题:
引脚 | 连接 | 功能描述 |
P1.0~P1.3 | KEY_ROW | 矩阵键盘行扫描 |
P1.4~P1.7 | KEY_COL | 矩阵键盘列读取 |
P0 | SEG_A~G+DP | 数码管段选 |
P2.0~P2.3 | DIG1~DIG4 | 数码管位选 |
图3-2 引脚分配电路原理图
四、软件设计
4.1 软件流程
主循环中不断扫描矩阵键盘,检测到按键后根据键值执行相应操作:数字键→追加到当前输入数字(左移+加新位);运算符键→保存第一操作数和运算符;等号键→读取第二操作数,执行运算,显示结果;清零键→复位所有状态。数码管在定时器中断中动态扫描刷新。
图4-1 主程序流程图
4.2 模块划分
源文件 | 模块名称 | 功能描述 |
matrixkey.c | 矩阵键盘 | 行列扫描、消抖、键值映射 |
segdisplay.c | 数码管驱动 | 动态扫描、段码表、位选 |
main.c | 主程序 | 数字输入、运算逻辑、结果显示 |
4.3 关键代码
以下代码均从项目工程源文件中直接提取,完整展示了各模块的核心实现:
📄 main.c




五、项目文件结构
项目工程的目录结构如下,展示了源代码文件的组织方式:

六、功能演示
系统功能演示步骤如下:
1. 上电后数码管显示"0000"
2. 输入12,按+,输入34,按=
3. 数码管显示"0046"
4. 按清零键重新输入
5. 测试乘法:99×99=9801
图6-1 功能演示照片/截图
图6-2 运行状态特写
七、总结
本项目实现了计算器的基本功能,涵盖了矩阵键盘扫描、数码管动态显示、四则运算逻辑等核心知识点。动态扫描是数码管显示的关键技术,需要在定时器中断中快速切换位选和段选。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
— END —

浙公网安备 33010602011771号