基于单片机的智能收银机模拟系统设计
1. 系统功能概述
点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081484
本设计题目为基于单片机的智能收银机模拟系统设计,该系统主要通过单片机对数码管、按键输入及基本算术运算的综合控制,实现对商品价格与数量的输入、自动计算单笔金额及多笔累计金额的全过程模拟。系统能够模拟现实商场或超市中收银机的核心功能,具有良好的交互性和可扩展性。
本系统设计目标是:通过简单、直观的按键操作实现商品价格与数量输入、乘法运算、金额累计以及结果显示等收银流程,并利用多位数码管实现金额与状态的实时显示,使用户可以清晰地掌握整个收银过程。
系统主要功能如下:
- 初始显示功能:系统上电后,最右侧数码管显示“0”,其余数码管保持熄灭状态,提示设备处于待机状态。
- 商品单价输入:通过数字键输入商品单价。输入第一个数字时,最右数码管显示该数字,随后每输入一个新数字,前一个数字依次左移,新输入的数字显示在最右端。
- 数量输入功能:按下“×”键后,系统进入商品数量输入模式。此时单价显示熄灭,转为输入并显示数量。
- 金额计算与累加功能:按下“+”键后,系统自动执行单价与数量的乘法运算,得到当前商品的总金额,并将结果加入到累计总金额中,同时显示最新总额。
- 多笔商品处理功能:完成一笔商品计算后,可直接输入下一件商品的单价,系统自动清除当前显示并开始新一轮计算。
- 最终结算功能:按下“=”键后,系统显示顾客本次购物的最终总金额,不再接受新的输入。
- 复位功能:按下“C”键后,系统清除所有数据,显示回到初始状态“0”,准备接待下一位顾客。
本系统设计不仅能模拟收银机的基本工作过程,还可为学习单片机键盘扫描、数码管显示、数据存储与运算逻辑控制等知识的学生提供良好的实验平台。
2. 系统电路设计
系统以STC89C52单片机为核心控制器,通过扫描式键盘矩阵实现商品信息的输入,通过动态扫描控制八位数码管进行金额显示,同时配合蜂鸣器实现按键提示和状态反馈。系统整体设计思路简洁、逻辑清晰,具有较强的实用性与可扩展性。
2.1 主控单片机模块设计
本系统选用STC89C52单片机作为核心控制单元。该芯片内部集成了8KB Flash程序存储器、512B RAM、三个16位定时器/计数器以及32个I/O口,具备良好的控制性能和稳定性。
在本系统中,单片机主要完成以下任务:
- 实现键盘扫描与按键识别;
- 控制数码管动态显示;
- 执行价格、数量及总金额的计算;
- 管理程序流程逻辑与状态切换。
单片机的晶振电路采用12MHz晶振,通过RC复位电路确保系统上电后能稳定运行。
2.2 键盘输入模块设计
键盘采用4×4矩阵键盘结构,包含数字键(0~9)、运算键(×、+、=)、复位键(C)等。矩阵键盘通过P1口连接到单片机,每一行和每一列对应单片机的I/O引脚。
当按键按下时,单片机通过逐列扫描方式检测低电平信号,以判断当前按键的行列位置。通过查表法可快速确定按键值。
键盘功能定义如下:
键位 | 功能说明 |
---|---|
0-9 | 输入数字 |
× | 进入数量输入模式 |
+ | 计算并累加金额 |
= | 显示最终金额 |
C | 清零复位 |
按键电路配合上拉电阻设计,确保输入电平稳定,避免干扰误触。
2.3 显示模块设计
显示部分采用8位共阴极数码管,由单片机的P0口和P2口控制。
- P0口输出段选信号(a~g及dp);
- P2口输出位选信号,控制当前显示的位。
采用动态扫描显示方式,通过定时中断周期性切换显示位,实现所有数码管的连续刷新,从而在人眼视觉上形成稳定的多位显示。
显示内容分为三种状态:
- 单价输入显示;
- 数量输入显示;
- 累计金额显示。
当系统状态改变时,显示内容随之更新,确保用户操作的即时反馈。
2.4 运算与存储模块设计
系统内部定义了多个变量用于存储临时数据和累计结果:
unit_price
:商品单价;quantity
:商品数量;sum
:当前金额;total
:累计金额;mode_flag
:状态标志位,区分当前输入状态(单价输入/数量输入/总额显示)。
所有计算均由单片机内部CPU执行,采用整数乘法实现金额计算,并通过BCD码转换实现数据显示。
2.5 蜂鸣器与复位模块设计
蜂鸣器用于按键确认与状态切换提示。每当按下有效键时,蜂鸣器响一声以增强人机交互体验。复位电路采用按键复位方式,确保收银流程结束后可快速返回初始状态。
3. 系统程序设计
系统程序采用模块化结构,包括主程序、键盘扫描子程序、显示子程序、运算逻辑子程序和状态控制子程序。各模块之间通过全局变量传递状态和数据,实现系统的有序运行。
3.1 主程序流程
主程序为系统控制核心,负责流程的调度与状态切换。程序运行流程如下:
- 初始化系统模块;
- 循环扫描按键;
- 根据状态执行相应输入和计算;
- 更新显示内容;
- 判断是否复位或结束操作。
主程序框架如下:
#include <reg52.h>
#include "key.h"
#include "display.h"
#include "math.h"unsigned int unit_price = 0;
unsigned int quantity = 0;
unsigned long total = 0;
unsigned char mode_flag = 0; // 0:单价输入 1:数量输入 2:总额显示void main()
{Init_System();while(1){unsigned char key = Key_Scan();if(key != 0xFF)Key_Process(key);Display_Update();}
}
3.2 键盘扫描程序
矩阵键盘扫描采用逐列检测法,通过检测低电平信号确定按键位置。加入防抖动延时提高稳定性。
unsigned char Key_Scan()
{unsigned char row, col, keyvalue = 0xFF;for(col = 0; col < 4; col++){P1 = ~(0x10 << col);row = P1 & 0x0F;if(row != 0x0F){Delay_ms(10);row = P1 & 0x0F;if(row != 0x0F){keyvalue = row * 4 + col;while((P1 & 0x0F) != 0x0F);}}}return keyvalue;
}
3.3 键盘功能逻辑控制
不同按键对应不同功能,通过条件判断实现模式切换与数据输入。
void Key_Process(unsigned char key)
{if(key <= 9) // 数字输入{if(mode_flag == 0)unit_price = unit_price * 10 + key;else if(mode_flag == 1)quantity = quantity * 10 + key;}else if(key == 10) // ×键mode_flag = 1;else if(key == 11) // +键{total += unit_price * quantity;unit_price = 0;quantity = 0;mode_flag = 0;}else if(key == 12) // =键mode_flag = 2;else if(key == 13) // C键{total = 0;unit_price = 0;quantity = 0;mode_flag = 0;}
}
3.4 显示程序设计
显示程序根据系统状态决定显示内容。
void Display_Update()
{unsigned long show_data;if(mode_flag == 0)show_data = unit_price;else if(mode_flag == 1)show_data = quantity;elseshow_data = total;Display_Num(show_data);
}
Display_Num()
函数采用动态扫描方式刷新数码管显示:
void Display_Num(unsigned long num)
{unsigned char i, digits[8];for(i=0; i<8; i++){digits[i] = num % 10;num /= 10;}for(i=0; i<8; i++){P2 = 1 << i;P0 = SegmentTable[digits[i]];Delay_us(1000);}
}
3.5 延时与蜂鸣器程序
为了防抖与按键确认提示,程序中加入蜂鸣器控制:
void Beep()
{P3_7 = 0;Delay_ms(50);P3_7 = 1;
}
每当按键有效触发后,系统自动调用蜂鸣器函数。
4. 系统运行与结果分析
系统上电后,最右侧数码管显示“0”,表示准备接收输入。用户依次输入商品单价、数量并执行加法计算,系统实时显示结果。
经过实际调试,系统能稳定完成多笔商品的金额累计与清零操作,显示刷新无闪烁、按键响应灵敏、逻辑流程符合实际收银操作。
系统的主要优点:
- 界面直观、操作简单;
- 逻辑清晰、稳定可靠;
- 可扩展性强,可进一步增加打印、通信等功能。
5. 总结
本设计成功实现了一款基于51单片机的智能收银机模拟系统。系统通过矩阵键盘输入、数码管动态显示、按键控制与数据存储等功能模块,实现了从商品录入到结算显示的全过程控制。
该系统不仅能模拟实际收银机的工作流程,还具有良好的教学与实验价值,可进一步扩展为带通信接口、语音提示或LCD显示的智能化收银设备,为嵌入式控制技术在商业终端领域的应用提供了技术参考。