一.硬件准备

1.压力传感器(HX711称重模块)

2.接线说明

如上图接线所示:称重模块HX711模块各个引脚与单片机引脚对应如下:

(1).VCC——>VCC

(2).GND——>GND

(3).SCLK——>SDA

(4).DT——>SCLK

注:引脚一定要对应接好,尤其是数据(SDA)脚和时钟(SCLK)脚

二.原理图

(一).称重模块原理图

(二).单片机原理图

三.代码详解及功能演示

(一).LCD_1602显示重量

1.子代码详解(HX711获取AD值)

/*获取ad值*/
unsigned long HX711_Read(void)
{unsigned long count; unsigned char i; HX711_DOUT = 1; _nop_();_nop_();HX711_SCK = 0; count=0;for(i=0; i<24; i++){ HX711_SCK = 1; count = count << 1; HX711_SCK = 0; if(HX711_DOUT)count++; } HX711_SCK = 1; count = count^0x800000;//第25个脉冲下降沿来时,转换数据_nop_();_nop_();HX711_SCK = 0;  return(count);
}/*称毛皮重*/
void Get_Maopi()
{Weight_Maopi = HX711_Read();
//    Weight_Maopi = (unsigned int)((float)Weight_Maopi/423.15);
}/*称实物重*/
void Get_Weight()
{Weight_Shiwu = HX711_Read();  Weight_Shiwu = Weight_Shiwu - Weight_Maopi;Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/429.5);
}

2.按键控制

/*按键扫描*/
void Keyscan()
{if(key1 == 0)Delay(10);if(key1 == 0){Get_Maopi();while(!key1);}if(key2 == 0)Delay(10);if(key2 == 0){Weight_Maopi = 0;while(!key2);}
}

3.源代码

#include<reg52.h>
#include <intrins.h>/*I/O口声明*/
sbit LCD1602_RS = P3^5;
sbit LCD1602_RW = P3^6;
sbit LCD1602_EN = P3^4;
sbit HX711_DOUT = P2^1;
sbit HX711_SCK = P2^0;
sbit key1 = P3^0;
sbit key2 = P3^1;/*全局变量定义*/
unsigned long Weight_Shiwu = 0;
unsigned long Weight_Maopi = 0;/*函数声明*/
void Delay(unsigned int n);
void Init_LCD1602();//LCD1602初始化函数
void LCD1602_write_com(unsigned char com);    //写指令
void LCD1602_write_word(unsigned char *s);    //写字符串
void LCD1602_write_data(unsigned char dat);    //写数据
unsigned long HX711_Read(void);
void Keyscan();
void Get_Maopi();
void Get_Weight();int main()
{ Init_LCD1602();        //LCD1602初始化LCD1602_write_com(0x80);        //移动光标到第一行首位LCD1602_write_word(" Dian Zi Cheng! ");        //显示 Dian Zi Cheng! LCD1602_write_com(0x80 + 0x40);            //移动光标到第二行首位LCD1602_write_word("Weight :"),            //显示Weight :Delay(1000);        //1s延时while(1){Keyscan();Get_Weight();    LCD1602_write_com(0x80+0x49);        //移动光标到第二行第九位LCD1602_write_data(Weight_Shiwu%10000/1000 + 0X30);        LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);LCD1602_write_data(Weight_Shiwu%10 + 0X30);LCD1602_write_word(" g");}return 0;
}/*称实物重*/
void Get_Weight()
{Weight_Shiwu = HX711_Read();  Weight_Shiwu = Weight_Shiwu - Weight_Maopi;Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/429.5);
}/*延时子函数*/
void Delay(unsigned int n)
{int i, j;for(i=0; i<n; i++)for(j=0; j<110; j++);
}//判断液晶忙,如果忙则等待
void Read_Busy()
{unsigned char busy;P0 = 0xff;LCD1602_RS = 0;LCD1602_RW = 1;do     //此语句先执行后判断{LCD1602_EN = 1;busy = P0;LCD1602_EN = 0;     //不使用时将EN拉低释放,以便于下次写数据的时候直接将EN置高}while(busy & 0x80);//判断P0的最高位是否为1,为1时忙碌(禁止),为0时不忙(允许发数据)//直到不忙时才跳出循环
}/*写指令*/
void LCD1602_write_com(unsigned char com)
{Read_Busy();//判断忙否LCD1602_RS = 0;Delay(10);LCD1602_RW = 0;    P0 = com;LCD1602_EN = 1;Delay(10);LCD1602_EN = 0;
}/*写数据*/
void LCD1602_write_data(unsigned char dat)
{Read_Busy();LCD1602_RS = 1;Delay(10);LCD1602_RW = 0;    P0 = dat;LCD1602_EN = 1;Delay(10);LCD1602_EN = 0;
}/*写连续字符(字符串)*/
void LCD1602_write_word(unsigned char *s)
{while(*s != '\0'){LCD1602_write_data(*s);s++;}
}/*初始化LCD1602*/
void Init_LCD1602()
{LCD1602_EN = 0;//LCD1602_RW = 0;LCD1602_write_com(0x38);LCD1602_write_com(0x0c);LCD1602_write_com(0x06);LCD1602_write_com(0x01);
}/*获取ad值*/
unsigned long HX711_Read(void)
{unsigned long count; unsigned char i; HX711_DOUT = 1; _nop_();_nop_();HX711_SCK = 0; count=0;for(i=0; i<24; i++){ HX711_SCK = 1; count = count << 1; HX711_SCK = 0; if(HX711_DOUT)count++; } HX711_SCK = 1; count = count^0x800000;//第25个脉冲下降沿来时,转换数据_nop_();_nop_();HX711_SCK = 0;  return(count);
}/*称毛皮重*/
void Get_Maopi()
{Weight_Maopi = HX711_Read();
//    Weight_Maopi = (unsigned int)((float)Weight_Maopi/423.15);
}/*按键扫描*/
void Keyscan()
{if(key1 == 0)Delay(10);if(key1 == 0){Get_Maopi();while(!key1);}if(key2 == 0)Delay(10);if(key2 == 0){Weight_Maopi = 0;while(!key2);}
}

