基于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)小电子秤是由称重传感器感知外界的重力,再把转换的电信号传送给电子电路的。在称重时不要过力,特别是小称量的秤,所称的物品要轻拿...
单片机 是什么意思?[回答]单片机定义单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部...