電子秤是采用現(xiàn)代傳感器技術(shù)、電子技術(shù)和計(jì)算機(jī)技術(shù)一體化的電子稱量裝置,滿足并解決現(xiàn)實(shí)生活中提出的“快速、準(zhǔn)確、連續(xù)、自動(dòng)”稱量要求,同時(shí)有效地消除人為誤差,使之更符合法制計(jì)量管理和工業(yè)生產(chǎn)過程控制的應(yīng)用要求。
硬件設(shè)計(jì)
稱重傳感器感應(yīng)被測(cè)重力,輸出微弱的毫伏級(jí)電壓信號(hào)。該電壓信號(hào)經(jīng)過電子秤專用模擬/數(shù)字(A/D)轉(zhuǎn)換器芯片hx711對(duì)傳感器信號(hào)進(jìn)行調(diào)理轉(zhuǎn)換。HX711 采用了海芯科技集成電路專利技術(shù),是一款專為高精度電子秤而設(shè)計(jì)的24 位A/D 轉(zhuǎn)換器芯片,內(nèi)置增益控制,精度高,性能穩(wěn)定。HX711芯片通過2線串行方式與單片機(jī)通信。單片機(jī)讀取被測(cè)數(shù)據(jù),進(jìn)行計(jì)算轉(zhuǎn)換,再液晶屏上顯示出來。
矩陣鍵盤主要用于計(jì)算金額。當(dāng)被測(cè)物體重量得到后,用戶可以通過矩陣鍵盤輸入單價(jià),電子秤自動(dòng)計(jì)算總金額并在液晶屏顯示。電源系統(tǒng)給單片機(jī)、HX711電路及傳感器供電。
電子秤專用24位AD轉(zhuǎn)換芯片HX711電路
單片機(jī)STC89C52電路
液晶屏電路
矩陣鍵盤電路
矩陣鍵盤可以顯示0-9數(shù)字、小數(shù)點(diǎn)和五個(gè)功能鍵。鍵盤行掃描信號(hào)為ROW1—ROW4,列掃描信號(hào)為COL1—COL4。行信號(hào)為輸入信號(hào),低電平有效;列信號(hào)為輸出信號(hào)。當(dāng)沒有鍵按下時(shí),即使行掃描輸入低電平信號(hào),列信號(hào)仍為高電平;當(dāng)行掃描為低電平并且有鍵按下時(shí),相應(yīng)的列輸出低電平。該低電平信號(hào)可以定位至按下鍵的位置。
聲光報(bào)警電路
當(dāng)測(cè)量重量超過量程時(shí),beep和alert給出低電平信號(hào),驅(qū)動(dòng)蜂鳴器鳴響,報(bào)警燈亮。
電源采用USB接口供電,電源電壓5V。同時(shí),USB接口通過內(nèi)含PL2303芯片的轉(zhuǎn)換電路對(duì)單片機(jī)進(jìn)行程序編寫。
軟件設(shè)計(jì)
主程序使用了定時(shí)器,用來實(shí)現(xiàn)每0.5秒稱重一次的功能,流程圖如下:
? ? ? ?
時(shí)鐘中斷程序流程圖 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 鍵盤掃描程序流程圖 ? ? ? ? ? ? ??
主程序流程圖
主程序編寫
下面介紹main.c主程序編寫,其他程序略。
?。?) 頭文件和一些宏定義
#include 《reg52.h》
#include 《intrins.h》
#include 《string.h》
#include “l(fā)cd.h”
#include “hx711.h”
#include “keyboard.h”
//定義量程系數(shù)
#define RATIO 2114/1623
?。?) 管腳、常量、變量定義
//定義標(biāo)識(shí)
volatile bit FlagTest = 0;
//定時(shí)測(cè)試標(biāo)志,每0.5秒置位,測(cè)完清0
volatile bit FlagKeyPress = 0; //有鍵按下標(biāo)志,處理完畢清0
volatile bit FlagSetPrice = 0; //價(jià)格設(shè)置狀態(tài)標(biāo)志,設(shè)置好為1
//管腳定義 sbit LedA = P2^2;
sbit beep = P1^0;
sbit alert = P1^1;
//顯示用變量 int Counter;
uchar idata str1[6] = “000000”;
int i, iTemp; //稱重用變量
unsigned long idata FullScale; //滿量程AD值/1000
unsigned long AdVal; //AD采樣值
unsigned long weight; //重量值,單位g
unsigned long idata price; //單價(jià),長(zhǎng)整型值,單位為分
unsigned long idata money; //總價(jià),長(zhǎng)整型值,單位為分
//鍵盤處理變量
uchar keycode; uchar DotPos;
//小數(shù)點(diǎn)標(biāo)志及位置
?。?) 各子程序
//整型轉(zhuǎn)字符串的函數(shù),轉(zhuǎn)換范圍0--65536 void int2str(int x, char* str)
{
int i=1;
int tmp=10;
while(x/tmp!=0)
{
i++;
tmp*=10;
}
tmp=x;
str[i]=‘