獲取電子秤設計全套資源,請見后文說明…
設計要求
1.系統可實現電子秤基本的稱重功能(稱重范圍為0~10Kg,重量誤差不大于±0.005Kg);
2.系統應具備鍵盤輸入單價,顯示重量,計算總價的功能;
3.單價和總價金額的單位為元,最大金額數值為999.99元,金額誤差不大于0.01元;
4.系統超出最大測量范圍10Kg時,具有報警指示功能(蜂鳴器、LED燈報警提示);
5.該電子秤設計同時具備去皮功能和重量校準功能;
設計概述
電子秤系統主要由單片機最小系統、數據采集系統、人機交互界面系統、報警系統五大部分組成。
單片機最小系統主要包括AT89C51和經典復位電路;數據采集部分由稱重傳感器、信號放大和A/D轉換部分組成,信號放大和A/D轉換部分主要由專用型高精度24位AD轉換芯片HX711實現。
人機交互界面為鍵盤輸入和點陣式液晶顯示,主要使用4*4矩陣鍵盤和1602液晶顯示器,可以方便的輸入數據和直觀的顯示數據;報警系統由蜂鳴器和LED燈組成。
仿真電路圖
電子秤原理圖
仿真結果分析
打開Proteus仿真文件,其后綴名為DSN。雙擊單片機,加載main.hex文件(位置在:單片機加載文件);然后,雙擊HX711芯片,加載HX711.hex文件(位置在:HX711模塊加載文件)。
點擊Proteus軟件左下角運行按鈕,運行仿真。LCD1602液晶顯示:Welcom to Use Electronic Scale.
緊接著,一聲提示音過后,紅色LED燈點亮,LCD顯示重量、單價和總價,數值均為0。此時,系統處于等待貨物稱重的狀態。
LCD顯示的3個參數分別是:WE(Weight,重量的縮寫)、PR(Price, 單價的縮寫)和MONEY(表示總價)。
按下‘重量+’或‘重量-’鍵,模擬貨物稱重,稱重范圍為:0~10Kg。重量若大于10Kg,超重報警,蜂鳴器鳴叫,紅色LED閃爍,LCD中WE顯示:-.–。
通過矩陣鍵盤輸入單價(PR),最大輸入單價為99.9,可以輸入小數點,單價設置精確到角。比如輸入5.4元,輸入數字鍵5、圓點鍵和數字鍵4即可。
單價輸入完成,自動顯示總價(MONEY),總價精確到小數點后1位;總價最大為999元,大于該值,LCD顯示‘-.–’表示超出顯示量程。
系統具有校準功能,通過‘校準+’和‘校準-’兩個鍵,可以小范圍(按下1次,重量顯示改變0.001Kg)校準電子秤顯示的貨物重量。例如,將重量由3.576Kg校準為3.574Kg。
貨物稱重完成后,點擊‘清除’鍵,清除單價和總價,點擊‘去皮’鍵清除重量顯示,注意去皮鍵兼具清除重量顯示的功能;然后就可進行下次稱重了。
模擬去皮功能
首先通過按下‘重量+’/‘重量-’鍵,模擬籃子或者箱子的重量,該重量設置好后,按下‘去皮’鍵,此時重量顯示清零。
例如,按下‘重量+’鍵,設置籃子重量1.083Kg,然后點擊‘去皮’鍵,WE顯示清零。
去皮后,再次按下‘重量+’模擬貨物的凈重4.880Kg,然后,輸入單價3.0元,總價14.06元。
再次按下‘去皮’鍵,此時WE顯示貨物凈重加籃子的重量,總價也計算了籃子的部分,再次按下‘去皮’鍵,重量清零。
部分C代碼
void main()
{
init_eeprom(); //開始初始化保存的數據
Init_LCD1602(); //初始化LCD1602
EA = 0;
Data_Init();
Timer0_Init();
//初中始化完成,開斷
EA = 1;
// Get_Maopi();
LCD1602_write_com(0x80); //指針設置
LCD1602_write_word(" Welcome To Use "); //
LCD1602_write_com(0x80+0x40); //指針設置
LCD1602_write_word("Electronic Scale");
// Delay_ms(2000);
Get_Maopi();
LCD1602_write_com(0x80); //指針設置
LCD1602_write_word("WE:0.000 PR:00.0");
LCD1602_write_com(0x80+0x40); //指針設置
LCD1602_write_word("MONEY: 0.00 ");
Display_Price();
// Get_Maopi(); //稱毛皮重量
while(1)
{
//每0.5秒稱重一次
if (FlagTest==1)
{
Get_Weight();
FlagTest = 0;
}
keycode = Getkeyboard();
//有效鍵值0-15
if (keycode<16)
{
KeyPress(keycode);
Buzzer=0;
Delay_ms(100);
Buzzer=1;
while(keycode<16)
{
if(keycode==12||keycode==13)
{
Buzzer=0;
Delay_ms(10);
Buzzer=1;
KeyPress(keycode);
Get_Weight();
flag_key=1;
}
keycode = Getkeyboard();
}
write_eeprom(); //保存數據
}
}
}
//****************************************************
//稱重
//****************************************************
void Get_Weight()
{
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //獲取凈重
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu*10/GapValue)-qupi; //計算實物的實際重量
if(Weight_Shiwu > 10000) //超重報警
{
Buzzer = !Buzzer;
LED=!LED;
LCD1602_write_com(0x83);
LCD1602_write_word("-.---");
}
else
{
if(Weight_Shiwu==0)
LED=1;
else if(Weight_Shiwu>0)
LED=0;
Buzzer = 1;
Display_Weight();
money = Weight_Shiwu*price/1000; //money單位為分
//顯示總金額
Display_Money();
}
}
//****************************************************
//獲取毛皮重量
//****************************************************
void Get_Maopi()
{
unsigned char clear;
mm: Weight_Maopi_0 = HX711_Read();
for(clear=0;clear<10;clear++)
{
Buzzer=1;
LED=1;
Delay_ms(100);
LED=0;
Delay_ms(100);
}
Weight_Maopi = HX711_Read();
if(Weight_Maopi/GapValue!=Weight_Maopi_0/GapValue)
goto mm;
Buzzer=0;
Delay_ms(500);
Buzzer=1;
}
分享的資源有
(1)基于51單片機和HX711壓力傳感器的電子秤系統設計畢設論文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)HX711模塊資料;
(5)Visio流程圖;
(6)電子秤原理圖;
(7)電子元器件清單;
(8)評優文獻翻譯;
全套資源如下
重要的事情說三遍!
重要的事情說三遍!
重要的事情說三遍!
獲取電子秤設計畢業論文、Proteus仿真、C程序、原理圖、Visio流程圖、元器件清單、HX711模塊等全套資料。請搜索關注我的公眾號:交院小智