称重压力传感器HX711AD模块电路+程序.docx

上传人:b****8 文档编号:28009939 上传时间:2023-07-07 格式:DOCX 页数:17 大小:691.07KB
下载 相关 举报
称重压力传感器HX711AD模块电路+程序.docx_第1页
第1页 / 共17页
称重压力传感器HX711AD模块电路+程序.docx_第2页
第2页 / 共17页
称重压力传感器HX711AD模块电路+程序.docx_第3页
第3页 / 共17页
称重压力传感器HX711AD模块电路+程序.docx_第4页
第4页 / 共17页
称重压力传感器HX711AD模块电路+程序.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

称重压力传感器HX711AD模块电路+程序.docx

《称重压力传感器HX711AD模块电路+程序.docx》由会员分享,可在线阅读,更多相关《称重压力传感器HX711AD模块电路+程序.docx(17页珍藏版)》请在冰豆网上搜索。

称重压力传感器HX711AD模块电路+程序.docx

称重压力传感器HX711AD模块电路+程序

称重模块电路+程序(测试通过)

总体电路

电源+串口通讯

单片机最小系统:

存储模块+下载模块+蜂鸣器+矩阵键盘

称重模块:

淘宝链接:

主程序:

#include"main.h"

#include"LCD1602.h"

#include"HX711.h"

unsignedlongHX711_Buffer=0;

unsignedlongWeight_Maopi=0,Weight_Shiwu=0;

charPrice_Count=0;

unsignedcharKEY_NUM=0;

unsignedcharPrice_Buffer[3]={0x00,0x00,0x00};

unsignedlongMoney=0;

bitFlag_OK=0;

//****************************************************

//主函数

//****************************************************

voidmain()

{

Init_LCD1602();//初始化LCD1602

LCD1602_write_com(0x80);//指针设置

LCD1602_write_word("Welcometouse!

");//开机画面第一行

 

Delay_ms(2000);//延时2s

 

loop:

Price_Count=0;

Price_Buffer[0]=0;

Price_Buffer[1]=0;

Price_Buffer[2]=0;

Flag_OK=0;

LCD1602_write_com(0x80);//指针设置

LCD1602_write_word("+WEI|PRI|MON");

LCD1602_write_com(0x80+0x40);//指针设置

LCD1602_write_word("0.000|.|.");

Get_Maopi();//称毛皮重量

while

(1)

{

if(Flag_OK==0)

{

Get_Weight();//称重

//显示当前重量

LCD1602_write_com(0x80+0x40);

LCD1602_write_data(Weight_Shiwu/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);

}

KEY_NUM=KEY_Scan();

if(KEY_NUM!

=0x55)//当返回的不是初值时候,确认按键按下。

{

if(KEY_NUM==16)//数字A键,去皮功能

{

Get_Maopi();//去皮

}

if(KEY_NUM==15)//数字B键清除键,二次测量

{

gotoloop;

}

if(KEY_NUM==12)//数字C输入单价错误时返回上一步

{

Price_Count--;

if(Price_Count<0)

{

Price_Count=0;

}

Price_Buffer[Price_Count]=0;//清除上一个输入的数据

switch(Price_Count)

{

case0:

LCD1602_write_com(0x80+0x40+6);

LCD1602_write_data('');

break;

case1:

LCD1602_write_com(0x80+0x40+7);

LCD1602_write_data('');

break;

case2:

LCD1602_write_com(0x80+0x40+9);

LCD1602_write_data('');

break;

default:

break;

}

}

if(KEY_NUM==13)//数字D键,计算总价

{

Money=Price_Buffer[0]*100+Price_Buffer[1]*10+Price_Buffer[2];

Money=Money*Weight_Shiwu/1000;

LCD1602_write_com(0x80+0x40+11);

LCD1602_write_data(Money/1000+0x30);

LCD1602_write_data(Money%1000/100+0x30);

LCD1602_write_data(Money%100/10+0x30);

LCD1602_write_data('.');

LCD1602_write_data(Money%10+0x30);

Flag_OK=1;

}

if(KEY_NUM>=0&&KEY_NUM<=9)//显示输入的价值

{

Price_Buffer[Price_Count]=KEY_NUM;

switch(Price_Count)

{

case0:

LCD1602_write_com(0x80+0x40+6);

LCD1602_write_data(Price_Buffer[0]+0x30);

break;

case1:

LCD1602_write_com(0x80+0x40+7);

LCD1602_write_data(Price_Buffer[1]+0x30);

break;

case2:

LCD1602_write_com(0x80+0x40+9);

LCD1602_write_data(Price_Buffer[2]+0x30);

break;

default:

break;

}

Price_Count++;

if(Price_Count>=3)

{

Price_Count=3;

}

}

}

}

}

//****************************************************

//矩阵键盘扫描

//****************************************************

unsignedcharKEY_Scan()

{

unsignedchartemp=0;

unsignedcharcom=0x55,com1=0,com2=0;

P3=0xf0;

if(P3!

=0xf0)

{

com1=P3;

P3=0x0f;

com2=P3;

}

P3=0xf0;

while(P3!

=0xf0);

temp=com1|com2;

if(temp==0xee)com=1;//数字1

if(temp==0xed)com=4;//数字4

if(temp==0xeb)com=7;//数字7

if(temp==0xe7)com=11;//备用键*号键

if(temp==0xd7)com=0;//数字0

if(temp==0xb7)com=14;//备用键*号键

if(temp==0xde)com=2;//数字2

if(temp==0xdd)com=5;//数字5

if(temp==0xdb)com=8;//数字8

if(temp==0xbe)com=3;//数字3

if(temp==0xbd)com=6;//数字6

if(temp==0xbb)com=9;//数字9

if(temp==0x7e)com=16;//数字A键,去皮功能

if(temp==0x7d)com=15;//数字B键清除键,二次测量

if(temp==0x7b)com=12;//数字C输入单价错误时返回上一步

if(temp==0x77)com=13;//数字D键,计算总价

return(com);

}

//****************************************************

//称重

//****************************************************

voidGet_Weight()

{

HX711_Buffer=HX711_Read();

HX711_Buffer=HX711_Buffer/100;

if(HX711_Buffer>Weight_Maopi)

{

Weight_Shiwu=HX711_Buffer;

Weight_Shiwu=Weight_Shiwu-Weight_Maopi;//获取实物的AD采样数值。

Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/4.22+0.05);//计算实物的实际重量

//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。

//当发现测试出来的重量偏大时,增加该数值。

//如果测试出来的重量偏小时,减小改数值。

//该数值一般在4.0-5.0之间。

因传感器不同而定。

//+0.05是为了四舍五入百分位

Buzzer=1;//关闭警报

}

//elseif(HX711_Buffer

//{

//Buzzer=0;//负重量报警

//}

//elseif(HX711_Buffer>Weight_Maopi+24970)//大于5Kg的最大量程,报警

//{

//Buzzer=0;

//}

if(Weight_Shiwu>5000||HX711_Buffer

{

Buzzer=0;

}

else

{

Buzzer=1;

}

}

//****************************************************

//获取毛皮重量

//****************************************************

voidGet_Maopi()

{

HX711_Buffer=HX711_Read();

Weight_Maopi=HX711_Buffer/100;

}

//****************************************************

//MS延时函数(12M晶振下测试)

//****************************************************

voidDelay_ms(unsignedintn)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<123;j++);

}

 

