原理圖:Altium Designer
仿真圖proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
編號(hào)C0033
數(shù)據(jù)采集模塊+最小系統(tǒng)模塊+超重報(bào)警模塊+鍵盤+顯示模塊。
1、數(shù)據(jù)采集模塊包括稱重傳感器和A/D轉(zhuǎn)換電路;
2、最小系統(tǒng)部分主要包括AT89C51、晶振電路和復(fù)位電路;
3、鍵盤由4X4位矩陣鍵盤組成,可以控制顯示重量和價(jià)錢等信息;
4、顯示部分由LCD1602液晶顯示。
5、可以實(shí)現(xiàn)稱重、置零、計(jì)價(jià)和顯示等功能。其稱重范圍為0~10Kg,分度值為0.001g。仿真圖(提供源文件):
??程序:
main函數(shù)
//****************************************************
//主函數(shù)
//****************************************************
void main()
{
init_eeprom(); //開始初始化保存的數(shù)據(jù)
Init_LCD1602(); //初始化LCD1602
EA = 0;
Data_Init();
Timer0_Init();
//初中始化完成,開斷
EA = 1;
// Get_Maopi();
LCD1602_write_com(0x80); //指針設(shè)置
LCD1602_write_word(" Welcome To Use "); //
LCD1602_write_com(0x80+0x40); //指針設(shè)置
LCD1602_write_word("Electronic Scale");
// Delay_ms(2000);
Get_Maopi();
LCD1602_write_com(0x80); //指針設(shè)置
LCD1602_write_word("WE:0.000 PR:00.0");
LCD1602_write_com(0x80+0x40); //指針設(shè)置
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(); //保存數(shù)據(jù)
}
}
}
HX711驅(qū)動(dòng)
#include "HX711.h"
//****************************************************
//延時(shí)函數(shù)
//****************************************************
void Delay__hx711_us(void)
{
_nop_();
_nop_();
}
//****************************************************
//讀取HX711
//****************************************************
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25個(gè)脈沖下降沿來時(shí),轉(zhuǎn)換數(shù)據(jù)
Delay__hx711_us();
HX711_SCK=0;
return(count);
}