称重压力传感器HX711AD模块电路+程序
更新时间:2024-06-06 14:23:01 阅读量: 综合文库 文档下载
- 称重压力传感器工作原理图推荐度:
- 相关推荐
称重模块电路+程序(测试通过)
总体电路
电源+串口通讯
单片机最小系统:
存储模块+下载模块+蜂鸣器+矩阵键盘
称重模块: 淘宝链接:
http://detail.tmall.com/item.htm?spm=a230r.1.0.0.tule1b&id=20046845949&ad_id=&am_id=&cm_id=140105335569ed55e27b&pm_id=&abbucket=5
主程序:
#include \#include \#include \
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0,Weight_Shiwu = 0; char Price_Count = 0;
unsigned char KEY_NUM = 0;
unsigned char Price_Buffer[3] = {0x00,0x00,0x00}; unsigned long Money = 0; bit Flag_OK = 0;
//****************************************************
//主函数
//**************************************************** void main() {
Init_LCD1602();
//初始化LCD1602
LCD1602_write_com(0x80); LCD1602_write_word(\ //指针设置
//开机画面第一行
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(\ LCD1602_write_com(0x80+0x40); LCD1602_write_word(\ . | . \
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_Shiwu00/100 + 0x30); LCD1602_write_data(Weight_Shiwu0/10 + 0x30); LCD1602_write_data(Weight_Shiwu + 0x30);
KEY_NUM = KEY_Scan(); if( KEY_NUM != 0x55) {
//当返回的不是初值时候,确认按键按下。 //数字A键,去皮功能 //去皮
if(KEY_NUM == 16) { Get_Maopi(); }
if(KEY_NUM == 15) { goto loop; }
//数字B键清除键,二次测量
if(KEY_NUM == 12) { Price_Count--; if( Price_Count < 0) { Price_Count = 0; } }
//数字C输入单价错误时返回上一步
Price_Buffer[Price_Count] = 0; //清除上一个输入的数据
switch(Price_Count) { case 0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(' '); break; case 1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(' '); break; case 2: 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(Money00/100 + 0x30); LCD1602_write_data(Money0/10 + 0x30); LCD1602_write_data('.');
LCD1602_write_data(Money + 0x30);
Flag_OK = 1;
if(KEY_NUM >= 0 && KEY_NUM <= 9) { Price_Buffer[Price_Count] = KEY_NUM; }
//显示输入的价值
switch(Price_Count) { case 0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(Price_Buffer[0] + 0x30); break; case 1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(Price_Buffer[1] + 0x30); break; case 2: 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; }
}
//**************************************************** //矩阵键盘扫描
//**************************************************** unsigned char KEY_Scan() {
unsigned char temp = 0;
unsigned char com = 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); }
//**************************************************** //称重
//**************************************************** void Get_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 = (unsigned int)((float)Weight_Shiwu/4.22+0.05); //计算实物的实际重量 //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该数值一般在4.0-5.0之间。因传感器不同而定。 //+0.05是为了四舍五入百分位 Buzzer = 1; //关闭警报 }
// else if(HX711_Buffer < Weight_Maopi - 30) // { // // // // // //
Buzzer = 0; //负重量报警 }
else if(HX711_Buffer > Weight_Maopi + 24970) { Buzzer = 0; }
//大于5Kg的最大量程,报警
if(Weight_Shiwu > 5000 || HX711_Buffer < Weight_Maopi - 30) { Buzzer = 0; } else { Buzzer = 1; }
}
//**************************************************** //获取毛皮重量
//**************************************************** void Get_Maopi() {
HX711_Buffer = HX711_Read();
Weight_Maopi = HX711_Buffer/100; }
//**************************************************** //MS延时函数(12M晶振下测试)
//**************************************************** void Delay_ms(unsigned int n) {
unsigned int i,j; for(i=0;i 1602.H文件 #ifndef __LCD1602_H__ #define __LCD1602_H__ #include //LCD1602 IO设置 #define LCD1602_PORT P0 sbit LCD1602_RS = P2^5; sbit LCD1602_RW = P2^6; sbit LCD1602_EN = P2^7; //函数或者变量声明 extern void LCD1602_delay_ms(unsigned int n); extern void LCD1602_write_com(unsigned char com); extern void LCD1602_write_data(unsigned char dat); extern void LCD1602_write_word(unsigned char *s); extern void Init_LCD1602(); #endif 1602.C程序 : #include \ //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void LCD1602_delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i //**************************************************** //写指令 //**************************************************** void LCD1602_write_com(unsigned char com) { LCD1602_RS = 0; LCD1602_delay_ms(1); LCD1602_EN = 1; LCD1602_PORT = com; LCD1602_delay_ms(1); LCD1602_EN = 0; } //**************************************************** //写数据 //**************************************************** void LCD1602_write_data(unsigned char dat) { LCD1602_RS = 1; LCD1602_delay_ms(1); LCD1602_PORT = dat; LCD1602_EN = 1; LCD1602_delay_ms(1); LCD1602_EN = 0; } //**************************************************** //连续写字符 //**************************************************** void LCD1602_write_word(unsigned char *s) { while(*s>0) { LCD1602_write_data(*s); s++; } } void Init_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 sbit HX711_DOUT=P2^0; sbit HX711_SCK=P2^1; //函数或者变量声明 extern void Delay__hx711_us(void); extern unsigned long HX711_Read(void); #endif //设置为写状态 //显示模式设定 //开关显示、光标有无设置、光标闪烁设置//写一个字符后指针加一 //清屏指令 称重模块.C程序 #include \ //**************************************************** //延时函数 //**************************************************** 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个脉冲下降沿来时,转换数据 Delay__hx711_us(); HX711_SCK=0; return(count); }
正在阅读:
中日英汽车零件名称(彩图)04-05
前盖的加工工艺及其8M13钻孔夹具设计05-15
2022届高考作文预测:纯白、漂亮的羽毛(附范文)-作文教学04-07
浅谈关于小学语文教学创新的有效策略05-16
年高考历史二轮专题复习 专题训练十四 第二次世界大战 - 图文12-24
一年级生字田字格字帖04-18
系统学习复习资料(含参考答案)01-10
2018朝阳初三数学二模试题及答案(201806)11-06
离散数学试卷二试题与答案03-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 称重
- 传感器
- 电路
- 模块
- 压力
- HX711AD
- 程序
- 普通心理学习题及答案
- 2017年江苏省连云港市中考数学试卷(含答案解析版)
- 2018浦东新区一模语文试题
- TM2101力学软件用户手册V2.6 - 图文
- 预防艾滋病 你我同参与教学设计
- 高二英语选修7月考试卷
- 国务院发布:运用大数据意见36条(附细则+各部委行动时间表)
- 全国林业产业发展规划纲要-国家林业局
- 七年级下作文范文
- 盾卫电子认证系统详细设计说明书
- 爬山虎的脚导学案 - 图文
- 随机过程试题及答案
- 生命科学导论复习资料
- 《企业和公司法》模拟题1-4及答案
- 尔雅2016从愚昧到科学作业+期末
- 长胜大队模板方案 5.3
- 大西洋连铸技术装备特点
- 玉岭煤业有限公司安全责任追究、经济处罚制度
- 国土资源法律法规政策业务知识试题
- 塑件工艺分析