标题:
往上位机发送51单片机串口数据(压力传感器)求帮助
[打印本页]
作者:
fengmang1996
时间:
2020-2-4 18:17
标题:
往上位机发送51单片机串口数据(压力传感器)求帮助
用keil打开,编译,烧录到51单片机中即可。用串口助手读取数据。
单片机源程序如下:
///**********************************************
//* 平台:BST-V51 + Keil U3 + STC89C52
//* 名称:往串口发送一字节数据(可通过超级终端或者串口调试助手显示出来,
// 超级终端波特率选为9600)。
// 超级终端设置好后,每按下一次S2键,松开后均会在超级终端
// 上显示一串字母"abcdefg哈哈"。
//* 日期:2012-8-14
//* 晶振:11.0592MHZ
//* 说明:免费开源,不提供源代码分析.
//
//******************************************************************/
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
//IO设置
sbit HX711_DOUT=P3^4;
sbit HX711_SCK=P3^5;
//HX711缓存区初始值设为0.
unsigned long HX711_Buffer = 0;
//毛皮和实物初始化,都为0.
unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;
void InitUART(void)//使用定时器1作为串口波特率发生器
{
TH1 = 0xFD; //晶振11.0592mhz 波特率设为9600
TL1 = TH1;
TMOD |= 0x20; //定时器1方式2
SCON = 0x50; //串口接收使能
ES = 1; //串口中断使能
TR1 = 1; //定时器1使能
TI = 1; //发送中断标记位,必须设置
}
//毫秒延时函数
void delay_ms(unsigned int t)
{
unsigned char a,b;
while(t--)
{
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
}
//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
//_nop_()一般包含在#include "intrins.h",,,一个_nop_();函数延时一个机器周期的时间
_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;
Delay__hx711_us();
HX711_SCK=0;
return(count);
}
//****************************************************
//称重
//****************************************************
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/2.09+0.05); //计算实物的实际重量
//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的2.15这个除数。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该数值一般在2.15附近调整之间。因传感器不同而定。
//+0.05是为了四舍五入百分位
Weight_Shiwu=Weight_Shiwu/2;
}
}
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
unsigned char i = 0;
unsigned int Temp_Weight = 0;
Weight_Maopi = 0;
for( i = 0 ; i < 10 ; i++)
{
if( Temp_Weight > Weight_Maopi)
{
Weight_Maopi = Temp_Weight;
}
}
}
void main()
{
Get_Maopi(); //称毛皮重量
InitUART(); //初始化串口
EA = 1; //开总中断
while(1)
{
Get_Weight(); //称重
printf("%d\n",Weight_Shiwu);//串口打印结果
}
}
复制代码
目前程序还有问题,求大佬指点:
读取.zip
(1.83 KB, 下载次数: 15)
2020-2-4 18:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
老大的哥
时间:
2020-3-27 01:15
请问超级终端是什么东西
作者:
老大的哥
时间:
2020-3-27 01:17
还有你要发送的数据一串字母"abcdefg哈哈"不用在什么程序中体现吗,我是小白不太懂,大神可以解释下吗
作者:
子非鱼001
时间:
2020-8-18 13:46
浪费黑币,有问题的东西,大家别下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1