技术文档

基于51单片机的电子秤 基于stm32单片机的电子秤设计#51单片机设计

小编 2024-11-24 技术文档 23 0

基于stm32单片机的电子秤设计#51单片机设计

各位朋友大家好,本期视频来录制gstm三二单片机的电子秤设计。

·首先来看一下组成部分,stm三二单片机液晶显示oled显示,这边是主人键盘,待会会详细介绍这些按键的功能。

·这是冲动传感器,可以放上一杯水或者什么终极。这是蜂蜜机报警,这是超重报警,这是x711转换模块,这边是采用usb进行供电。

·上电看一下,上电之后会显示处理挂的过程,显示这种电子秤当前的重量,因为现在是没有任何东西,所以是零。把它输入,放上一个水杯,可以看到现在当前显示三百二十三克。

·输入价格,这个的按键就是一二三四五六七八九,这是零,可以输入价格,比如十一块三毛钱,按下计算总价,二年会计算出总价。

·计算完成之后,当把它拿着水杯拿掉的时候,这个是清除按键,按一下清除又清除了上一遍了。

·比如再把这个东西放上,输入价格,再接上总件,接上总件拿掉,拿掉就清除。这个是清除按键,这个是计算总监按键,这个是清除按键。

·还有一个去皮的功能,比如把这个东西弄上去,比如要买个螃蟹,这是一个框,之后要把它去皮,框去皮按一下这个按键,现在就是零了,这个框就是相当于零了。

·放上一个重物,比如买了只螃蟹,三十五克,输入价格二十二块钱一斤,计算总价零点七八元,把它拿掉,再重新拿掉,再清除就ok了。

·这个应该是会显示重量,重新复制一下,因为把这个框拿掉就相当于负的了。

·在上电的时候一定要把传感器放平,就是这个传感器放平,要平上电有个自动校准的过程,如果放的不平就校准,整个称重就不不准确了。

·还有一个微调的功能,就这两个按键是微调,这两个按键,比如放上这个,假设这个是三十六克,现在显示是三十五克,可以通过这个按键来增加,慢慢的微调,这个就不用管它,就知道有这个功能就行了。

整个设计就这样的,包含了承重,承重完成之后液晶显示就o r e d显示,显示完成之后可以输入价格,通过矩阵键盘输入价格,输入价格之后按下计算总价,它有计算出总价。

·还有去皮的功能,去皮刚才演示了,清除按键,有超重报警,当重量超过上限就会报警,用手按一下,超过五千的块会报警,对电子秤起到保护的作用。

整个的设计就是这样的,谢谢。

基于51单片机的电子秤

当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力-电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。通常此电压信号很小,需要通过前端信号处理电路进行准确的线性放大,放大后的模拟电压信号经过滤波电路和A/D转换电路转换成数字信号被送入到主控电路的单片机中,单片机不断扫描键盘和各种功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到内存贮器,需要显示时,单片机发出指令,从内存贮器中读出送到显示器显示。

#include <reg52.h> //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义变量范围0~255

#define uint unsigned int //无符号整型 宏定义变量范围0~65535

#include <intrins.h>

//数码管段选定义 0 1 2 3 4 56 7 8 9

uchar code smg_du[]={0x28,0xe1,0x32,0xa2,0x54,0xa1,0x21,0xea,0x20,0xa0,

0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //断码

//数码管位选定义

uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};

uchar dis_smg[8] = {0};

uchar smg_i = 4; //显示数码管的个位数

sbit beep = P2^3; //蜂鸣器IO口定义

bit flag_lj_en; //按键连加使能

bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了

uchar key_time,key_value; //用做连加的中间变量

bit key_500ms ;

bit flag_300ms ;

uchar menu_1; //菜单设计的变量

uint t_high = 300; //上限报警值

sbit hx711_dout=P2^7;

sbit hx711_sck=P2^6;

long weight;

unsigned long HX711_Buffer = 0;

