C51 C52单片机实现减法秤Word下载.docx
- 文档编号:19545391
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:14
- 大小:937.49KB
C51 C52单片机实现减法秤Word下载.docx
《C51 C52单片机实现减法秤Word下载.docx》由会员分享,可在线阅读,更多相关《C51 C52单片机实现减法秤Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
电阻应变式传感器测量原理如图2所示。
图3测量电桥原理
(二)、电子秤专用24位AD转换芯片HX711及其电路
该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。
输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。
通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±
20mV或±
40mV。
通道B则为固定的32增益,用于系统参数检测。
芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。
芯片内的时钟振荡器不需要任何外接器件。
上电自动复位功能简化了开机的初始化过程。
HX711内部方框图如图4所示。
其外部管脚如图5所示。
图4HX711内部方框图
本课题设计的HX711电路如图7所示:
(三)步进电机选择
步进电机的主要特性:
1、步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。
转动的速度和脉冲的频率成正比。
2、步进电机具有瞬间启动和急速停止的优越特性
3、改变脉冲的顺序,可以方便的改变转动的方向。
因此,目前打印机,绘图仪,机器人,等等设备都以步进电机为动力核心。
1、如果不考虑数据锁存功能,步进电机的扩展板电路可以简化为下图:
程序设计
(四)、单片机STC89C52及其电路
(1)STC89C52单片机概述
STC89C52系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。
本课题设计的电子秤的单片机应用电路如图9所示:
图9STC89C52单片机电路
(五)、液晶屏电路
图10LCD显示电路
液晶屏电路如图10所示。
LCD_CS、LCD_RES、LCD_RS、LCD_SDA、LCD_SCK为液晶模块与单片机接口的控制线。
CS_ZK、SCK_ZK、SO_ZK和SI_ZK为字库和单片机接口的控制线。
(六)、矩阵键盘电路
矩阵键盘电路如图11所示:
图11矩阵键盘电路
图中4*4矩阵键盘可以显示0-9数字、小数点和五个功能键。
键盘行扫描信号为ROW1—ROW4,列扫描信号为COL1—COL4。
(七).电源电路
本设计采用USB接口供电,电源电压5V。
同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。
其电路原理如图所示。
(八)软件设计
主程序软件流程如图21所示。
图21主程序流程图
3、主程序
下面介绍main.c主程序编写,其他程序略。
#include"
main.h"
HX711.h"
LCD1602.h"
unsignedcharcodeCCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
/unsignedcharcodeCW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
unsignedlongHX711_Buffer=0;
unsignedlongWeight_Maopi=0;
longWeight_Shiwu=0;
unsignedcharKEY_NUM=0;
charTarget_Count=0;
unsignedcharTarget_Buffer[2]={0x00,0x00};
chartarget=0;
unsignedcharwucha=1;
bitFlag_ERROR=0;
bitFlag_OK=0;
#defineGapValue378//378
voidmain()
{Init_LCD1602();
LCD1602_write_com(0x80);
LCD1602_write_word("
Welcometouse!
"
);
while(K1);
Delay_ms(1000);
while(K1==0)
{motor_cw();
}
Weight:
"
LCD1602_write_com(0x80+0x40);
Target:
0000g"
Get_Maopi();
while
(1)
{Get_Weight();
{LCD1602_write_com(0x80+0x0a);
ERROR"
}
else
LCD1602_write_data(Weight_Shiwu/1000+0X30);
LCD1602_write_data(Weight_Shiwu%1000/100+0X30);
LCD1602_write_data(Weight_Shiwu%100/10+0X30);
LCD1602_write_data(Weight_Shiwu%10+0X30);
g"
if(Flag_OK==1&
&
(target>
Weight_Shiwu+wucha))
{motor_ccw();
//电机逆转}
if(target<
=Weight_Shiwu+wucha)Flag_OK=0;
if(Flag_OK==0){
KEY_NUM=Scan_Key();
if(KEY_NUM!
=0x55)
{if(KEY_NUM==16)
{Get_Maopi();
}
if(KEY_NUM==15){while(K1);
{motor_cw();
}}
if(KEY_NUM==12)
{
Target_Count--;
if(Target_Count<
0)
{Target_Count=0;
Target_Buffer[Target_Count]=0;
switch(Target_Count)
{case0:
LCD1602_write_com(0x80+0x40+0x0a);
LCD1602_write_data('
'
break;
case1:
LCD1602_write_com(0x80+0x40+0x0b);
0'
default:
break;
if(KEY_NUM==13){
target=Target_Buffer[0]*10+Target_Buffer[1];
Flag_OK=1;
f(KEY_NUM>
=0&
KEY_NUM<
=9){
Target_Buffer[Target_Count]=KEY_NUM;
switch(Target_Count){
case0:
LCD1602_write_com(0x80+0x40+0x0c);
LCD1602_write_data(Target_Buffer[0]+0x30);
LCD1602_write_com(0x80+0x40+0x0d);
LCD1602_write_data(Target_Buffer[1]+0x30);
g'
Target_Count++;
if(Target_Count>
=2)
{Target_Count=2;
}}}}}}
unsignedcharScan_Key()
{unsignedchartemp=0;
unsignedcharcom=0x55,com1=0,com2=0;
P1=0xf0;
if(P1!
=0xf0)
{com1=P1;
P1=0x0f;
com2=P1;
}
while(P1!
=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);
}{
Weight_Shiwu=HX711_Read();
Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
if(Weight_Shiwu>
0)
{
Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/GapValue);
if(Weight_Shiwu>
5000)
{Flag_ERROR=1;
}else
{Flag_ERROR=0;
}}else
{Weight_Shiwu=0;
Flag_ERROR=1;
}}
voidGet_Maopi()
{Weight_Maopi=HX711_Read();
}
voidDelay_ms(unsignedintn)
{unsignedinti,j;
for(i=0;
i<
n;
i++)
for(j=0;
j<
123;
j++);
voiddelay500us(void)
{intj;
57;
j++){;
}}
voiddi(void)/
{unsignedinty;
for(y=0;
y<
250;
y++)
{beep=0;
Delay_ms
(1);
beep=1;
voidmotor_ccw(void)//
{unsignedchari,j;
2;
j++)//
{for(i=0;
8;
i++)//
F1=CCW[i]&
0x01;
F2=CCW[i]&
0x02;
F3=CCW[i]&
0x04;
F4=CCW[i]&
0x08;
Delay_ms(10);
}}}
voidmotor_cw(void)
5;
j++)
i++){
F1=CW[i]&
F2=CW[i]&
F3=CW[i]&
F4=CW[i]&
(九)操作与使用
1、上电运行
下载完成后程序自动运行,或重上电后程序正常运行,如图所示。
图23上电运行图
2、键盘操作说明
4*4矩阵键盘定义如下
789D(清0)
456C(电机反转)
123B(电机正转)
14(未定义)015(.)A(确定价格)
其中:
●键0—9为数字键,用于单价设定。
●键15为小数点,也用于单价设定。
●B键为电机正转,每次设定数值后,请先按清B键,以驱动电机转动。
C键为电机反转,当达到设定值时,按下该键电机开始向反方向转动3、常用使用步骤:
●打开电源,屏幕显示电子秤初始化成功,此时重量和单价为0,金额为空;
●通过数字键和小数点键键入摇确定的称重数值,完成后按下电机转动键。
●在支架上称出摇秤的数值,液晶屏显示重量(单位为g),当到达设定值时电机停止
●当到达设定值后按下C键,电机向相反方向转动。
(10)误差分析
一:
由于电路的不稳定以及传感器的工作原理造成的误差。
二:
硬件设计时,下面挡板不高造成物料容易掉下来,当数值在一霎啦间以达到设定值,所以电机停止,但数值显示不正确
三:
因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
当发现测试出来的重量偏大时,增加该数值。
如果测试出来的重量偏小时,减小改数值。
该值可以为小数
#defineGapValue378.2
有可能378.2设定的不是不准,有可能造成些误差,估计误差在0.05%
四:
电机28BYJ48?
5V?
?
的4相5?
的步?
机,而且是?
速步?
机,?
速比?
1:
64,步?
角?
5.625/64度。
由于?
机本身的原因造成?
的角度不是非常精确,所以也是有?
差的
五:
称重传感器的电灵敏度为满负荷输出电压与激励电压的比值,典型值是2mV/V。
当使用2mV/V灵敏度和5V激励电压的传感器时,其满度输出电压为10mV。
通常,为了使用称重传感器线性度最好的一段称重范围,应当仅使用满度范围的三分之二。
因此满度输出电压应当大约为6mV。
当电子秤应用于工业环境时,在6mV满度范围内测量微小的信号变化并非易事。
总误差是指输出误差和额定误差的比值。
典型电子秤的总误差指标大约是0.02%,这一技术指标相当重要,它限制了使用理想信号调节电路所能达到的精确度,决定了ADC分辨率的选择以及放大电路和滤波器的设计。
六:
开发板的外围电路对测量的精确度的影响。
(十一)效果图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 C52单片机实现减法秤 C52 单片机 实现 减法