找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 7801|回復(fù): 10
收起左側(cè)

基于HX711的小型稱重電子秤STM32代碼

  [復(fù)制鏈接]
ID:157238 發(fā)表于 2019-1-7 22:35 | 顯示全部樓層 |閱讀模式
去年學(xué)校電子設(shè)計(jì)大賽的題目:小型電子秤
所用器件:stm32f103zet6最小系統(tǒng)板 ,HX711,壓變片,按鍵,3.2寸顯示屏。
IDE:keil

單片機(jī)源程序如下:
  1. /************************************************************************************
  2. *功能:實(shí)現(xiàn)重物的稱量,去皮,最大承重5kg
  3. *所用器件:stm32f103zet6最小系統(tǒng)板,HX711芯片,壓變片,按鍵,蜂鳴器,野火3.2寸顯示屏,干電池供電。
  4. *時(shí)間: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;//計(jì)算價(jià)格的位數(shù)
  17. unsigned int money=0;//價(jià)格值
  18. unsigned char price_buffer[3]={0x00,0x00,0x00};//用于存儲(chǔ)價(jià)格的值。
  19. char  disbuff1[100], disbuff2[100],disbuff3[100],disbuff4[100],disbuff5[100],disbuff6[100],disbuff7[100];//用于存儲(chǔ)重量,皮重,單價(jià),總價(jià)等數(shù)據(jù)。
  20. unsigned int z=0 ,z1,z2,z3,zz[3]={0x00,0x00,0x00};//用來(lái)存儲(chǔ)計(jì)算三次重物的值

  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();          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  31.         uart_init(9600);         //串口初始化為9600
  32.         ILI9341_GramScan(5);
  33.         LCD_SetFont(&Font16x24);//設(shè)置字體為8x16大小
  34.         LCD_SetColors(BLUE ,WHITE);//設(shè)置字體的顏色為紅色,背景的顏色為白色
  35.   ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH );//設(shè)置清屏,顯示全黑
  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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  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 );//設(shè)置背景前景色
  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); //打印所稱量重物的質(zhì)量(去除毛皮之后)
  75.     sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  95.     LCD_ClearLine(LINE(2));        //清除單行文字
  96.     ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后顯示該字符串即可,其它變量也是這樣處理
  97.         }
  98.                 if(key_num==12)//清除數(shù)據(jù)進(jìn)行二次測(cè)量
  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:");//清除單價(jià)信息
  110.           ILI9341_DispStringLine_EN(LINE(6),"Total:");//清除總價(jià)信息
  111.         }
  112.         if(key_num==13)//計(jì)算總價(jià)
  113.         {
  114.                 while(!KEY12)
  115.                        
  116.                 printf("\r\n 打印總價(jià):\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];//獲取輸入的價(jià)格
  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];//獲取輸入的價(jià)格
  138.                 }
  139.                 else money=price_buffer[0]*100+price_buffer[1]*10+price_buffer[2];
  140.                 printf("\r\n輸入總價(jià)為:%d\r\n",money);
  141.                 printf("\r\n重物=%d\r\n",Weight_Zhongwu);
  142.                 money=money*Weight_Zhongwu; //計(jì)算出總價(jià)
  143.                 sprintf(disbuff4,"Total: %d ",money);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  144.     LCD_ClearLine(LINE(6));        //清除單行文字
  145.     ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后顯示該字符串即可,其它變量也是這樣處理
  146.         }
  147.         if(key_num>=1&&key_num<=10)//當(dāng)輸入的是數(shù)字時(shí),最多能輸入三位的數(shù)字
  148.         {
  149.                 while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
  150.                 printf("\r\n 輸入的數(shù)字是=%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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  156.     ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
  157.     sprintf(disbuff6," %d ",price_buffer[1]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  158.     ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
  159.                 sprintf(disbuff7," %d ",price_buffer[0]);//使用c標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  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標(biāo)準(zhǔn)庫(kù)把變量轉(zhuǎn)化成字符串
  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. }
復(fù)制代碼

所有資料51hei提供下載:
電子秤程序.7z (204.09 KB, 下載次數(shù): 309)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:163277 發(fā)表于 2019-3-14 17:56 | 顯示全部樓層
這個(gè)可以出數(shù)據(jù)了,謝謝
回復(fù)

使用道具 舉報(bào)

ID:256651 發(fā)表于 2019-3-27 14:51 | 顯示全部樓層
如果我的顯示屏是ALIENTEK 4.3寸的LCD呢 我該怎么改這個(gè)程序
回復(fù)

使用道具 舉報(bào)

ID:510593 發(fā)表于 2019-9-29 20:10 | 顯示全部樓層
哥可以發(fā)我一份嗎,我黑米不夠
回復(fù)

使用道具 舉報(bào)

ID:680632 發(fā)表于 2020-1-3 20:41 來(lái)自手機(jī) | 顯示全部樓層
老哥,我精英版怎么用
回復(fù)

使用道具 舉報(bào)

ID:364328 發(fā)表于 2020-2-19 18:14 | 顯示全部樓層
請(qǐng)問有沒有原理圖啊
回復(fù)

使用道具 舉報(bào)

ID:866661 發(fā)表于 2021-2-7 15:43 | 顯示全部樓層
老鐵,原理圖一起呀!
回復(fù)

使用道具 舉報(bào)

ID:883378 發(fā)表于 2021-2-24 10:13 | 顯示全部樓層
怎么接線呢
  我是小白不要打我i
回復(fù)

使用道具 舉報(bào)

ID:196383 發(fā)表于 2021-3-11 10:08 | 顯示全部樓層
老鐵,原理圖一起呀!
回復(fù)

使用道具 舉報(bào)

ID:866661 發(fā)表于 2021-3-12 16:28 | 顯示全部樓層
發(fā)個(gè)原理圖,老鐵!
回復(fù)

使用道具 舉報(bào)

ID:699392 發(fā)表于 2021-7-9 21:19 來(lái)自手機(jī) | 顯示全部樓層
正好有這個(gè)芯片,放著吃灰好幾年了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表