摘要
本文介绍了一种基于STC89C52RC单片机的16键电子称控制系统设计。系统通过压力传感器采集被测物体的重量,经过信号放大和A/D转换后,将模拟信号转换为数字信号送入单片机进行处理。单片机通过控制译码显示器显示重量信息,同时实现电子秤的基本功能,如价格计算,并扩展了电子日历及时钟功能。人机交互界面采用4*4矩阵键盘和LCD1602液晶显示器,方便用户输入数据和查看信息。此外,系统还集成了语音报数模块,可语音报读重量、单价、金额等内容。
关键词:STC89C52RC单片机;电子称;压力传感器;A/D转换;LCD1602;矩阵键盘;语音报数
一、引言
随着科技的不断发展,电子称作为一种重要的计量工具,在日常生活和工业生产中得到了广泛应用。本文设计了一种基于STC89C52RC单片机的16键电子称控制系统,旨在实现准确、高效的重量测量和数据处理功能,同时提升用户体验。
二、系统设计方案
本系统主要由单片机最小系统、数据采集系统、人机交互界面系统、电源系统、时钟及语音报数模块组成。
1. 单片机最小系统
单片机最小系统由STC89C52RC单片机和经典复位电路组成,负责整个系统的控制和数据处理。
2. 数据采集系统
数据采集系统包括称重传感器、信号放大和A/D转换部分。称重传感器负责采集被测物体的重量,将其转换为模拟电压信号。信号放大和A/D转换部分由专用型高精度24位AD转换芯片HX711实现,将模拟信号转换为数字信号送入单片机进行处理。
3. 人机交互界面系统
人机交互界面系统采用4*4矩阵键盘和LCD1602液晶显示器。矩阵键盘方便用户输入数据和设置参数,LCD1602液晶显示器能够直观地显示重量、价格等信息。
4. 电源系统
电源系统为整个系统提供稳定的电源供应,确保系统的正常运行。
5. 时钟及语音报数模块
时钟模块由时钟芯片DS1302和时钟电路组成,用于实现电子日历及时钟功能。语音报数模块采用SC1010B电子称专用语音芯片,可语音报读重量、单价、金额等语音内容,提升用户体验。
三、软件设计
软件设计是系统实现的关键部分,主要包括数据采集、数据处理、人机交互和语音报数等功能。单片机通过编程实现对各模块的控制和数据处理,实现电子称的基本功能和扩展功能。
四、实验结果与分析
通过实际测试,本系统能够准确测量物体的重量,并实现价格计算、电子日历及时钟功能。人机交互界面友好,操作简便。语音报数模块能够清晰地报读相关信息,提升了用户体验。
五、结论
本文设计了一种基于STC89C52RC单片机的16键电子称控制系统,实现了准确、高效的重量测量和数据处理功能。系统扩展了电子日历及时钟功能,提升了用户体验。实验结果表明,该系统具有较高的实用性和可靠性,可广泛应用于日常生活和工业生产中。
#include <reg52.h> //调用单片机头文件
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
#define ulong unsigned long
#include<intrins.h>
uchar code table_num[]="0123456789abcdefg";
sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit e =P1^2; //片选信号 下降沿触发
sbit hx711_dout=P2^1;
sbit hx711_sck=P2^0;
sbit beep = P1^3; //蜂鸣器
long weight;
uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
bit flag_300ms ;
ulong price,z_price; //单价 总价
uchar flag_p;
/***************
删除键
去皮
价格清零
***************/
/******1ms延时函数***12M晶振**************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/********************************************************************
* 名称 : delay_uint()
* 功能 : 小延时。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_uint(uint q)
{
while(q--);
}
/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
部分程序...
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8