unsigned long Weight_Maopi = 0;

uint temp,qi_weight;

bit chaozhong_flag;

bit leiji_flag;

uchar flag_200ms ;

#define GapValue 437.0

uint temp,qi_weight;

bit chaozhong_flag;

bit leiji_flag;

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i<q;i++)

for(j=0;j<120;j++);

}

/***********************数码显示函数*****************************/

void display()

{

static uchar i;

i++;

if(i >= smg_i)

i = 0;

P1 = 0xff; //消隐

P3 = smg_we[i]; //位选

P1 = dis_smg[i]; //段选

}

/*************定时器0初始化程序***************/

void time_init()

{

EA = 1; //开总中断

TMOD = 0X01; //定时器0、定时器1工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

}

/********************独立按键程序*****************/

uchar key_can; //按键值

void key() //独立按键程序

{

static uchar key_new;

key_can = 20; //按键值还原

P2 |= 0x07;

if((P2 & 0x07) != 0x07)//按键按下

{

if(key_500ms == 1)//连加

{

key_500ms = 0;

key_new = 1;

}

delay_1ms(1); //按键消抖动

if(((P2 & 0x07) != 0x07) && (key_new == 1))

{//确认是按键按下

key_new = 0;

switch(P2 & 0x07)

{

case 0x06: key_can = 3; break; //得到k2键值

case 0x05: key_can = 2; break; //得到k3键值

case 0x03: key_can = 1; break; //得到k4键值

}

flag_lj_en = 1; //连加使能

}

}

else

{

if(key_new == 0)

{

key_new = 1;

flag_lj_en = 0;//关闭连加使能

flag_lj_3_en = 0;//关闭3秒后使能

key_value = 0;//清零

key_time = 0;

key_500ms = 0;

}

}

}

/****************按键处理数码管显示函数***************/

void key_with()

{

if(key_can == 1) //设置键

{

menu_1 ++;

if(menu_1 >= 2)

{

menu_1 = 0;

smg_i = 4; //数码管显示3位

flag_300ms = 1;

}

}

if(menu_1 == 1)//设置高温报警

{

smg_i = 4; //数码管显示4位

if(key_can == 2)

{

if(flag_lj_3_en == 0)

t_high += 10 ;//按键按下未松开自动加三次

else

t_high += 100;//按键按下未松开自动加三次之后每次自动加10

if(t_high > 9990)

t_high = 9990;

}

if(key_can == 3)

{

if(flag_lj_3_en == 0)

t_high -= 10 ;//按键按下未松开自动减三次

else

t_high -= 100;//按键按下未松开自动减三次之后每次自动减10

if(t_high <= 10)

t_high = 10;

}

dis_smg[0] = smg_du[t_high / 10 % 10]; //取小数显示

dis_smg[1] = smg_du[t_high / 100 % 10] ; //取个位显示

dis_smg[2] = smg_du[t_high / 1000 % 10] & 0xdf; //取十位显示

dis_smg[3] = 0x64; //H

}

}

/****************报警函数***************/

void clock_h_l()

{

static uchar value;

if(weight >= t_high)

{

value ++; //消除实际距离在设定距离左右变化时的干扰

if(value >= 2)

{

beep = ~beep; //蜂鸣器报警

}

}

else

{

beep = 1;

}

}

void Delay__hx711_us(void)

{

_nop_();

_nop_();

}

unsigned long HX711_Read(void)//增益128

{

unsigned long count;

unsigned char i;

hx711_sck=0;

Delay__hx711_us();

hx711_dout=1;

while(hx711_dout==0);

for(i=0;i<24;i++)

{

hx711_sck=0;

count=count<<1;

hx711_sck=1;

if(hx711_dout)

count++;

}

hx711_sck=1;

count=count^0x8000;//下降沿来时,转换数据

Delay__hx711_us();

hx711_sck=0;

return(count);

}

void get_weight() //获取被测物体重量

