PC机与单片机温度检测系统的设计

工作需要:下位机采用单片机实现数据的采集并通过串行通信上传数据,上位机利用组态王设计数据显示与曲线绘制的图形界面各位大侠请帮下忙,我还不清楚具体设计流程。若有各方面资料请... 工作需要:下位机采用单片机实现数据的采集并通过串行通信上传数据,上位机利用组态王设计数据显示与曲线绘制的图形界面

各位大侠请帮下忙,我还不清楚具体设计流程。若有各方面资料请留下邮箱,再此先谢过。
感谢zhguyi321的回答 不过我是一个菜鸟 不知有没图片让我看看

这几天才知道我的毕业设计软硬件都要自己弄 单片机那一块要自己焊 不能用市面上能买到的那些集成好的板块 功能不需太多 只要能采集能与电脑串口通信外加数码显示就好 但我单片机硬件这块一点都不懂 不知需要什么元件来焊 怎么焊 希望各位大侠能帮帮忙 若能解决我的问题 我会提高悬赏的
同样感谢hookwei的回答 竟然感兴趣 何不说的详细些 虽然我是前些天才注册的号 但这些天也积攒了一些分 若能很好的回答 我会拿全部分数作为悬赏的
展开
 我来答
zhguyi321
2009-03-15 · TA获得超过5258个赞
知道小有建树答主
回答量:387
采纳率:100%
帮助的人:155万
展开全部
如果单纯采集温度的话,用普通的89S52 + DS18B20 就可以实现,通信考虑到速度与抗干扰可以采用串行差分传输 26LS31 26LS32芯片,很容易实现的。上位机得到数据后怎么处理还不随你吗。
hookwei
2009-03-29 · TA获得超过187个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:391万
展开全部
给钱的话倒是有兴趣
下位机用51+DS18B20,串口传送数据到PC
---------------------------------------
积分不稀罕的,要是送几个DS18B20倒还不错
若是只是几路温度采集的话,用DS18B20都不用读序列号,一个IO带一个DS18B20就是了,毕业设计不是工业应用,抗干扰都可以不考虑的.

#ifndef _DS18B20_H_
#define _DS18B20_H_

sbit DQ=P0^0;
idata unsigned char TempBuffer[7];
xdata unsigned char DS18B20_ID[8];
unsigned char temp_value,temp1_value;
/**********ds18b20初始化函数**********************/

void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_nus(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_nus(40); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_nus(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay_nus(20);
}

/***********ds18b20读一个字节**************/

unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_nus(4);
}
return(dat);
}

/*************ds18b20写一个字节****************/

void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_nus(5);
DQ = 1;
dat>>=1;
}
}

/**************读取ds18b20当前温度************/

void ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;

Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换

delay_nus(100); // this message is wery important

Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

delay_nus(100);

a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
temp1_value=a&0x0f;
}

void temp_to_str() //温度数据转换成液晶字符显示
{
TempBuffer[0]=temp_value/10+'0'; //十位
TempBuffer[1]=temp_value%10+'0'; //个位
TempBuffer[2]='.';
TempBuffer[3]=temp1_value*625/1000%10+'0';
TempBuffer[4]=0xdf; //温度符号
TempBuffer[5]='C';
TempBuffer[6]='\0';
if(TempBuffer[0]==0x30)
{
TempBuffer[0]=0x20;//如果十位为0,不显示
}
}

#endif
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
启岩
2009-03-29 · TA获得超过1851个赞
知道小有建树答主
回答量:809
采纳率:0%
帮助的人:643万
展开全部
我有个采集温度的PC机界面程序(VB)邮箱xmxqiyan@163.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式