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

毕业论文:基于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的初始化及操作函数也需要你根据硬件手册实现

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值