{

weight = HX711_Read();

weight = weight - Weight_Maopi;//获取净重

if(weight > 0)

{

weight = (unsigned int)((float)weight/GapValue); //计算实物的实际重量

}

else

{

weight = 0;

}

}

/****************主函数***************/

void main()

{

time_init(); //初始化定时器

while(1)

{

key();//按键程序

if(key_can < 10)

{

key_with();//设置报警压力

}

if(flag_300ms == 1) //300ms 处理一次压力程序

{

flag_300ms = 0;

get_weight(); //获取被测物体重量

clock_h_l(); //报警函数

if(menu_1 == 0)

{

smg_i = 4;

dis_smg[0] = smg_du[weight % 10]; //取压力的小数显示

dis_smg[1] = smg_du[weight / 10 % 10] ; //取压力的个位显示

dis_smg[2] = smg_du[weight / 100 % 10] ; //取压力的十位显示

dis_smg[3] = smg_du[weight / 1000 % 10] & 0xdf; //取压力的百位显示

}

}

display();//数码管显示函数

}

}

/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{

static uchar value; //定时2ms中断一次

TH0 = 0xf8;

TL0 = 0x30; //2ms

value++;

if(value >= 100)

{

value = 0;

flag_300ms = 1;

}

if(flag_lj_en == 1) //按下按键使能

{

key_time ++;

if(key_time >= 250) //500ms

{

key_time = 0;

key_500ms = 1; //500ms

key_value ++;

if(key_value > 3)

{

key_value = 10;

flag_lj_3_en = 1; //3次后1.5秒连加大些

}

}

}

}

相关问答

单片机 如何与 电子秤 联系起来?

1.单片机与电子秤联系起来很简单。2.利用一个电阻应变片传感器,一组数码管,以及单片机相应的外部电路就可以组成一个简易的电子秤了。3.利用传感器的电阻变...

用科技产品做秤怎么做?

要用科技产品做秤,首先需要选择一个合适的传感器,如压力传感器或称重传感器。然后,将传感器与微控制器或单片机连接,以便读取传感器的数据。接下来,编写相...

电子秤的 构造?

由以下几个部分组成:1.称重传感器:是电子秤的核心部分。它利用应变片或变阻器将物体所产生的压力或重力转化为电信号。2.处理系统:处理系统的任务是将传感...

电子秤的 原理是什么?

电子秤,属于衡器的一种,是利用胡克定律或力的杠杆平衡原理测定物体质量的工具。电子秤主要由承重系统(如秤盘、秤体)、传力转换系统(如杠杆传力系统、传感器...

单片机 会被淘汰吗?

单片机不会被淘汰。就像当年更高性能的单片机出来后,一直都有人说51单片机会被淘汰,可是我们看到,51单片机不但没有被淘汰,反而活的有滋有味。就像提问里说...

电子秤 为什么能称重量?内部结构是怎样的? - 多美婷 的回答 -...

该信号经放大电路放大输出到模数转换器。转换成便于处理的数字信号输出到CPU运算控制。CPU根据键盘命令以及程序将这种结果输出到显示器。直至显...

电子秤的 原理是什么? - Tv80iu2mI 的回答 - 懂得

工作原理主要是两方面的知识,一是物体的弹性形变;二是惠斯通电桥.称重传感器将所承受的重量转化成弹性形变量,电桥将引形变量转化成电信号输入CPU,...

维一 电子秤 说明书?

电子秤使用说明书1)电子秤是由称重传感器感知外界的重力,再把转换的电信号传送给电子电路的。在称重时不要过力,特别是小称量的秤,所称的物品要轻拿轻放,以...

电子秤 怎么用?

小型电子秤使用方法:(1)小电子秤是由称重传感器感知外界的重力,再把转换的电信号传送给电子电路的。在称重时不要过力,特别是小称量的秤,所称的物品要轻拿...

单片机 是什么意思?

[回答]单片机定义单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部...

猜你喜欢