基于51单片机的智能营养秤系统设计与实现

发布者:科技探险者最新更新时间:2023-07-18 来源: elecfans关键字:51单片机  STC89C52 手机看文章 扫描二维码
随时随地手机看文章

一、项目背景

随着人们生活水平和健康意识的提高,越来越多的人开始注重自己的饮食健康。在此背景下,智能营养秤系统应运而生,成为了一种非常实用的工具。本项目基于51单片机设计和实现一种智能营养秤系统,通过该系统可准确地测量食物的重量并计算其热量、蛋白质、脂肪、碳水化合物等营养成分含量。


当前系统采用了STC89C52单片机作为主控芯片,预置了多种食材的营养成分数据。用户只需要使用矩阵键盘输入食材编号,将需要称重的食材放置在重力传感器上进行依次称重,系统就可以自动计算出所有食材的各类营养含量总值,并通过液晶屏显示出来。同时,系统根据预设的营养指标,对不达标或超标的食材进行对应的声光提示,提醒用户注意饮食健康。


当前系统还配备了无线WIFI模块,可以将当前营养数据上传到手机端实时显示,并给出营养建议。这使得用户可以随时1了解自己的饮食情况,及时进行调整,从而达到更好的健康效果。


本项目的设计和实现是为了满足人们对于饮食健康的需求,帮助人们更好地控制自己的饮食,达到健康瘦身的目的。同时,由于采用了51单片机的设计方案,具有成本低、易于制作、易于维护等优点,具有广泛的应用前景。

poYBAGRreiaAbDGGAAj9vaxEOyM322.pngimage-20230517100117507

二、系统设计过程

2.1 硬件组成

【1】STC89C52单片机作为主控芯片。

【2】4x4电容矩阵键盘用于输入食材编号。

【3】HX711重力传感器用来进行多种食材的称重。

【4】1.44寸LCD显示屏用来显示所有食材的各类营养含量总值。

【5】ESP8266无线WIFI模块用于将当前营养数据上传到手机端实时显示。

2.2 系统框架组成

【1】输入:使用4x4电容矩阵键盘输入食材编号,触发称重功能。

【2】称重:根据输入的食材编号,通过HX711重力传感器对多种食材依次称重。

【3】计算:系统自动计算所有食材的各类营养含量总值,并在1.44寸LCD显示屏上显示。

【4】判断:根据系统预设的营养指标,判断当前营养数据是否达标或超标。

【5】提示:若不达标或超标,系统进行相应的声光提示。

【6】数据上传:通过ESP8266无线WIFI模块将当前营养数据上传到手机端实时显示,并给出营养建议。

2.3 系统模块设计

【1】系统硬件设计

采用了51单片机作为主控芯片,重力传感器用于称重,矩阵键盘用于输入食材编号,液晶屏用于显示数据。同时,为了实现无线上传功能,还需要添加WIFI模块。

【2】系统软件设计

系统的软件设计主要包括两个方面,即驱动程序和应用程序。其中,驱动程序负责与各个硬件模块进行通信,读取和处理相关数据;应用程序则负责实现具体的计算和控制逻辑。

【3】食材营养成分数据预置

预先测量并记录多种食材的重量和营养成分含量,并将这些数据存储在系统中供后续使用。

【4】食材识别和称重

当用户输入食材编号后,系统自动从预置的数据中查找对应的营养成分信息。然后,用户将需要称重的食材放置在重力传感器上,系统开始进行称重并输出重量数据。

【5】营养计算和指标判断

系统根据已知的食材重量和营养成分数据,计算出当前食物的各类营养含量总值。同时,根据预设的营养指标,判断当前食物是否达标或超标,并进行相应的声光提示。

【6】数据传输和显示

将当前的营养数据通过WIFI模块上传到手机端实时显示,并根据用户的身体数据和运动情况,推荐合适的饮食方案。

【7】整体测试和优化:对系统进行整体测试和优化,确保系统能够正常工作并满足设计要求。

2.4 程序设计思路

【1】定义多种食材的营养成分数据,存储在程序中。

【2】初始化电容矩阵键盘和HX711重力传感器。

【3】等待用户输入食材编号。一旦检测到有效输入,记录食材编号并触发称重功能。

【4】根据输入的食材编号,依次使用HX711重力传感器进行称重,并根据对应的营养成分数据进行计算,得出每种营养成分的总值。

【5】将所有食材的营养成分总值通过1.44寸LCD显示屏展示给用户。

【6】根据系统预设的营养指标,判断当前营养数据是否达标或超标。如果不达标或超标,则进行相应的声光提示。