4.功能演示

(二).LCD_1602显示重量及计算价钱(单价可以按键调节)

源代码如下

#include<reg52.h>
#include <intrins.h>/*I/O口声明*/
sbit LCD1602_RS = P3^5;
sbit LCD1602_RW = P3^6;
sbit LCD1602_EN = P3^4;
sbit HX711_DOUT = P2^1;
sbit HX711_SCK = P2^0;
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
sbit key4 = P3^3;
sbit Flag_ERROR = P2^3;/*全局变量定义*/
unsigned long Weight_Shiwu = 0;
unsigned long Weight_Maopi = 0;
unsigned int price = 1;
unsigned long all = 0;
/*函数声明*/
void Delay(unsigned int n);
void Init_LCD1602();//LCD1602初始化函数
void LCD1602_write_com(unsigned char com);    //写指令
void LCD1602_write_word(unsigned char *s);    //写字符串
void LCD1602_write_data(unsigned char dat);    //写数据
unsigned long HX711_Read(void);
void Keyscan();
void Get_Maopi();
void Get_Weight();
void All_Price();
int main()
{ Init_LCD1602();        //LCD1602初始化LCD1602_write_com(0x80);//移动光标到第一行首位LCD1602_write_word(" Dian Zi Cheng! ");    //显示 Dian Zi Cheng! LCD1602_write_com(0x80 + 0x40);            //移动光标到第二行首位LCD1602_write_word(" Welcom to use! ");    //显示Welcom to use!Delay(1000);        //1s延时LCD1602_write_com(0x01); //清屏LCD1602_write_com(0x80);//移动光标到第一行首位LCD1602_write_word("Weight :");//显示Weight :LCD1602_write_com(0x80 + 0x40);//移动光标到第二行首位LCD1602_write_word("p:");//显示price ://Delay(1000);        //1s延时while(1){Keyscan();Get_Weight();All_Price();if(Weight_Shiwu > 5000)        //超重报警{Flag_ERROR = 0;      //报警LCD1602_write_com(0x80+0x09);LCD1602_write_word("ERROR!");    }else{Flag_ERROR = 1;//关闭蜂鸣器        LCD1602_write_com(0x80+0x09);//移动光标到第1行第九位LCD1602_write_data(Weight_Shiwu%10000/1000 + 0X30);        LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);LCD1602_write_data(Weight_Shiwu%10 + 0X30);LCD1602_write_word(" g");LCD1602_write_com(0x80+0x43);        //移动光标到第二行第3位LCD1602_write_data(price/10 + 0X30);LCD1602_write_data(price%10 + 0X30);LCD1602_write_word("Y");LCD1602_write_com(0x80+0x47);        //移动光标到第二行第7位LCD1602_write_word("All:");//显示All_price :LCD1602_write_data(all%1000/100 + 0X30);LCD1602_write_data(all%100/10 + 0X30);LCD1602_write_data(all%10 + 0X30);LCD1602_write_word("Y");        }}return 0;
}//计算价钱
void All_Price()
{    all = price *Weight_Shiwu;
}/*称实物重*/
void Get_Weight()
{Weight_Shiwu = HX711_Read();  Weight_Shiwu = Weight_Shiwu - Weight_Maopi;Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/429.5);}/*延时子函数*/
void Delay(unsigned int n)
{int i, j;for(i=0; i<n; i++)for(j=0; j<114; j++);
}//判断液晶忙,如果忙则等待
void Read_Busy()
{unsigned char busy;P0 = 0xff;LCD1602_RS = 0;LCD1602_RW = 1;do     //此语句先执行后判断{LCD1602_EN = 1;busy = P0;LCD1602_EN = 0;     //不使用时将EN拉低释放,以便于下次写数据的时候直接将EN置高}while(busy & 0x80);//判断P0的最高位是否为1,为1时忙碌(禁止),为0时不忙(允许发数据)//直到不忙时才跳出循环
}/*写指令*/
void LCD1602_write_com(unsigned char com)
{Read_Busy();//判断忙否LCD1602_RS = 0;Delay(10);LCD1602_RW = 0;    P0 = com;LCD1602_EN = 1;Delay(10);LCD1602_EN = 0;
}/*写数据*/
void LCD1602_write_data(unsigned char dat)
{Read_Busy();LCD1602_RS = 1;Delay(10);LCD1602_RW = 0;    P0 = dat;LCD1602_EN = 1;Delay(10);LCD1602_EN = 0;
}/*写连续字符(字符串)*/
void LCD1602_write_word(unsigned char *s)
{while(*s != '\0'){LCD1602_write_data(*s);s++;}
}/*初始化LCD1602*/
void Init_LCD1602()
{LCD1602_EN = 0;//LCD1602_RW = 0;LCD1602_write_com(0x38);//显示模式设置LCD1602_write_com(0x0c);//显示开及光标设置LCD1602_write_com(0x06);//显示光标移动设置LCD1602_write_com(0x01);//显示清屏
}/*获取ad值*/
unsigned long HX711_Read(void)
{unsigned long count; unsigned char i; HX711_DOUT = 1; _nop_();_nop_();HX711_SCK = 0; count=0;for(i=0; i<24; i++){ HX711_SCK = 1; count = count << 1; HX711_SCK = 0; if(HX711_DOUT)count++; } HX711_SCK = 1; count = count^0x800000;//第25个脉冲下降沿来时,转换数据_nop_();_nop_();HX711_SCK = 0;  return(count);
}/*称毛皮重*/
void Get_Maopi()
{Weight_Maopi = HX711_Read();
//    Weight_Maopi = (unsigned int)((float)Weight_Maopi/423.15);
}/*按键扫描*/
void Keyscan()
{if(key1 == 0){Delay(5);if(key1 == 0){while(!key1);Get_Maopi();            }}if(key2 == 0){Delay(5);if(key2 == 0){while(!key2);Weight_Maopi = 0;        }}if(key3 == 0){Delay(5);if(key3 == 0){price++;while(!key3);}}if(key4 == 0){Delay(5);if(key4 == 0){price--;while(!key4);}}
}

