標題:
基于HX711的小型稱重電子秤STM32代碼
[打印本頁]
作者:
le51
時間:
2019-1-7 22:35
標題:
基于HX711的小型稱重電子秤STM32代碼
去年學校電子設計大賽的題目:小型電子秤
所用器件:stm32f103zet6最小系統(tǒng)板 ,HX711,壓變片,按鍵,3.2寸顯示屏。
IDE:keil
單片機源程序如下:
/************************************************************************************
*功能:實現(xiàn)重物的稱量,去皮,最大承重5kg
*所用器件:stm32f103zet6最小系統(tǒng)板,HX711芯片,壓變片,按鍵,蜂鳴器,野火3.2寸顯示屏,干電池供電。
*時間:18.6.5
*************************************************************************************/
//#include "stm32f10x.h"
#include "bsp_ili9341_lcd.h"
#include "delay.h"
#include "HX711.h"
#include "usart.h"
#include "beep.h"
#include "led.h"
#include "key.h"
void Saomiao(void);
unsigned int price_count=0;//計算價格的位數(shù)
unsigned int money=0;//價格值
unsigned char price_buffer[3]={0x00,0x00,0x00};//用于存儲價格的值。
char disbuff1[100], disbuff2[100],disbuff3[100],disbuff4[100],disbuff5[100],disbuff6[100],disbuff7[100];//用于存儲重量,皮重,單價,總價等數(shù)據(jù)。
unsigned int z=0 ,z1,z2,z3,zz[3]={0x00,0x00,0x00};//用來存儲計算三次重物的值
int main(void)
{
ILI9341_Init();
HX711_Init();
delay_init();
LED_Init();
BEEP_Init();
KEY_Init();
NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
uart_init(9600); //串口初始化為9600
ILI9341_GramScan(5);
LCD_SetFont(&Font16x24);//設置字體為8x16大小
LCD_SetColors(BLUE ,WHITE);//設置字體的顏色為紅色,背景的顏色為白色
ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH );//設置清屏,顯示全黑
Get_Fur(); //稱毛皮重量
printf("\r\n 毛皮重量的大小為=%d g\r\n:",Weight_Fur);//打印毛皮的重量
//delay_ms(1000);
delay_ms(1000);
Get_Fur(); //重新獲取毛皮重量
printf("\r\n 重新獲取的毛皮重量的大小為=%d g\r\n:",Weight_Fur);//重新打印毛皮的重量
// sprintf(disbuff1,"Fur: %d ",Weight_Fur);//使用c標準庫把變量轉(zhuǎn)化成字符串
// LCD_ClearLine(LINE(1)); //清除單行文字
// ILI9341_DispStringLine_EN(LINE(1),disbuff1);//然后顯示該字符串即可,其它變量也是這樣處理
ILI9341_DispStringLine_EN(LINE(0),"Weight:");
ILI9341_DispStringLine_EN(LINE(2),"Gross:");
ILI9341_DispStringLine_EN(LINE(4),"Unit:");
ILI9341_DispStringLine_EN(LINE(6),"Total:");
LED_ON ;
BEEP_ON ;
delay_ms(500);
LED_OFF;
BEEP_OFF;
//LCD_SetColors(WHITE ,BLUE );//設置背景前景色
while(1)
{
// zz[z]=Get_Zhongwu();
// z++;
// if(z==2)
// {
// z=0;
// Weight_Zhongwu = (zz[0]+zz[1]+zz[2])/3;
// }
// z1=Get_Zhongwu();
// //delay_ms(100);
// z2=Get_Zhongwu();
// //delay_ms(100);
// z3=Get_Zhongwu();
// //delay_ms(100);
// Weight_Zhongwu=(z1+z2+z3)/3;
Get_Zhongwu ();
printf("凈重量 = %.1f g\r\n",Weight_Zhongwu); //打印所稱量重物的質(zhì)量(去除毛皮之后)
sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c標準庫把變量轉(zhuǎn)化成字符串
LCD_ClearLine(LINE(0)); //清除單行文字
ILI9341_DispStringLine_EN(LINE(0),disbuff1);//然后顯示該字符串即可,其它變量也是這樣處理
//delay_ms(1000);
Saomiao();
}
}
void Saomiao(void)
{
u8 key_num;
key_num=Key_Scan(1);
if(key_num)
{
if(key_num==11)
{
while(!KEY10)
Get_Fur();//獲得毛皮的重量
sprintf(disbuff1,"Gross: %.1f ",Weight_Zhongwu );//使用c標準庫把變量轉(zhuǎn)化成字符串
LCD_ClearLine(LINE(2)); //清除單行文字
ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后顯示該字符串即可,其它變量也是這樣處理
}
if(key_num==12)//清除數(shù)據(jù)進行二次測量
{
while(!KEY11)
price_count =0;
price_buffer[0]=0;
price_buffer[1]=0;
price_buffer[2]=0;
LCD_ClearLine(LINE(2)); //清除單行文字
LCD_ClearLine(LINE(4)); //清除單行文字
LCD_ClearLine(LINE(6)); //清除單行文字
ILI9341_DispStringLine_EN(LINE(2),"Gross:");
ILI9341_DispStringLine_EN(LINE(4),"Unit:");//清除單價信息
ILI9341_DispStringLine_EN(LINE(6),"Total:");//清除總價信息
}
if(key_num==13)//計算總價
{
while(!KEY12)
printf("\r\n 打印總價:\r\n");
printf("\r\n 第一位=%d\r\n",price_buffer[0]);
printf("\r\n 第二位=%d\r\n",price_buffer[1]);
printf("\r\n 第三位=%d\r\n",price_buffer[2]);
if(price_buffer[2]==0)
{
if(price_count ==2)
{
money=price_buffer[0]*10+price_buffer[1];//獲取輸入的價格
}
if(price_count==3)
{
money = price_buffer[0]*100;
}
if(price_count ==1)
{
money=price_buffer[0];
}
}
else if(price_buffer[2]==0)
{
money=price_buffer[0]*10+price_buffer[1];//獲取輸入的價格
}
else money=price_buffer[0]*100+price_buffer[1]*10+price_buffer[2];
printf("\r\n輸入總價為:%d\r\n",money);
printf("\r\n重物=%d\r\n",Weight_Zhongwu);
money=money*Weight_Zhongwu; //計算出總價
sprintf(disbuff4,"Total: %d ",money);//使用c標準庫把變量轉(zhuǎn)化成字符串
LCD_ClearLine(LINE(6)); //清除單行文字
ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后顯示該字符串即可,其它變量也是這樣處理
}
if(key_num>=1&&key_num<=10)//當輸入的是數(shù)字時,最多能輸入三位的數(shù)字
{
while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
printf("\r\n 輸入的數(shù)字是=%d\r\n ",key_num);
price_buffer[price_count]=key_num-1;
price_count++;// 1.2.3表輸入的順序,前中后表位置
sprintf(disbuff5," %d ",price_buffer[2]);//使用c標準庫把變量轉(zhuǎn)化成字符串
ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
sprintf(disbuff6," %d ",price_buffer[1]);//使用c標準庫把變量轉(zhuǎn)化成字符串
ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
sprintf(disbuff7," %d ",price_buffer[0]);//使用c標準庫把變量轉(zhuǎn)化成字符串
ILI9341_DispString_EN ( 205 ,96,disbuff7);//后1
// sprintf(disbuff3,"Unit: %d ",price_buffer[0]+price_buffer[1]+price_buffer[2]+price_buffer[3]);//使用c標準庫把變量轉(zhuǎn)化成字符串
// LCD_ClearLine(LINE(4)); //清除單行文字3
// ILI9341_DispStringLine_EN(LINE(4),disbuff3);//然后顯示該字符串即可,其它變量也是這樣處理
if(price_count==2)
{
ILI9341_DispString_EN ( 150 ,96,disbuff7);//中
ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
ILI9341_DispString_EN ( 205 ,96,disbuff6);//后1
// sprintf(disbuff3,"Unit: %d ",price_buffer[0]);//使用c標準庫把變量轉(zhuǎn)化成字符串
// LCD_ClearLine(LINE(3)); //清除單行文字
// ILI9341_DispStringLine_EN(LINE(3),disbuff3);//然后顯示該字符串即可,其它變量也是這樣處理
}
if(price_count==3)
{
ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
ILI9341_DispString_EN ( 95 ,96,disbuff7);//前3
ILI9341_DispString_EN ( 205 ,96,disbuff5);//后1
price_count=3;
}
}
}
}
復制代碼
所有資料51hei提供下載:
電子秤程序.7z
(204.09 KB, 下載次數(shù): 309)
2019-1-14 03:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
sb51
時間:
2019-3-14 17:56
這個可以出數(shù)據(jù)了,謝謝
作者:
s5932598
時間:
2019-3-27 14:51
如果我的顯示屏是ALIENTEK 4.3寸的LCD呢 我該怎么改這個程序
作者:
772544912
時間:
2019-9-29 20:10
哥可以發(fā)我一份嗎,我黑米不夠
作者:
qsclll
時間:
2020-1-3 20:41
老哥,我精英版怎么用
作者:
qwthh
時間:
2020-2-19 18:14
請問有沒有原理圖啊
作者:
深圳xyz1
時間:
2021-2-7 15:43
老鐵,原理圖一起呀!
作者:
mxf1252509719
時間:
2021-2-24 10:13
怎么接線呢
我是小白不要打我i
作者:
lyd2004888
時間:
2021-3-11 10:08
老鐵,原理圖一起呀!
作者:
深圳xyz1
時間:
2021-3-12 16:28
發(fā)個原理圖,老鐵!
作者:
fan0121
時間:
2021-7-9 21:19
正好有這個芯片,放著吃灰好幾年了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1