当前位置: 首页 > news >正文

基于单片机的智能收银机模拟系统设计

1. 系统功能概述

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081484

本设计题目为基于单片机的智能收银机模拟系统设计,该系统主要通过单片机对数码管、按键输入及基本算术运算的综合控制,实现对商品价格与数量的输入、自动计算单笔金额及多笔累计金额的全过程模拟。系统能够模拟现实商场或超市中收银机的核心功能,具有良好的交互性和可扩展性。

本系统设计目标是:通过简单、直观的按键操作实现商品价格与数量输入、乘法运算、金额累计以及结果显示等收银流程,并利用多位数码管实现金额与状态的实时显示,使用户可以清晰地掌握整个收银过程。

系统主要功能如下:

  1. 初始显示功能:系统上电后,最右侧数码管显示“0”,其余数码管保持熄灭状态,提示设备处于待机状态。
  2. 商品单价输入:通过数字键输入商品单价。输入第一个数字时,最右数码管显示该数字,随后每输入一个新数字,前一个数字依次左移,新输入的数字显示在最右端。
  3. 数量输入功能:按下“×”键后,系统进入商品数量输入模式。此时单价显示熄灭,转为输入并显示数量。
  4. 金额计算与累加功能:按下“+”键后,系统自动执行单价与数量的乘法运算,得到当前商品的总金额,并将结果加入到累计总金额中,同时显示最新总额。
  5. 多笔商品处理功能:完成一笔商品计算后,可直接输入下一件商品的单价,系统自动清除当前显示并开始新一轮计算。
  6. 最终结算功能:按下“=”键后,系统显示顾客本次购物的最终总金额,不再接受新的输入。
  7. 复位功能:按下“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口输出位选信号,控制当前显示的位。

采用动态扫描显示方式,通过定时中断周期性切换显示位,实现所有数码管的连续刷新,从而在人眼视觉上形成稳定的多位显示。

显示内容分为三种状态:

  1. 单价输入显示;
  2. 数量输入显示;
  3. 累计金额显示。

当系统状态改变时,显示内容随之更新,确保用户操作的即时反馈。


2.4 运算与存储模块设计

系统内部定义了多个变量用于存储临时数据和累计结果:

  • unit_price:商品单价;
  • quantity:商品数量;
  • sum:当前金额;
  • total:累计金额;
  • mode_flag:状态标志位,区分当前输入状态(单价输入/数量输入/总额显示)。

所有计算均由单片机内部CPU执行,采用整数乘法实现金额计算,并通过BCD码转换实现数据显示。


2.5 蜂鸣器与复位模块设计

蜂鸣器用于按键确认与状态切换提示。每当按下有效键时,蜂鸣器响一声以增强人机交互体验。复位电路采用按键复位方式,确保收银流程结束后可快速返回初始状态。


3. 系统程序设计

系统程序采用模块化结构,包括主程序、键盘扫描子程序、显示子程序、运算逻辑子程序和状态控制子程序。各模块之间通过全局变量传递状态和数据,实现系统的有序运行。


3.1 主程序流程

主程序为系统控制核心,负责流程的调度与状态切换。程序运行流程如下:

  1. 初始化系统模块;
  2. 循环扫描按键;
  3. 根据状态执行相应输入和计算;
  4. 更新显示内容;
  5. 判断是否复位或结束操作。

主程序框架如下:

#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显示的智能化收银设备,为嵌入式控制技术在商业终端领域的应用提供了技术参考。

http://www.dtcms.com/a/490106.html

相关文章:

  • ssh连接本地虚拟机
  • PyInstaller多模块项目打包指南
  • access 网站后台汕头自助建站
  • 从图纸到三维模型:智能装配指导的突破之路
  • 「JMM+Java锁+AQS」 知识图谱
  • 【广州公共资源交易-注册安全分析报告-无验证方式导致安全隐患】
  • C++ 学习日记
  • 晶晨S905L3SB芯片_安卓9.0_高安版_支持外置WIFI_线刷固件包
  • 4G5G 移动代理实战:什么时候必须用移动 IP?
  • 【OpenHarmony】传感器轻量级服务模块架构
  • 面向服务架构(SOA)模式全解析:设计、实践与价值
  • HTML 零基础入门到实战:从骨架到页面的完整指南
  • 【Java EE进阶 --- SpringBoot】Mybatis操作数据库(进阶)
  • 成都海鸥手表网站crm系统的销售管理功能包括
  • 『 QT 』QT信号机制深度解析
  • stp,rstp,mstp的区别
  • 海外盲盒APP开发:从“未知”到“精准”的用户体验革命
  • 网站建设yuanmus站长工具seo综合查询5g
  • 使用 IntelliJ IDEA 结合 DBeaver 连接 MySQL 数据库并实现数据增删查改的详细步骤:
  • 零知IDE——基于STM32F407VET6和ESP-01的SHT2X温湿度监测与云传输系统
  • 记一次生产服务器磁盘I/O性能瓶颈与负载过高分析与处理
  • MEMS加速度计深度解析:从智能手机到结构健康监测
  • LLMs-from-scratch(dataloader)
  • 兴义哪有做网站婚纱影楼网站源码
  • C++_394_tableWidget控件,两种模式,1、行显示模式 2、网格显示模式
  • MyBatis拦截器实现saas租户同库同表数据隔离
  • 求n以内最大的k个素数以及它们的和
  • 手机 网站建设在线自动取名网站怎么做
  • PHP电动汽车租赁管理系统-计算机毕业设计源码35824
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十二)Python3编程之python基础