欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機HX711傳感器電子秤設(shè)計(原理圖、程序源碼、BOM等)
[打印本頁]
作者:
qq250076737
時間:
2020-4-7 12:12
標題:
51單片機HX711傳感器電子秤設(shè)計(原理圖、程序源碼、BOM等)
基于51單片機HX711傳感器電子秤設(shè)計制作出來的實物圖如下:
0.jpg
(606.67 KB, 下載次數(shù): 43)
下載附件
2020-4-7 15:33 上傳
元件型號 元件名稱 元件標號 數(shù)量
蜂鳴器 Bell B1 1
10uF 電容 C1 1
20pF 電容 C2, C3 2
LCD1602 液晶 LCD1 1
Header 2 電源接口 P1 1
9012 三極管 Q5 1
2.7K 電阻 R1 1
10K 電阻 R2 1
SW-PB 按鍵 S1, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18 17
sw-灰色 電源開關(guān) SW1 1
U1 單片機 U1 1
12M 晶振 Y1 1
單片機源程序如下:
#include <reg52.h> //調(diào)用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
#define ulong unsigned long
#include<intrins.h>
uchar code table_num[]="0123456789abcdefg";
sbit rs=P1^0; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit rw=P1^1; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit e =P1^2; //片選信號 下降沿觸發(fā)
sbit hx711_dout=P2^1;
sbit hx711_sck=P2^0;
sbit beep = P1^3; //蜂鳴器
long weight;
uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
bit flag_300ms ;
ulong price,z_price; //單價 總價
uchar flag_p;
/***************
刪除鍵
去皮
價格清零
***************/
/******1ms延時函數(shù)***12M晶振**************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay_uint(uint q)
{
while(q--);
}
/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數(shù)據(jù)函數(shù)
* 輸入 : 需要寫入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(3);
e=1;
delay_uint(25);
e=0;
}
/***********************lcd1602上顯示這字符函數(shù)************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == '\0') break;
write_data(*p);
p++;
}
}
/***********************lcd1602初始化設(shè)置************************/
void init_1602() //lcd1602初始化設(shè)置
{
write_com(0x38); //
write_com(0x0c);
write_com(0x06);
delay_uint(1000);
}
////////////////在指定位置顯示指定字符//////////
void write_zifu(uchar hang,uchar add,uchar dat)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(dat);
}
/********************************************************************
* 名稱 : write_sfm4_price(uchar hang,uchar add,uchar date)
* 功能 : 顯示價格
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_sfm4_price(uchar hang,uchar add,uint date)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(0x30+date/1000%10);
write_data(0x30+date/100%10);
write_data('.');
write_data(0x30+date/10%10);
write_data(0x30+date%10);
}
/****************開機液晶顯示函數(shù) 初始化液晶的內(nèi)容********************************/
void init_1602_dis_csf() //初始化液晶
{
write_string(1,0," W:0.000kg ");
write_string(2,0,"P:00.00 Z:00.00");
write_zifu(2,7,0x5c); //¥
// write_zifu(2,15,0x5c); //¥
}
/*******************壓力顯示程序***********************/
void write_1602_yl(uchar hang,uchar add,uint date)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
write_data(0x30+date/1000%10);
write_data('.');
write_data(0x30+date/100%10);
write_data(0x30+date/10%10);
write_data(0x30+date%10);
}
void Delay__hx711_us(void)
{
_nop_();
_nop_();
}
ulong ReadCount(void) //增益128
{
ulong count,value = 0;
uchar 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=0;
Delay__hx711_us();
hx711_sck=1;
return(count);
}
void get_pizhong() //獲取皮重,秤盤重量
{
ulong hx711_dat;
hx711_dat=ReadCount(); //HX711AD轉(zhuǎn)換數(shù)據(jù)處理
temp=(uint)(hx711_dat/100);
}
void get_weight() //獲取被測物體重量
{
ulong hx711_data,a;
uint get,aa;
hx711_data=ReadCount(); //HX711AD轉(zhuǎn)換數(shù)據(jù)處理
get=(uint)(hx711_data/100);
if(get>temp)
{
a=ReadCount();
aa=(uint)(a/100)-temp;
weight=(uint)((float)aa/4.9+0.05);//重量轉(zhuǎn)換函數(shù),傳感器型號不同此函數(shù)要適當修改
}
}
/************************************************/
/* 由于稱重傳感器線性度參數(shù)的不同,而對獲得的重量數(shù)據(jù)處理,
此處可能會根據(jù)不同稱重傳感器,程序的代碼會有所不同 */
/************************************************/
/*************定時器0初始化程序***************/
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、定時器1工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
/********************獨立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨立按鍵程序
{
static uchar key_new = 0, key_l;
key_can = 20; //按鍵值還原
P3 = 0x0f;
if((P3 & 0x0f) != 0x0f) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P3 & 0x0f) != 0x0f) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
key_l = P3 | 0xf0; //矩陣鍵盤掃描
P3 = key_l;
switch(P3)
{
case 0xee: key_can = 1; break; //得到按鍵值
case 0xde: key_can = 4; break; //得到按鍵值
case 0xbe: key_can = 7; break; //得到按鍵值
case 0x7e: key_can = 10; break; //得到按鍵值
case 0xed: key_can = 2; break; //得到按鍵值
case 0xdd: key_can = 5; break; //得到按鍵值
case 0xbd: key_can = 8; break; //得到按鍵值
case 0x7d: key_can = 0; break; //得到按鍵值
case 0xeb: key_can = 11; break; //得到按鍵值
case 0xdb: key_can = 9; break; //得到按鍵值
case 0xbb: key_can = 6; break; //得到按鍵值
case 0x7b: key_can = 3; break; //得到按鍵值
case 0xe7: key_can = 15; break; //得到按鍵值
case 0xd7: key_can = 14; break; //得到按鍵值
case 0xb7: key_can = 13; break; //得到按鍵值
case 0x77: key_can = 12; break; //得到按鍵值
}
beep = 0; //蜂鳴器叫一聲
delay_1ms(100);
beep = 1;
}
}
else
key_new = 1;
}
/************按鍵控制函數(shù)*************/
void key_with()
{
if(key_can <= 9) //數(shù)字鍵
{
if(flag_p >= 4)
{
flag_p = 0;
}
if(flag_p == 0)
price = key_can;
else
{
price = price * 10 + key_can;
}
write_sfm4_price(2,2,price); //顯示單價
flag_p ++;
}
if(key_can == 15) //刪除鍵
{
if(price != 0 )
{
flag_p --;
price /= 10; //刪除
write_sfm4_price(2,2,price);//顯示單價
}
}
if(key_can == 14) //去皮
{
get_pizhong(); //獲取皮重,秤盤重量
}
if(key_can == 13) //價格清零
{
flag_p = 0;
price = 0;
write_sfm4_price(2,2,price);//顯示單價
}
}
/*****************主函數(shù)********************/
void main()
{
beep = 0; //蜂鳴器叫一聲
delay_1ms(100);
P0 = P1 = P2 = P3 = 0xff; //單片機IO口初始化為1
time_init(); //初始化定時器
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于51單片機HX711傳感器電子秤設(shè)計(原理圖、程序源碼、BOM等).rar
(6.97 MB, 下載次數(shù): 169)
2020-4-7 12:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
lyl_420819
時間:
2020-4-10 14:35
描述很詳細,的確為學(xué)習(xí)HX711應(yīng)用的好資料,謝樓主分享。
作者:
limuzi2012
時間:
2020-4-20 16:30
非常感謝,資料很詳盡,正好需要hx711方面的
作者:
aktuan007
時間:
2020-4-20 22:58
點贊,不知道有木有仿真?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1