历史上的今天
今天是:2025年02月22日(星期六)
2020年02月22日 | 基于HX711+51单片机电子秤
2020-02-22 来源:51hei
仿真原理图如下

原理图
单片机源程序如下:
#include #include #include #include "main.h" #include "LCD1602.h" #include "HX711.h" #include "eeprom52.h" #define uchar unsigned char #define uint unsigned int unsigned long HX711_Buffer = 0; unsigned long Weight_Maopi = 0; unsigned long Weight_Maopi_0 = 0; long Weight_Shiwu = 0; unsigned int qupi=0; //键盘处理变量 unsigned char keycode; unsigned char key_press_num=0; uint GapValue,GapValue1; //定义标识 volatile bit FlagTest = 0; //定时测试标志,每0.5秒置位,测完清0 volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0 //校准参数 //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该值可以为小数 //#define GapValue 349 sbit LED=P1^1; sbit ROW1=P3^0; sbit ROW2=P3^1; sbit ROW3=P3^2; sbit ROW4=P3^3; volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂 /******************把数据保存到单片机内部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); GapValue1=GapValue&0x00ff; byte_write(0x2000, GapValue1); GapValue1=(GapValue&0xff00)>>8; byte_write(0x2001, GapValue1); byte_write(0x2060, a_a); } /******************把数据从单片机内部eeprom中读出来*****************/ void read_eeprom() { GapValue = byte_read(0x2001); GapValue = (GapValue<<8)|byte_read(0x2000); a_a = byte_read(0x2060); } /**************开机自检eeprom初始化*****************/ void init_eeprom() { read_eeprom(); //先读 if(a_a != 1) //新的单片机初始单片机内问eeprom { GapValue = 3500; a_a = 1; write_eeprom(); //保存数据 } } //显示重量,单位kg,两位整数,三位小数 void Display_Weight() { LCD1602_write_com(0x80+0x40+8); if(Weight_Shiwu/10000==0) LCD1602_write_data(' '); else LCD1602_write_data(Weight_Shiwu/10000 + 0x30); LCD1602_write_data(Weight_Shiwu%10000/1000 + 0x30); LCD1602_write_data('.'); LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30); LCD1602_write_data(Weight_Shiwu%100/10 + 0x30); LCD1602_write_data(Weight_Shiwu%10 + 0x30); } //定时器0初始化 void Timer0_Init() { ET0 = 1; //允许定时器0中断 TMOD = 1; //定时器工作方式选择 TL0 = 0xb0; TH0 = 0x3c; //定时器赋予初值 TR0 = 1; //启动定时器 } //定时器0中断 void Timer0_ISR (void) interrupt 1 using 0 { uchar Counter; TL0 = 0xb0; TH0 = 0x3c; //定时器赋予初值 //每0.5秒钟刷新重量 Counter ++; if (Counter >= 10) { FlagTest = 1; Counter = 0; } } //按键响应程序,参数是键值 //返回键值: // 7 8 9 10(清0) // 4 5 6 11(删除) // 1 2 3 12(未定义) // 14(未定义) 0 15(.) 13(确定价格) void KeyPress() { if(ROW1==0) //去皮键 { Delay_ms(5); if(ROW1==0) { // Get_Maopi(); if(qupi==0) qupi=Weight_Shiwu; else qupi=0; Buzzer=0; Delay_ms(50); Buzzer=1; while(ROW1==0); } } if(ROW2==0) //加 { Delay_ms(5); if(ROW2==0) { while(!ROW2) { key_press_num++; if(key_press_num>=100) { key_press_num=0; while(!ROW2) { if(GapValue<10000) GapValue+=10; Buzzer=0; Delay_ms(10); Buzzer=1; Delay_ms(10); Get_Weight(); } } Delay_ms(10); } if(key_press_num!=0) { key_press_num=0; if(GapValue<10000) GapValue++; Buzzer=0; Delay_ms(50); Buzzer=1; } write_eeprom(); } } if(ROW3==0) //减 { Delay_ms(5); if(ROW3==0)
史海拾趣
|
我想用一台主机连接两个终端,串口只有一个,不能加串口卡什么的。 主机(发送接收) | | |——————从终端(只收不发) | | 主终端(发送接收) 我试过直接从主机与主终端的串口连接线中并接出一条线到从终端去,但并不成功,主机与主 ...… 查看全部问答> |
|
unsigned char pDATA[8]; memset(pDATA,0 ,8); 如果直接在定义处初始化为0,与memset的区别是 什么?… 查看全部问答> |
|
我在s3c2440上做SD卡读写驱动,没有文件系统,就一块一块地读写.怎样检测坏块,有了坏块怎么标记呢? SD卡又不像nand flash那样有自己的一套检测标记方式,请大家指点!!… 查看全部问答> |
|
求助:warning: last line of file ends without a newline 我用的是ccs2.0,片子是6713。 求助各位高手,我在编译ccs时,每次都出现warning: last line of file ends without a newline。有人说是最后一行要加个回车,我加了,可是还是有这个问题,这里请教各位了。 还有就是我每次编译完ccs,它总是自动 ...… 查看全部问答> |
|
最近制作了一块Buck 型DCDC开关电源,24V转5V;利用示波器AC耦合输入测试电源的纹波电压,大约为+10mv/-15mv,但是纹波电压的波动和MOS管的开关对应关系好像不对,教科书中介绍BUCK输出滤波电容纹波电压与 MOS管的开关对应关系如下图:但是我测得输 ...… 查看全部问答> |
|
#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar a,num,t,shi,fen,M1,M2;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7 ...… 查看全部问答> |
|
Sate210 SDMMC/Inand wince 启动bootloader 镜像终于准备发布了! 使用文档和镜像,以及uboot 启动SD卡制作工具下载链接 这几周我都在升级Sate210 的 SDMMC/inand 启动wince 系统的bootloader,其实是完全替代了,以前三星提供的dragin 的烧写方式, O(∩_∩)O~其实我是借助了u-boot的 大风,用u-boot 启动了Sate ...… 查看全部问答> |
|
这几天看到学习视频中有电池检测的视频,本以为TI会大力的宣传其阻抗跟踪技术,但是,点开视频从第一讲开始,TI就对整个电池监测技术做了总结,这里面包括我们之前通常使用的ADC直接监测电池电压来判断电池的容量,然后就是库仑计法,该算法可以做 ...… 查看全部问答> |