【7】通过ESP8266无线WIFI模块将当前营养数据上传到手机端实时显示,并给出营养建议。

三、程序代码实现

3.1 HX711称重传感器代码

下面是STC89C52单片机读取HX711称重传感器的值,得到最终的重量,打印到串口的完整代码:

#include 

#include 

// HX711引脚定义

sbit HX711_DOUT = P1^0; // 数据输出引脚

sbit HX711_SCK = P1^1; // 时钟输入引脚

typedef unsigned char uchar;

typedef unsigned int uint;

uchar WeiLai, OldData;  // 定义两个变量,用于保存数据

uchar Data[3];      // 存放读取的数据

long result = 0;     // 定义长整型变量,用于存放最终的重量值

void delay_us(uint us)  // 延时函数(微秒级)

{

  while(us--)

   {

    _nop_();      // 空操作语句,延时一微秒

    _nop_();

    _nop_();

    _nop_();

   }

}

void Read_HX711()     // 读HX711函数

{

  uchar i;

  HX711_DOUT = 1;    // 先将DOUT置为高电平

  delay_us(1);     // 延时1微秒

  HX711_SCK = 0;    // 将SCK置为低电平

  delay_us(1);     // 延时1微秒

  for(i=0;i<24;i++)     // 循环24次,读取数据

     {

         HX711_SCK = 1;    // 将SCK置为高电平

         delay_us(1);      // 延时1微秒

         WeiLai = HX711_DOUT;       // 读取DOUT引脚上的数据

         result <<= 1;     // 左移一位

         if(WeiLai == 1)   // 如果DOUT为1,将result的最低位赋值为1

         {

             result++;

         }

         HX711_SCK = 0;    // 将SCK置为低电平

         delay_us(1);      // 延时1微秒

     }

 

     WeiLai = OldData;     // 将OldData的值赋给WeiLai

     Data[2] = result;     // 存储重量值的最高字节

     Data[1] = result>>8; // 存储重量值的中间字节

  Data[0] = result>>16; // 存储重量值的最低字节

}

void main()

{

  TMOD = 0x20;     // 定时器T1工作模式设置

  TH1 = 0xfd;      // 波特率9600

  TL1 = 0xfd;      // 波特率9600

  TR1 = 1;       // 启动定时器T1

  SCON = 0x50;     // 设置串口工作方式

  while(1)

   {

    Read_HX711();   // 调用读HX711函数

    // 将读取到的数据打印到串口

    SBUF = Data[0];

    while(TI == 0);

    TI = 0;

    SBUF = Data[1];

    while(TI == 0);

    TI = 0;

    SBUF = Data[2];

    while(TI == 0);

    TI = 0;

   }

}

3.2 ESP82660-WIFI配置代码

以下是STC89C52单片机控制ESP8266,配置成AP模式,开启TCP服务器,等待客户端连接上来的完整代码:


#include 

#include 

#define RXD P3_0  // 串口接收引脚

#define TXD P3_1  // 串口发送引脚

typedef unsigned char uchar;

typedef unsigned int uint;

bit rcvflag;    // 接收标志位

uchar idata RcvBuf; // 存储接收到的数据

uchar len;     // 存储接收到的数据长度

uchar AT_OK;    // 存储AT指令执行结果

/* 延时函数 */

void Delayms(uint ms)

