首页 > 其他分享 >基于AT89C51/STC89C52单片机的智能电子秤系统设计

基于AT89C51/STC89C52单片机的智能电子秤系统设计

时间:2024-09-26 23:20:16浏览次数:11  
标签:0.0 重量 STC89C52 price 单片机 LCD 按键 电子秤

毕业论文:基于AT89C51/STC89C52单片机的智能电子秤系统设计

摘要

本文设计并实现了一种基于AT89C51/STC89C52单片机的智能电子秤系统,该系统集成了LCD1602显示模块、重量传感器(以HX711为例,实际设计中可用电位器模拟)、矩阵按键等硬件模块,旨在实现商品单价输入、重量采集、实时价格计算与显示、价格累加、清零及去皮功能。该系统具有操作简便、显示直观、成本低廉等优点,适用于超市、市场等场所的商品称重与计价需求。

1. 引言

随着电子技术的飞速发展,电子秤作为商业贸易中不可或缺的计量工具,其智能化、精准化水平不断提高。本文设计的智能电子秤系统,通过单片机控制,结合高精度重量传感器和友好的人机交互界面,实现了商品重量的精确测量与价格的快速计算,极大地提高了工作效率和用户体验。

2. 系统总体设计

2.1 系统组成

本系统主要由AT89C51/STC89C52单片机、LCD1602液晶显示屏、HX711(或模拟)重量传感器、矩阵按键等模块组成。各模块之间通过适当的接口电路连接,共同构成完整的智能电子秤系统。

2.2 工作原理

  • 单片机:作为系统的核心控制单元,负责接收来自重量传感器的重量数据,处理矩阵按键的输入指令,控制LCD1602显示相关信息,并执行相应的计算与逻辑判断。
  • LCD1602:用于实时显示商品单价、重量、当前商品价格和累计价格等信息,提供直观的视觉反馈。
  • 重量传感器(HX711或模拟):采集商品重量信息,并转换为电信号输出给单片机处理。模拟设计中,可通过电位器调节模拟不同重量值。
  • 矩阵按键:提供用户输入接口,用于输入商品单价、执行计价、价格累加、清零及去皮等操作。

3. 硬件设计

3.1 单片机选型与电路设计

选用AT89C51/STC89C52单片机作为控制核心,设计相应的电源电路、复位电路、时钟电路及接口电路,确保单片机稳定工作并与其他模块有效通信。

3.2 LCD1602显示模块

设计LCD1602的接口电路,包括数据线、控制线及背光电源等,实现与单片机的连接与数据传输。

3.3 重量传感器(HX711或模拟)

对于HX711重量传感器,设计其接口电路,包括电源、时钟、数据等信号线,确保传感器能够准确输出重量数据。模拟设计中,使用电位器模拟重量变化,通过ADC转换模块读取电位器电压值,间接反映重量信息。

3.4 矩阵按键模块

设计矩阵按键的行列扫描电路,通过单片机IO口实现按键的识别与功能分配。

4. 软件设计

4.1 主程序设计

主程序负责初始化各模块,包括LCD1602、重量传感器(或模拟电路)、矩阵按键等,然后进入循环等待状态,不断检测按键输入,并根据输入执行相应功能。

4.2 功能模块设计

  • 重量采集:定时读取重量传感器(或模拟电路)的数据,进行滤波处理后转换为重量值。
  • 单价输入:通过矩阵按键输入商品单价,并存储在单片机内存中。
  • 计价计算:根据输入的单价和采集的重量,计算当前商品的价格。
  • 价格累加:将当前商品价格累加到累计价格上。
  • 清零操作:清除所有价格信息,包括当前商品价格、累计价格等。
  • 去皮功能:在称重前,通过特定按键操作,将容器等非商品重量从总重量中扣除。

5. 系统测试与调试

对系统进行全面的测试与调试,包括硬件连接检查、软件功能验证、精度校准等,确保系统能够稳定可靠地运行,并满足设计要求。

6. 结论与展望

本文设计并实现了一种基于AT89C51/STC89C52单片机的智能电子秤系统,该系统具有功能丰富、操作简便、成本低廉等优点。未来,可进一步优化系统性能,如提高重量测量精度、增加更多人性化功能等,以满足更广泛的应用需求。

本设计利用KEIL5软件实现程序设计,具体如上图,注释齐全,结合《常见问题汇总》文档看,理解容易。


  本原理图利用AD21软件设计实现 

#include <REGX51.H>  
  
// 假设的LCD1602函数声明  
void LCD_Init();  
void LCD_DisplayString(char row, char *str);  
void LCD_Clear();  
  
// 假设的ADC函数声明,用于读取电位器模拟的重量值  
// 返回值为0-1000,对应0.05kg-5kg(假设的转换比例)  
unsigned int Read_Weight_ADC();  
  
// 假设的矩阵按键扫描函数声明  
// 返回值代表按键编码,这里简化为直接调用函数获取值  
unsigned char Scan_Matrix_Keys();  
  
// 全局变量  
float price_per_unit = 0.0; // 商品单价  
float weight = 0.0;         // 物品重量(单位:kg)  
float current_price = 0.0;  // 当前商品价格  
float accumulated_price = 0.0; // 累计价格  
float tare_weight = 0.0;    // 去皮重量  
  
