1100073-基于STM32的无线语音电子称HX711/温度/串口/去皮/proteus/惠斯通电桥/小数点
功能描述:
基于STM32f103c8的无线语音电子称体重秤/温度/串口/去皮/proteus/惠斯通电桥
实现原理:在proteus中使用惠斯通电桥模拟真实的物理称重传感器,通过HX711高精度体重传感器检测数据,通过STM32单片机处理数据。可以实现商品单价输入,计算商品总价。监测设备的工作温度,保证设备的运行精确度。可实现去皮的功能。通过串口传输数据可模拟语音、WIFI、蓝牙、RS232等功能。
1、商品的重量监测
2、商品的价格输入
3、商品的总价计算
4、商品去皮
5、设备的温度检测
6、设备超负荷报警
7、设备超温低温报警
8、控制键盘可输入0-9,小数点、确认、退格、清除、去皮的4*4矩阵键盘。
9、通过串口传输数据,可实时显示商品信息,模拟语音播报、蓝牙传输、串口通信等功能。
有哪些资料:
1、仿真工程文件
2、源代码工程文件
3、原理图工程
4、上位机软件
5、串口虚拟工具
#include "systick_delay.h"
#include "key.h"
#include "lcd1602.h"
#include "Price.h"
#include "HX711.h"
#include "led.h"
#include "usart.h"
#include "ds18b20.h"
#include "SysTick.h"
extern char Rx_Data[];
extern uint8_t Rx_Flag;
/* Global Variable全局变量 -----------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------------------------*/
/**
* @brief main主函数
**/
void clear_input_buffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) {
// 读取并丢弃输入缓冲区中的字符,直到遇到换行符或文件结束符
}
}
void NVIC_Configuration(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
}
int main(void)
{
int32_t Temp_Weight = 0 ;//临时保存物品重量
float _Temp_Weight = 0,N_Temp_Weight = 0;
static u8 i= 10;
u8 temp=0;
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
HX711_Init();//HX711初始化
KEY_Init();//按键初始化函数
LCD1602_Init();//LCD1602初始化
LED_Init();//LED初始化函数
USART1_Init(115200);
DS18B20_Init();
//NVIC_Configuration();
printf("*******欢迎使用智能语音电子称*******\r\n");
printf("WIFI-已连接!!!\r\n");
while(i--)
{
//温度获取
temp = DS18B20_GetTemperture();
delay_ms(100);
}
while(1)
{
if(Rx_Flag) //如果接收到数据
{
if(strcmp(Rx_Data, "WIFI") == 0) //如果接收到的数据是LED_ON
{
Send_String("WIFI-已断开!!!\r\n"); //串口发送LED ON,反馈控制者灯已经打开
}
Rx_Flag=0; //接收到数据标志位置0,为下次接收字符串做准备
}
// i++;
// if(i%5==0)
temp = DS18B20_GetTemperture();
//
if( temp > 60 )
{
printf("当前设备温度过高!\r\n");
CHAOWEN_LED = 0;
delay_ms(1000);
}else CHAOWEN_LED =1;
if( temp < 10 )
{
printf("当前设备温度过低!\r\n");
DIWEN_LED = 0;
delay_ms(1000);
}else DIWEN_LED =1;
// printf("temp : %d",temp);
sprintf((char *)Temp_Strings, "%5.1f", (float)temp);
LCD1602_Display_String(2,14, Temp_Strings);
// printf("hello world \r\n");
Get_Input_Price_And_Calculate();//获取按键输入的价格并计算总的价格
if(Tare_Key_Flag == 1)//去皮按键被按下标志位为1,显示去皮重量后的净重
{
Temp_Weight = HX711_Convert();//HX711进行转换
Temp_Weight = Temp_Weight - Tare_Weight;//当前总重量减去皮重才是要计算的重量
_Temp_Weight = Temp_Weight / 36059.19 ;
if (_Temp_Weight >= 10 )
{
printf("请注意:系统超过检测质量10KG过载!\r\n");
GUOZAI_LED = 0;
delay_ms(100);
}else GUOZAI_LED = 1;