基于STM32单片机的电子秤仿真设计
硬件设计
(末尾附文件)
代码设计
HX711:
#include "bsp_hx711.h"
#include "bsp_delay.h"#define CLR_HX711_SCK (GPIO_ResetBits(HX711_SCK_PORT, HX711_SCK_PIN))
#define SET_HX711_SCK (GPIO_SetBits(HX711_SCK_PORT, HX711_SCK_PIN))#define HX711_DOUT_R (GPIO_ReadInputDataBit( HX711_DOUT_PORT, HX711_DOUT_PIN))/*** @brief 配置 IO* @param 无* @retval 无*/
void HX711_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/*开启按键GPIO口的时钟*/RCC_APB2PeriphClockCmd(HX711_DOUT_CLK | HX711_SCK_CLK, ENABLE);/*--------------------------KEY1配置-----------------------------*//* 配置为浮空输入 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;/*设置引脚速率为50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*选择要控制的GPIO引脚*/GPIO_InitStructure.GPIO_Pin = HX711_DOUT_PIN;GPIO_Init(HX711_DOUT_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Pin = HX711_SCK_PIN;GPIO_Init(HX711_SCK_PORT, &GPIO_InitStructure);
}/************************* 读取HX711 *************************/
uint32_t HX711_Read(void) //增益128
{uint32_t HX711_Data = 0;uint8_t i;DelayUs10x(6);CLR_HX711_SCK;while (HX711_DOUT_R);for (i = 0; i < 24; i++){SET_HX711_SCK;DelayUs10x(1);HX711_Data = HX711_Data << 1;CLR_HX711_SCK;DelayUs10x(1);if (HX711_DOUT_R){HX711_Data++;}}SET_HX711_SCK;HX711_Data = HX711_Data ^ 0x800000; //第25个脉冲下降沿来时,转换数据DelayUs10x(1);CLR_HX711_SCK;return (HX711_Data);
}/************************* 获取初始重量 *************************/
uint32_t HX711_GetInitialWeight(void)
{uint32_t weightBuf = 0;uint32_t weight = 0;uint8_t i = 0;do{weightBuf = HX711_Read();DelayMs(100);weight = HX711_Read();DelayMs(100);i++;}while (((weightBuf/GAPVALUE)!= (weight/GAPVALUE)) || (i < 10));return weight;
}
主程序:
#define __MIAN_C
#include "main.h"
#include "stdio.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "bsp_gpio.h"
#include "bsp_clkconfig.h"
#include "bsp_delay.h"
#include "bsp_lcd1602.h"
#include "bsp_key.h"
#include "bsp_GeneralTim.h"
#include "bsp_display.h"
#include "bsp_hx711.h"
#include "bsp_at24c02.h"// 局部变量,用于保存转换计算后的电压值
CreatByte Flag;uint8_t isNewFlag = 0x01;
uint16_t alarmWeight = 5000;
uint8_t alarmWeight_H;
uint8_t alarmWeight_L;
uint16_t alarmWeight_i = 0;
uint16_t alarmWeight_d = 0;
uint16_t alarmWeightBuf = 0;
uint32_t initialWeight = 0; //单位g
float objectWeight = 0; //单位g
uint32_t objectWeight_i = 0; //单位g
uint32_t objectWeight_d = 0; //单位gint main(void)
{ // 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MHHSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz// 端口初始化GPIO_Config();GENERAL_TIM_Init();Key_GPIO_Config();HX711_GPIO_Config();EEPROM_Init();isNewFlag = EEPROM_ReadByte(0x01);if (isNewFlag != 0x00){EEPROM_WriteByte(0x01, 0x00); DelayMs(10);EEPROM_WriteByte(0x02, (uint8_t)(alarmWeight>>8));DelayMs(10);EEPROM_WriteByte(0x03, (uint8_t)(alarmWeight & 0x00FF));DelayMs(10);}isNewFlag = EEPROM_ReadByte(0x01);DelayMs(10);alarmWeight_H = EEPROM_ReadByte(0x02);DelayMs(10);alarmWeight_L = EEPROM_ReadByte(0x03);DelayMs(10); alarmWeight = ((uint16_t)alarmWeight_H<<8) + (uint16_t)alarmWeight_L;LCD_GPIO_Init();LCD_Init();LCD_Clear();DelayMs(200);LCD_DispStr(0, 0, "Electronic Scale");LCD_DispStr(0, 1, " By JH");initialWeight = HX711_GetInitialWeight();DelayMs(1000);LCD_Clear();while (1){if (dispFlag == 1){dispFlag = 0;DispWeight();}KeyProcess();}
}/*********************************************END OF FILE**********************/
链接:https://pan.baidu.com/s/1W6j7awpg4sB34Awfsy_bQg
提取码:u4wj
基于STM32单片机的电子秤仿真设计相关推荐
- 基于STM32单片机的智能手环设计(OLED显示)(Proteus仿真+程序+报告)
编号8 基于STM32单片机的智能手环设计(OLED显示) 功能描述: 由 STM32单片机+按键模拟计步+RTC时钟模块+DS18B20温度传感器模块+心率采集模块+串口模块+OLED显示模块+键盘 ...
- 基于STM32指纹密码锁proteus仿真设计
基于STM32指纹密码锁proteus仿真设计. 有仿真,程序,原文. 功能: 1.六位密码,设定初始密码(123456) 2.Electronic Locks(电子密码锁) (等待输入密码,密码用* ...
- 基于STM32单片机水位检测系统仿真设计
文章目录 主要功能 仿真图 程序(提供源文件源码) 本设计基于STM32单片机水位检测系统仿真设计(proteus仿真+程序) 仿真图proteus 8.11 程序编译器:keil 5 编程语言:C语 ...
- 9、★♥★基于STM32单片机的颜色检测仪设计♥☆
9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 文章目录 9.★♥★基于STM32单片机的颜色检测仪设计♥☆ 引言 1.系统概述 1.1.设计任务 1.2.设计要求 2.方案设计与论证 2.1.芯 ...
- 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计
1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...
- 基于STM32单片机流水灯仿真与程序设计
STM32单片机流水灯仿真与程序设计 摘要 本次程序设计和仿真是基于Proteus和keil的环境对STM32F103系列单片机进行流水灯设计,通过配置STM32的GPIO工作模式,实现LED的点亮和 ...
- 基于STM32单片机的智能书桌设计与实现
研究结果表明,学生的读写姿势不正确率高达70%甚至85%以上[1].不良的读写姿势.不合适的光照条件会令学生不停地调整眼睛的睫状肌,容易降低睫状肌调节能力,进而导致近视[2].从长远看,不良的读写姿势 ...
- 基于stm32单片机的智能鱼缸设计(实物+原理图+源码)
资料编号:059 功能如下: 1.采用stm32单片机作为控制CPU,OLED显示万年历和温度 2.智能加热.加氧.加二氧化碳 3.采用智能自动开灯 具体功能请看下方演示视频 59-基于stm ...
- 【项目实战】基于STM32单片机的智能小车设计(有代码)
[1]背景意义 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术.因此,基于嵌入式 ...
最新文章
- 刚刚!2021世界一流学科排名,正式发布!
- 使用Python脚本批量裁切栅格
- python订单详细教程-Python抓取订单页面
- 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...
- 程序员绩效总结_阿里五年晋升三次,这个程序员要聊聊他的选择
- 如何检查并unregister本地注册的Chrome service worker
- 深度理解 Virtual DOM
- mysql支持表情输入_让MySQL支持Emoji表情 mysql 5.6
- Android自定义View【实战教程】1⃣️----attrs.xml详解
- 1024 科学计数法(C语言)测试点4详解
- wifi 小米pro 驱动 黑苹果_【黑果小兵】小米Pro macOS High Sierra 10.13黑苹果安装教程...
- Maze环境以及DQN的实现
- 你应该问面试官的10个相关问题
- Java第三章(数组)
- win10装win7装win7
- ESP8266便携式物联网时钟(硬件篇) 代号:喵
- canvas 绘制八卦图
- 更改计算机睡眠时间无法打开,win7怎么设置电脑睡眠时间 win7电脑睡眠后黑屏打不开...
- CGAN之条件生成对抗网络(Matlab)
- Linux—shell—nohup命令使用
热门文章
- mac下charles抓包iPhone手机
- moment获取时间
- 会议签到web_GitHub - dzhgb/EasyMeeting_Web: [ThinkPHP5] 智能会议室Web端:账号管理、会议室设置、用户预约、在线签到...
- 入侵检测系统IDS工作原理笔记
- 看这篇告诉你WMS系统怎么设计
- 微信公众号java开发教程
- 用pytest.fixture处理接口自动化跨文件token传参
- 项目部署-didi/LogiKM
- iterm快捷键及操作技巧(附Linux快捷键)
- C语言实例8——古典问题:兔子问题