标题:
基于HX711的小型称重电子秤STM32代码
[打印本页]
作者:
le51
时间:
2019-1-7 22:35
标题:
基于HX711的小型称重电子秤STM32代码
去年学校电子设计大赛的题目:小型电子秤
所用器件:stm32f103zet6最小系统板 ,HX711,压变片,按键,3.2寸显示屏。
IDE:keil
单片机源程序如下:
/************************************************************************************
*功能:实现重物的称量,去皮,最大承重5kg
*所用器件:stm32f103zet6最小系统板,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;//计算价格的位数
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];//用于存储重量,皮重,单价,总价等数据。
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位抢占优先级,2位响应优先级
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标准库把变量转化成字符串
// 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); //打印所称量重物的质量(去除毛皮之后)
sprintf(disbuff1,"Weight: %.1f ",Weight_Zhongwu);//使用c标准库把变量转化成字符串
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标准库把变量转化成字符串
LCD_ClearLine(LINE(2)); //清除单行文字
ILI9341_DispStringLine_EN(LINE(2),disbuff1);//然后显示该字符串即可,其它变量也是这样处理
}
if(key_num==12)//清除数据进行二次测量
{
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标准库把变量转化成字符串
LCD_ClearLine(LINE(6)); //清除单行文字
ILI9341_DispStringLine_EN(LINE(6),disbuff4);//然后显示该字符串即可,其它变量也是这样处理
}
if(key_num>=1&&key_num<=10)//当输入的是数字时,最多能输入三位的数字
{
while(!KEY0||!KEY1||!KEY2||!KEY3||!KEY4||!KEY5||!KEY6||!KEY7||!KEY8||!KEY9)
printf("\r\n 输入的数字是=%d\r\n ",key_num);
price_buffer[price_count]=key_num-1;
price_count++;// 1.2.3表输入的顺序,前中后表位置
sprintf(disbuff5," %d ",price_buffer[2]);//使用c标准库把变量转化成字符串
ILI9341_DispString_EN ( 95 ,96,disbuff5);//前3
sprintf(disbuff6," %d ",price_buffer[1]);//使用c标准库把变量转化成字符串
ILI9341_DispString_EN ( 150 ,96,disbuff6);//中2
sprintf(disbuff7," %d ",price_buffer[0]);//使用c标准库把变量转化成字符串
ILI9341_DispString_EN ( 205 ,96,disbuff7);//后1
// sprintf(disbuff3,"Unit: %d ",price_buffer[0]+price_buffer[1]+price_buffer[2]+price_buffer[3]);//使用c标准库把变量转化成字符串
// 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标准库把变量转化成字符串
// 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, 下载次数: 309)
2019-1-14 03:44 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
sb51
时间:
2019-3-14 17:56
这个可以出数据了,谢谢
作者:
s5932598
时间:
2019-3-27 14:51
如果我的显示屏是ALIENTEK 4.3寸的LCD呢 我该怎么改这个程序
作者:
772544912
时间:
2019-9-29 20:10
哥可以发我一份吗,我黑米不够
作者:
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
发个原理图,老铁!
作者:
fan0121
时间:
2021-7-9 21:19
正好有这个芯片,放着吃灰好几年了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1