加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入

基于51單片機(jī)的電子秤(5KG+上限報(bào)警)

09/29 09:46
836
服務(wù)支持:
技術(shù)交流群

完成交易后在“購(gòu)買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長(zhǎng)和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購(gòu)買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

#include "main.h"
#include "LCD1602.h"
#include "HX711.h"
#include "EEPROM.H"

//定義變量
unsigned char KEY_NUM = 0; ? //用來存放按鍵按下的鍵值
unsigned long HX711_Buffer = 0; ?//用來存放HX711讀取出來的數(shù)據(jù)
unsigned long Weight_Maopi = 0; //用來存放毛皮數(shù)據(jù)
long Weight_Shiwu = 0; ? ? ? ? ?//用來存放實(shí)物重量
long Max_Value = 0; ? ? ? ? ? ? //用來存放設(shè)置最大值
char maxValueTable[4] = {1,0,0,0};//這就是用來儲(chǔ)存最大值變量的四位值
unsigned char state = 0; ? ?//用來存放設(shè)置狀態(tài)
unsigned char Blink_Speed = 0;
#define Blink_Speed_Max 6 ? ? ? ? ?//該值可以改變?cè)O(shè)置指針閃爍頻率

//校準(zhǔn)參數(shù)
//因?yàn)椴煌?a class="article-link" target="_blank" href="/tag/%E4%BC%A0%E6%84%9F%E5%99%A8/">傳感器特性曲線不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測(cè)量值很準(zhǔn)確。
//當(dāng)發(fā)現(xiàn)測(cè)試出來的重量偏大時(shí),增加該數(shù)值。
//如果測(cè)試出來的重量偏小時(shí),減小改數(shù)值。
//該值可以為小數(shù)
#define GapValue 430

//傳感器最大測(cè)量值,單位是g
#define AlarmValue 5000

//****************************************************
//主函數(shù)
//****************************************************
void main()
{
Init_LCD1602();?? ??? ??? ??? ??? ??? ?//初始化LCD1602

LCD1602_write_com(0x80);?? ??? ??? ?//設(shè)置LCD1602指針
LCD1602_write_word("Welcome to use!");

Get_Maopi();
Get_Maopi();
Delay_ms(2000);?? ??? ? //延時(shí)2s
Get_Maopi();
Get_Maopi();?? ??? ??? ??? ?//稱毛皮重量?? ?//多次測(cè)量有利于HX711穩(wěn)定
LCD1602_write_com(0x01); ? ?//清屏

//讀取EEPROM中保存的報(bào)警值
maxValueTable[0] = byte_read(0x2000);
maxValueTable[1] = byte_read(0x2001);
maxValueTable[2] = byte_read(0x2002);
maxValueTable[3] = byte_read(0x2003);
Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3]; ? ?//計(jì)算超限報(bào)警界限值
while(1)
{
Get_Weight();

//顯示當(dāng)前重量
LCD1602_write_com(0x80);
LCD1602_write_word("Weight=");
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);
LCD1602_write_word("Kg");

KEY_NUM = Scan_Key();
if(KEY_NUM == 1) ? ? ? ?//按鍵1切換設(shè)置狀態(tài)
{
state++;//這個(gè)數(shù)據(jù)用來顯示電子秤的最大值
if(state == 5)//就是MAX=X.XXXKG,其中X.XXX共5位,5位過后開始將其中的值保存在EEPROM中
{
state = 0;
SectorErase(0x2000);
byte_write(0x2000,maxValueTable[0]);?? ??? ??? ??? ?//保存EEPROM數(shù)據(jù)
byte_write(0x2001,maxValueTable[1]);
byte_write(0x2002,maxValueTable[2]);?? ??? ??? ??? ?//保存EEPROM數(shù)據(jù)
byte_write(0x2003,maxValueTable[3]);
Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3]; ? ?//計(jì)算超限報(bào)警界限值
}
}
if(KEY_NUM == 2) ? ? ? ?//按鍵加
{
if(state != 0)//就是為了防止起始位的影響
{
maxValueTable[state-1]++;//該位的值加加
if(maxValueTable[state-1] >= 10)//當(dāng)該位的值=10時(shí)就為它清零
{
maxValueTable[state-1] = 0;
}
}

}
if(KEY_NUM == 3) ? ? ? ?//按鍵減
{
if(state != 0)
{
maxValueTable[state-1]--;
if(maxValueTable[state-1] <= -1)
{
maxValueTable[state-1] = 9;
}
}
}

  • 有需要資料的可了解一下.docx

相關(guān)推薦

電子產(chǎn)業(yè)圖譜