功能演示

四.多功能电子秤显示日历时间及闹钟设置

注:此内容详见专栏“51单片机”中《万年历》代码详解

最后,希望我的分享对你有所启发,敬请关注,持续更新,共同进步!

51单片机设计多功能电子秤(实训项目)相关推荐

  1. 山西高平地域文化导入美术设计实训项目的实践

    地域文化,是指某个地域的人们在特定的范围内,在自然环境的基础上,在长期的生产生活中创造的.人类活动的产物.山西高平是神农炎帝的故里,长平之战的发生地,是一个有着很深文化积淀的新兴城市,行政区域是国土面 ...

  2. 51单片机综合课程设计多功能电子秤(显示时间、温度、存储、串口、报警装置等)

    51单片机综合课程设计----多功能电子秤 关键词:proteus仿真.51单片机.DS1302时钟芯片.DB18B20温度芯片.AT24C02存储芯片.LCD1602液晶屏.ADC0832芯片等,文 ...

  3. 基于tutk方案的p2p源码_基于JAVA的局域网文件共享平台P2P实训项目源码(毕业设计 课程设计)...

    [实例简介] 基于JAVA的局域网文件共享平台P2P实训项目源码(毕业设计 课程设计). 可直接运行.做毕业设计.课程设计或者想研究下技术的可以下载学习.需要更多资源的可以关注我. [实例截图] [核 ...

  4. 单片机多功能电子琴课设_基于51单片机的多功能电子琴设计.doc

    基于51单片机的多功能电子琴设计 基于51单片机的多功能电子琴的设计 摘要 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编 ...

  5. 单片机多功能电子琴课设_基于51单片机设计的简易电子琴

    基于51单片机设计的简易电子琴 下面直接给出proteus仿真电路 代码如下:#include #define uint unsigned int #define uchar unsigned cha ...

  6. 按照题目打印菜单c语言,--单片机C语言编程实训

    实 习 报 告 实习地点:201机房 实习时间:2014.12.1--2014.12.6 实习项目:单片机C语言编程实训 指导老师:骆 乐 姓 名: 班 级:电信3121 一. 实习内容 1.计算字符 ...

  7. java毕业生设计高校企业实训系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计高校企业实训系统计算机源码+系统+mysql+调试部署+lw java毕业生设计高校企业实训系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  8. 实训项目2Linux基本命令,实训项目2 Linux文件系统管理

    实训项目2 Linux文件系统管理 发布时间:2011-06-24 15:51:10来源:红联作者:397778823 一. 实训目的: 1. 掌握磁盘分区的方法: 2. 掌握文件系统的建立.挂装.解 ...

  9. python实训项目-黑马程序员上海校区Python21期Django项目实训

    黑马程序员上海中心 月薪一万只是起点 关注 晚上十点,一名名Python学生正在酣畅淋漓地撸代码,手指不间断地敲击着键盘,发出机械而清脆的声音. 各个小组在经过为期4天的django项目小组开发,终于 ...

最新文章

  1. linux web高级编程,寒假学习 第16.17天 (linux 高级编程)
  2. mysql导入csv文件
  3. 删除vs中最近的项目的方法
  4. python微信验证码收不到_给微信回复消息收不到(Python)
  5. Python基础(一)简介与安装
  6. Android之内存机制分析-Android堆和栈
  7. 装修公司都有什么套路?
  8. pandas 调整列的顺序
  9. 福昕pdf阅读器 去广告版|福昕pdf阅读器Foxit reader 去广告电脑版下载v9.3
  10. java时间格式化工具类_java日期格式化工具类
  11. win10 + ubuntu20.04 双系统卸载(删除) ubuntu20.04 (图文)
  12. php阴历阳历互转类(1900~2100年)
  13. Single Radio Voice Call Continuity (SRVCC)
  14. LZW压缩算法(数据无损压缩)
  15. java解析micaps_9210的Micaps第13类卫星云图数据
  16. 回音壁模式matlab,一种回音壁模式光学微腔的制作方法
  17. 前沿重器[24] | 聊聊对话系统:内容输出
  18. Android开发学习之基于ZBar实现微信扫一扫
  19. 阿里云AI训练营第一天
  20. android 解压rar5,RAR解压缩软件_Winrar官方版 V5.50.42 安卓去广告版

热门文章

  1. Linux系统中安装Oracle 数据库操作
  2. .NET获取快递100提供的查询快递信息的方法
  3. 【SSL】2325细胞问题
  4. 神经网络正向传播和反向传播
  5. 珍珠为宝,稻米为王,数据可视化带你了解粮食那些事儿
  6. 聊聊个人站长的自我修养
  7. 一名普通Java程序员的2022的总结和2023的展望
  8. 微信小程序云开发学习
  9. 小白c语言学习笔记(2)——有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
  10. Android7工程模式,安卓手机怎么进工程模式 安卓手机进工程模式教程【详解】