1602.H文件

#ifndef__LCD1602_H__

#define__LCD1602_H__

 

#include

//LCD1602IO设置

#defineLCD1602_PORTP0

sbitLCD1602_RS=P2^5;

sbitLCD1602_RW=P2^6;

sbitLCD1602_EN=P2^7;

//函数或者变量声明

externvoidLCD1602_delay_ms(unsignedintn);

externvoidLCD1602_write_com(unsignedcharcom);

externvoidLCD1602_write_data(unsignedchardat);

externvoidLCD1602_write_word(unsignedchar*s);

externvoidInit_LCD1602();

#endif

 

1602.C程序:

#include"LCD1602.h"

//****************************************************

//MS延时函数(12M晶振下测试)

//****************************************************

voidLCD1602_delay_ms(unsignedintn)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<123;j++);

}

//****************************************************

//写指令

//****************************************************

voidLCD1602_write_com(unsignedcharcom)

{

LCD1602_RS=0;

LCD1602_delay_ms

(1);

LCD1602_EN=1;

LCD1602_PORT=com;

LCD1602_delay_ms

(1);

LCD1602_EN=0;

}

//****************************************************

//写数据

//****************************************************

voidLCD1602_write_data(unsignedchardat)

{

LCD1602_RS=1;

LCD1602_delay_ms

(1);

LCD1602_PORT=dat;

LCD1602_EN=1;

LCD1602_delay_ms

(1);

LCD1602_EN=0;

}

//****************************************************

//连续写字符

//****************************************************

voidLCD1602_write_word(unsignedchar*s)

{

while(*s>0)

{

LCD1602_write_data(*s);

s++;

}

}

voidInit_LCD1602()

{

LCD1602_EN=0;

LCD1602_RW=0;//设置为写状态

LCD1602_write_com(0x38);//显示模式设定

LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置

LCD1602_write_com(0x06);//写一个字符后指针加一

LCD1602_write_com(0x01);//清屏指令

}

 

称重模块.H文件:

#ifndef__HX711_H__

#define__HX711_H__

#include

#include

//IO设置

sbitHX711_DOUT=P2^0;

sbitHX711_SCK=P2^1;

//函数或者变量声明

externvoidDelay__hx711_us(void);

externunsignedlongHX711_Read(void);

#endif

 

称重模块.C程序

#include"HX711.h"

//****************************************************

//延时函数

//****************************************************

voidDelay__hx711_us(void)

{

_nop_();

_nop_();

}

//****************************************************

//读取HX711

//****************************************************

unsignedlongHX711_Read(void)//增益128

{

unsignedlongcount;

unsignedchari;

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个脉冲下降沿来时,转换数据

Delay__hx711_us();

HX711_SCK=0;

return(count);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1