{

  uchar i, j;

  for(i=0;i;i++)>


关键字:51单片机  STC89C52 引用地址:基于51单片机的智能营养秤系统设计与实现

上一篇:AT89S52单片机与CC1100的接口硬件电路
下一篇:MCS-51与 AD7543的应用

推荐阅读最新更新时间:2024-11-11 19:16

51单片机操作DS1302时钟芯片
#define uint unsigned int #define uchar unsigned char sbit lcdrs = P1^0; sbit lcdrw = P1^1; sbit lcden = P1^2; sbit key0 = P2^0;//功能键,选择时分秒 sbit key1 = P2^1;//加1键 sbit key2 = P2^2;//减1键 sbit key4 = P2^4; sbit clk_1302 = P1^5; //1302芯片位定义 sbit io_1302 = P1^6; sbit rst_1302 = P1^7; uchar bdata dat; sbit dat0 = dat^0; sb
[单片机]
51单片机 时钟
1.时钟周期是机器周期的12倍 , 机器周期是晶振频率的倒数 2.51单片机1个机器周期=12个时钟周期,频率为12MHZ,则一个机器周期为1US,具体到定时器程序就是,假如你想定1MS,那么单片机每次加一个一,就要过1US,那么1MS就要加1000次,所以用65535-1000=64535;再把64535换成16进制为FC17,把FC付给TH0,17给TLO,即可定时1MS,因为65535他就溢出进入中断。 3.时钟周期又称为振荡周期,由单片机内部振荡电路OSC产生,定义为OSC时钟频率的倒数。时钟周期又称为节拍(用P表示)。时钟周期是时序中的最小单位。一个状态有两个节拍, 机器周期定义为实现特定功能所需的时间。MCS
[单片机]
51单片机课程设计——led点阵广告牌程序设计
上学期期末的课设题目是led点阵广告牌,当时的要求如下: (1)能够显示不同字符的LED点阵广告牌; (2)按键切换不同的显示效果(如闪烁,静止,平移等); (3)按键切换不同的显示内容; (4)能够显示图形或自定义字符; (5)其他功能(创新部分); (6)系统调试、分析、总结与功能实现。 当时用的是我用是的普中科技的STC90C51RD+的单片机,不过只要是51单片机,换哪个51内核的芯片都可以,只要电路和程序匹配就可以。 我用的那款普中科技的51单片机可以直接连线决定线路的布置,不需要自己去重新焊一个电路板。 然后我根据任务要求连接了电路,写了对应的程序,还有proteus仿真。 另外,觉得有趣可以点个赞;有什么
[单片机]
<font color='red'>51单片机</font>课程设计——led点阵广告牌程序设计
基于51单片机智能雨刷设计
一.硬件方案 本设计运用雨滴传感器感应雨量的大小,把感应信号输给单片机系统,然后通过软件控制雨刷电机根据相应的环境做出不同的转动。 主要由51单片机最小系统+步进电机+1602显示+湿度传感器+ADC0832芯片+按键组成;如图: 二.设计功能 (1)采用lcd1602液晶显示雨水量值。 (2)雨滴传感器检测雨水量,adc0832对雨滴传感器信号ad转换数字信号单片机处理。 (3)有手动模式和自动模式控制两种,手动模式实现开关操作,还可以通过按键调整速度。自动模式下根据雨水量自动控制步进电机的速度,低于下限步进电机停止工作,上限和下限之间步进电机1档(慢速)工作,大于上限步进电机2档(快速)工作。 (4)四个按键:设置、加
[单片机]
基于<font color='red'>51单片机</font>的<font color='red'>智能</font>雨刷设计
80C51单片机程序(4)
//80C51单片机程序 中断的使用 #include reg52.h //包含reg52.h头文件 #define uint unsigned int //宏定义uint的数据类型为unsigned int型 #define uchar unsigned char //宏定义uchar的数据类型为unsigned char型 sbit D1=P2^6; sbit W1=P2^7; sbit D2=P1^0; uchar num; uchar code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管0-9 void de
[单片机]
基于51单片机—多功能秒表
功能介绍: 1. 三位数码管显示数据00.0~99.9 2.一次计时中可记录4个数据(按一下存一次数据),存在EEPROM中(若按了五下,则会丢失第一次按下的数据) 3.两个按键功能为,暂停,启动,存数,取数,翻页(查看下一个存的时间) 硬件连接 1.两个573控制数码管的段选,位选,573数据输入端接P0口,段选,位选分别接,P1^1,P1^0 2.P1^3,P1^4分别接EEPROM的时钟线(SCL),数据线(SDA) 3.独立按键K0.K1分别接外部中断0,1接口 P3^2,P3^3 4.使用定时器0的工作方式2 介绍 1.K0分 短按(小于2s),长按(大于2s),短按为定时器
[单片机]
基于51单片机红外编码解码的C语言程序
当学习键按下后,红外接收头便可将接受到的信号存储到单片机中。在接受到通用遥控器发出的信号后,如果按下发射键,单片机将调出刚刚储存的信息,通过红外发射头发射出和遥控器一样的信号来达到控制的作用。 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit studylamp=P2^7; sbit lamp=P2^6; sbit studykey=P3^2; sbit remotein=P1^1;
[单片机]
74HC595使用SPI总线连接51单片机的驱动程序
函数名称: HC595SendData //8位串行输入/输出,并行输出 功能描述: 向SPI总线发送数据 这里只说明并行输入的一般情况 管脚描述:请参考相关的芯片资料 void HC595SendData(unsigned int SendVal) { unsigned char i; for(i=0;i 8;i++) { if((SendVal i)&0x80) MOSIO=1; // set dataline high //若输入最高位为1,则令串行输入为1,反之输入0 else MOSIO=0; S_CLK=0; //上升沿输入每一位 NOP(); //datasheet给
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved