找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6489|回复: 10
打印 上一主题 下一主题
收起左侧

基于HX711的小型称重电子秤STM32代码

  [复制链接]
跳转到指定楼层
楼主
ID:157238 发表于 2019-1-7 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
去年学校电子设计大赛的题目:小型电子秤
所用器件:stm32f103zet6最小系统板 ,HX711,压变片,按键,3.2寸显示屏。
IDE:keil

单片机源程序如下:
  1. /************************************************************************************
  2. *功能:实现重物的称量,去皮,最大承重5kg
  3. *所用器件:stm32f103zet6最小系统板,HX711芯片,压变片,按键,蜂鸣器,野火3.2寸显示屏,干电池供电。
  4. *时间:18.6.5
  5. *************************************************************************************/
  6. //#include "stm32f10x.h"
  7. #include "bsp_ili9341_lcd.h"
  8. #include "delay.h"
  9. #include "HX711.h"
  10. #include "usart.h"
  11. #include "beep.h"
  12. #include "led.h"
  13. #include "key.h"
  14. void Saomiao(void);
  15.        
  16. unsigned int price_count=0;//计算价格的位数
  17. unsigned int money=0;//价格值
  18. unsigned char price_buffer[3]={0x00,0x00,0x00};//用于存储价格的值。
  19. char  disbuff1[100], disbuff2[100],disbuff3[100],disbuff4[100],disbuff5[100],disbuff6[100],disbuff7[100];//用于存储重量,皮重,单价,总价等数据。
  20. unsigned int z=0 ,z1,z2,z3,zz[3]={0x00,0x00,0x00};//用来存储计算三次重物的值

  21. int main(void)
  22. {       
  23.        
  24.         ILI9341_Init();
  25.         HX711_Init();
  26.         delay_init();
  27.         LED_Init();
  28.         BEEP_Init();
  29.         KEY_Init();
  30.         NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  31.         uart_init(9600);         //串口初始化为9600
  32.         ILI9341_GramScan(5);
  33.         LCD_SetFont(&Font16x24);//设置字体为8x16大小
  34.         LCD_SetColors(BLUE ,WHITE);//设置字体的颜色为红色,背景的颜色为白色
  35.   ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH );//设置清屏,显示全黑
  36.         Get_Fur();                                //称毛皮重量
  37.         printf("\r\n 毛皮重量的大小为=%d g\r\n:",Weight_Fur);//打印毛皮的重量
  38.        
  39.         //delay_ms(1000);
  40.         delay_ms(1000);
  41.         Get_Fur();                                //重新获取毛皮重量
  42.   printf("\r\n 重新获取的毛皮重量的大小为=%d g\r\n:",Weight_Fur);//重新打印毛皮的重量
  43.        
  44. //        sprintf(disbuff1,"Fur: %d ",Weight_Fur);//使用c标准库把变量转化成字符串
  45. //  LCD_ClearLine(LINE(1));        //清除单行文字
  46. //  ILI9341_DispStringLine_EN(LINE(1),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
  47.         ILI9341_DispStringLine_EN(LINE(0),"Weight:");
  48.         ILI9341_DispStringLine_EN(LINE(2),"Gross:");
  49.         ILI9341_DispStringLine_EN(LINE(4),"Unit:");
  50.         ILI9341_DispStringLine_EN(LINE(6),"Total:");
  51.         LED_ON ;
  52.         BEEP_ON ;
  53.         delay_ms(500);
  54.         LED_OFF;
  55.         BEEP_OFF;
  56. //LCD_SetColors(WHITE ,BLUE );//设置背景前景色
  57.         while(1)
  58.         {
  59. //                zz[z]=Get_Zhongwu();
  60. //                z++;
  61. //                 if(z==2)
  62. //                 {
  63. //                        z=0;
  64. //                         Weight_Zhongwu = (zz[0]+zz[1]+zz[2])/3;
  65. //                 }
  66. //                z1=Get_Zhongwu();
  67. //                //delay_ms(100);
  68. //                z2=Get_Zhongwu();
  69. //                //delay_ms(100);
  70. //                z3=Get_Zhongwu();
  71. //                //delay_ms(100);
  72. //                Weight_Zhongwu=(z1+z2+z3)/3;
  73.                 Get_Zhongwu ();
  74.                 printf("净重量 = %.1f g\r\n",Weight_Zhongwu); //打印所称量重物的质量(去除毛皮之后)
  75.     sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c标准库把变量转化成字符串
  76.     LCD_ClearLine(LINE(0));        //清除单行文字
  77.     ILI9341_DispStringLine_EN(LINE(0),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
  78.                 //delay_ms(1000);
  79.     Saomiao();

  80.         }
  81. }

  82. void Saomiao(void)
  83. {
  84.         u8 key_num;
  85.         key_num=Key_Scan(1);
  86.         if(key_num)
  87.         {
  88.         if(key_num==11)
  89.         {               
  90.                
  91.                 while(!KEY10)
  92.                 Get_Fur();//获得毛皮的重量
  93.                
  94.           sprintf(disbuff1,"Gross: %.1f ",Weight_Zhongwu );//使用c标准库把变量转化成字符串
  95.     LCD_ClearLine(LINE(2));        //清除单行文字
  96.     ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
  97.         }
  98.                 if(key_num==12)//清除数据进行二次测量
  99.         {
  100.                 while(!KEY11)
  101.                 price_count =0;
  102.                 price_buffer[0]=0;
  103.                 price_buffer[1]=0;
  104.                 price_buffer[2]=0;
  105.                 LCD_ClearLine(LINE(2));        //清除单行文字
  106.                 LCD_ClearLine(LINE(4));        //清除单行文字
  107.                 LCD_ClearLine(LINE(6));        //清除单行文字
  108.                 ILI9341_DispStringLine_EN(LINE(2),"Gross:");
  109.                 ILI9341_DispStringLine_EN(LINE(4),"Unit:");//清除单价信息
  110.           ILI9341_DispStringLine_EN(LINE(6),"Total:");//清除总价信息
  111.         }
  112.         if(key_num==13)//计算总价
  113.         {
  114.                 while(!KEY12)
  115.                        
  116.                 printf("\r\n 打印总价:\r\n");
  117.                 printf("\r\n 第一位=%d\r\n",price_buffer[0]);
  118.                 printf("\r\n 第二位=%d\r\n",price_buffer[1]);
  119.                 printf("\r\n 第三位=%d\r\n",price_buffer[2]);
  120.                 if(price_buffer[2]==0)
  121.                 {
  122.                         if(price_count ==2)
  123.                         {
  124.                 money=price_buffer[0]*10+price_buffer[1];//获取输入的价格
  125.                         }
  126.                         if(price_count==3)
  127.                         {
  128.                                 money = price_buffer[0]*100;
  129.                         }
  130.                         if(price_count ==1)
  131.                         {
  132.                                 money=price_buffer[0];
  133.                         }
  134.                 }
  135.                 else if(price_buffer[2]==0)
  136.                 {
  137.                         money=price_buffer[0]*10+price_buffer[1];//获取输入的价格
  138.                 }
  139.                 else money=price_buffer[0]*100+price_buffer[1]*10+price_buffer[2];
  140.                 printf("\r\n输入总价为:%d\r\n",money);
  141.                 printf("\r\n重物=%d\r\n",Weight_Zhongwu);
  142.                 money=money*Weight_Zhongwu; //计算出总价
  143.                 sprintf(disbuff4,"Total: %d ",money);//使用c标准库把变量转化成字符串
  144.     LCD_ClearLine(LINE(6));        //清除单行文字
  145.     ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后显示该字符串即可,其它变量也是这样处理
  146.         }
  147.         if(key_num>=1&&key_num<=10)//当输入的是数字时,最多能输入三位的数字
  148.         {
  149.                 while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
  150.                 printf("\r\n 输入的数字是=%d\r\n ",key_num);
  151.                 price_buffer[price_count]=key_num-1;
  152.                 price_count++;//                             1.2.3表输入的顺序,前中后表位置
  153.                
  154.                
  155.                 sprintf(disbuff5," %d ",price_buffer[2]);//使用c标准库把变量转化成字符串
  156.     ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
  157.     sprintf(disbuff6," %d ",price_buffer[1]);//使用c标准库把变量转化成字符串
  158.     ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
  159.                 sprintf(disbuff7," %d ",price_buffer[0]);//使用c标准库把变量转化成字符串
  160.     ILI9341_DispString_EN ( 205 ,96,disbuff7);//后1
  161.                
  162. //                sprintf(disbuff3,"Unit: %d ",price_buffer[0]+price_buffer[1]+price_buffer[2]+price_buffer[3]);//使用c标准库把变量转化成字符串
  163. //      LCD_ClearLine(LINE(4));        //清除单行文字3
  164. //      ILI9341_DispStringLine_EN(LINE(4),disbuff3);//然后显示该字符串即可,其它变量也是这样处理
  165.                 if(price_count==2)
  166.                 {
  167.                         ILI9341_DispString_EN ( 150 ,96,disbuff7);//中
  168.                         ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
  169.                          ILI9341_DispString_EN ( 205 ,96,disbuff6);//后1
  170. //                        sprintf(disbuff3,"Unit: %d ",price_buffer[0]);//使用c标准库把变量转化成字符串
  171. //      LCD_ClearLine(LINE(3));        //清除单行文字
  172. //      ILI9341_DispStringLine_EN(LINE(3),disbuff3);//然后显示该字符串即可,其它变量也是这样处理
  173.                 }
  174.                 if(price_count==3)
  175.                 {
  176.                         ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
  177.                         ILI9341_DispString_EN ( 95 ,96,disbuff7);//前3
  178.                         ILI9341_DispString_EN ( 205 ,96,disbuff5);//后1
  179.                         price_count=3;
  180.                 }
  181.         }
  182. }
  183. }
复制代码

所有资料51hei提供下载:
电子秤程序.7z (204.09 KB, 下载次数: 309)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:163277 发表于 2019-3-14 17:56 | 只看该作者
这个可以出数据了,谢谢
回复

使用道具 举报

板凳
ID:256651 发表于 2019-3-27 14:51 | 只看该作者
如果我的显示屏是ALIENTEK 4.3寸的LCD呢 我该怎么改这个程序
回复

使用道具 举报

地板
ID:510593 发表于 2019-9-29 20:10 | 只看该作者
哥可以发我一份吗,我黑米不够
回复

使用道具 举报

5#
ID:680632 发表于 2020-1-3 20:41 来自手机 | 只看该作者
老哥,我精英版怎么用
回复

使用道具 举报

6#
ID:364328 发表于 2020-2-19 18:14 | 只看该作者
请问有没有原理图啊
回复

使用道具 举报

7#
ID:866661 发表于 2021-2-7 15:43 | 只看该作者
老铁,原理图一起呀!
回复

使用道具 举报

8#
ID:883378 发表于 2021-2-24 10:13 | 只看该作者
怎么接线呢
  我是小白不要打我i
回复

使用道具 举报

9#
ID:196383 发表于 2021-3-11 10:08 | 只看该作者
老铁,原理图一起呀!
回复

使用道具 举报

10#
ID:866661 发表于 2021-3-12 16:28 | 只看该作者
发个原理图,老铁!
回复

使用道具 举报

11#
ID:699392 发表于 2021-7-9 21:19 来自手机 | 只看该作者
正好有这个芯片,放着吃灰好几年了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表