称重压力传感器HX711AD模块电路+程序.docx
- 文档编号:28009939
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:17
- 大小:691.07KB
称重压力传感器HX711AD模块电路+程序.docx
《称重压力传感器HX711AD模块电路+程序.docx》由会员分享,可在线阅读,更多相关《称重压力传感器HX711AD模块电路+程序.docx(17页珍藏版)》请在冰豆网上搜索。
称重压力传感器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); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 称重 压力传感器 HX711AD 模块 电路 程序