我需要用sht10采集温湿度信息送入单片机,然后通过串口显示到PC上。程序该怎么写?

是要写一个温湿度采集的程序+一个单片机串口发送程序么?那串口程序是直接烧录到单片机上的,可是温湿度程序怎么加载呢?小白求大神指点!在线等!

给你一个DS18B20温度采集程序吧
// 温度采集DS18B20 程序代码
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
sbit DQ = P2^3; //DS18B20数据口
sbit beep=P1^2; //蜂鸣器
uint warn_l=5; //定义温度下限值
uint warn_h=17; //定义温度上限值
unsigned char TMPH,TMPL;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为140US。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_1()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++)
;
}
/********************************************************************
* 名称 : delay()
* 功能 : 延时函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay(uint N)
{
int i;
for(i=0; i<N; i++)
;
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Reset()
* 功能 : 复位DS18B20
* 输入 : 无
* 输出 : 无
***********************************************************************/
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}
/********************************************************************
* 名称 : read_bit()
* 功能 : 从DS18B20读一个位值
* 输入 : 无
* 输出 : 从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
uchar i;
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}
/********************************************************************
* 名称 : write_bit()
* 功能 : 向DS18B20写一位
* 输入 : bitval(要对DS18B20写入的位值)
* 输出 : 无
***********************************************************************/
void write_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/********************************************************************
* 名称 : read_byte()
* 功能 : 从DS18B20读一个字节
* 输入 : 无
* 输出 : 从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
uchar i,m,receive_data;
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}
/********************************************************************
* 名称 : write_byte()
* 功能 : 向DS18B20写一个字节
* 输入 : val(要对DS18B20写入的命令值)
* 输出 : 无
***********************************************************************/
void write_byte(uchar val)
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
/*******************************************************************
* 名称 : warn()
* 功能 : 蜂鸣器报警
* 输入 :beep
* 输出 :蜂鸣器
*******************************************************************/
void warn(uint s)
{
uchar i;i=s;
beep=0;
while(i--);
beep=1;
i=s;
while(i--);
}
/*****************************************************************
* 名称 : deal()
* 功能 : 根据温度上下限控制蜂鸣器间隔
* 输入 : temp
* 输出 : 无
*****************************************************************/
void deal(uint t)
{

if(t<warn_l)
{
warn(20);
}
else if(t>warn_h)
{
warn(10);
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{

uint temp;
P2 = 0x00;
while(1)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPL / 16 + TMPH * 16;
printf("%d",temp); //通过串口发送到PC
deal(temp);
P0 = table[temp/10%10];
P2 = 6;
Delay_1ms(5);
P0 = table[temp%10];
P2 = 7;
Delay_1ms(5);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-28
如果要通过串口与pc通信,则必须pc和单片机都要有串口通信的代码,单片机负责串口通信的程序代码当然要烧录到单片机上,负责温湿度采集的应该是单片机,所以单片机应该有采集温湿度的程序,这部分采集温湿度程序也要烧录到单片机上。追问

所以是两个程序先后烧入单片机,然后单片机再跟PC机串口通信传数据么?谢谢你的回答!

追答

这里没有分什么先后的问题,他们只是一个程序的两种功能而已,对于单片机来说,你要编写一个单片机程序,同时实现串口通讯和温湿度采集功能,然后把单片机程序烧录到单片机程序存储器中即可。

本回答被提问者采纳
第2个回答  2012-07-26
用编辑器写好温湿度读的程序,数据存单片机RAM,然后单片机转换为ASCII码,设置好波特率。通过UART发送。编译为*.HEX文件,通过SPI或者ISP,JTAG烧写进MCU。上电计算机连接用超级终端就能收数据了啊~~
第3个回答  2012-07-26
我也正想做这个,LZ能把你的资料给我看看嘛?[email protected] 谢谢