void main() {  
    LCD_Init();  
    LCD_Clear();  
  
    while (1) {  
        // 读取重量(模拟HX711)  
        unsigned int adc_value = Read_Weight_ADC();  
        weight = (float)adc_value / 20.0; // 假设转换比例,将ADC值转换为kg  
  
        // 矩阵按键扫描  
        unsigned char key = Scan_Matrix_Keys();  
  
        switch (key) {  
            case 1: // 假设按键1用于输入单价  
                // 这里需要实现一个循环,让用户通过按键输入单价  
                // 示例省略  
                break;  
  
            case 2: // 计价  
                current_price = price_per_unit * (weight - tare_weight); // 去除去皮重量  
                LCD_DisplayString(1, "Price:");  
                LCD_DisplayString(2, itoa_float(current_price)); // 假设的浮点数转字符串函数  
                break;  
  
            case 3: // 价格累加  
                accumulated_price += current_price;  
                // 更新LCD显示累计价格(略)  
                break;  
  
            case 4: // 清零  
                price_per_unit = 0.0;  
                weight = 0.0;  
                current_price = 0.0;  
                accumulated_price = 0.0;  
                tare_weight = 0.0;  
                // 清除LCD显示(略)  
                break;  
  
            case 5: // 去皮  
                tare_weight = weight; // 设置当前重量为去皮重量  
                // 提示用户去皮成功(略)  
                break;  
  
            default:  
                // 无操作或错误处理  
                break;  
        }  
  
        // 更新LCD显示单价、重量等信息(略)  
    }  
}  
  
// 注意:以下函数是假设的,你需要根据你的硬件实现它们  
void Read_Weight_ADC() { /* 实现ADC读取 */ }  
unsigned char Scan_Matrix_Keys() { /* 实现矩阵按键扫描 */ }  
void itoa_float(float f, char *s) { /* 浮点数转字符串,假设函数 */ }  
  
// 其他LCD和ADC的初始化及操作函数也需要你根据硬件手册实现

 

标签:0.0,重量,STC89C52,price,单片机,LCD,按键,电子秤
From: https://blog.csdn.net/qq_58404700/article/details/142580158

相关文章

  • 18 基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机ds18B20读取温度,设置初始心率65设置温度阈值38心率阈值60100如果超过阈值,蜂鸣器报警,led灯亮二、硬件资源基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。......
  • 14【Proteus仿真】基于51单片机的五种信号发生器(梯形波、正弦波、三角波、方波、锯齿
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能该项目旨在基于51单片机,采用Proteus设计一款多波形发生器,能够产生正弦波、方波、三角波、梯形波、锯齿波等不同波形。通过五个开关(K1-K5)的选择,用户可以灵活切换并观察各种波形的输出。项目融合了硬......
  • 24 基于51单片机的公交车报站仿真(LCD12864、DS1302、串口)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机,采用DS1302时钟模块读取时间,通过LCD12864显示实时时间,然后两个按键,一个按下表示到站,一个按下表示没到站。到达站点,蜂鸣器发出声音,屏幕显示到站,通过串口发送信息如果没到站,屏幕显示未......
  • 基于单片机与 PC 机通信的数据采集控制系统设计
    摘要:设计出基于单片机与PC机通信的数据采集控制系统方法。被控对象经传感器、电压变换电路、A/D转换芯片与单片机相连,可将现场参数信息传送至单片机;单片机经继电器驱动控制被控对象运行。单片机与PC机经电平转换芯片相连,实现远程通信功能。该系......
  • 单片机初学日记9.16-9.22
    准备1.软件安装       编写软件keilv5       烧录软件stcisp 2.新建工程:养成编程习惯            从上到下由主到次         芯片AT89C52         品字第一列工程名第二列user主程序driver底层  ......
  • 基于STM32单片机的病人护理监测系统
    基于STM32单片机的病人护理监测系统0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2DS18B20温度采集电路2.3MKB0805血压心率检测电路设计2.4、非接触式水位检测电路设计2.5、OLED显示电路设计3、单片机代码展......
  • 基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统
    基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2HC05蓝牙无线通信电路设计2.3sim900AGSM短信报警电路2.4、MQ-4天然气检测电路设计2.5、HC-SR505......
  • 基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统
    基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统0、毕业设计选题原则说明(重点)1、项目简介1.1、系统功能1.2、演示视频2、部分电路设计2.1、STM32单片机核心板电路设计2.2、ESP8266WIFI电路设计2.3、MKB0805血压心率检测电路设计2.4、ADXL345摔倒检测电路设计2.5、D......
  • 基于STM32单片机的OPENMV颜色识别小球追踪系统设计
    基于STM32单片机的OPENMV颜色识别小球追踪系统设计0、毕业设计选题原则说明(重点)1、项目简介1.1、系统功能1.2、演示视频2、部分电路设计2.1、STM32单片机核心板电路设计2.2、openmv使用说明2.3、stm32与openmv通信电路设计2.4、OLED液晶显示电路设计2.5、二维云台控制电路3、单片......
  • 基于STM32单片机的声音压力红外检测OneNET云平台防盗设计
    基于STM32单片机的声音压力红外检测OneNET云平台防盗设计0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2HX711压力重力检测电路设计2.3ESP8266WIFI无线通信电路设计2.4、声音检测电路设计3、单片机代码展示3......