这原来是一个小项目,目的是用sht10温湿传感器对室外的温湿度值采集,依靠从机将数据经过无线24l01模块发送到室内主机上,进行显示;
在单独一部单片机上已经实现显示了,这部分是我同学调试通过的,就是这个无线我就一直没有调试通过,老尴尬了,现在与大家一起分享这份资料吧,看看有没有好点子的。
稍后我将图片传上来,我先将资料接口方法资料给大家。
主程序:
/***************************************
SHT10测试程序(根据手册中的时序写的)
MCU:ATmega16
晶振:8M
编译器:ICCAVR
*****************************************/
#include <iom16v.h>
#include <avrdef.h>
#include "12864.c"
#include "shit10.h"
//#include "test.c"
#include "delay.c"
/*=====宏定义=======================================*/
#define RESET 0x1e //0001 1110
/*=====函数声明===============================================*/
void delay_ms(int t);
void s_transstart(void);
char s_write_byte(unsigned char value); //写入一个字节的命令,并且检查传感器是否正确接收了这个数据,返回值为0表示正确接收
char s_read_byte(unsigned char ack); //读一个字节的数据,并且向传感器发出一个字节的“已接收”信号
int s_measure(unsigned char mode); //进行一次测量
void calc_sth11(float *p_humidity ,float *p_temperature);//测量结果修正
//-----温湿度显示------------------------------------------------
char a[]="00.00 C";
char b[]="00.00 %";
char c[]="Temp:";
char d[]="Humi:";
/*-----主函数-----------------------------------------------------------*/
void main(void)
{
float temp,humi;
delay_ms(20); //越过休眠状态
init_lcd();
while(1)
{
//init_NRF24L01();
temp= s_measure(TEMP);
humi= s_measure(HUMI);
calc_sth11(&humi,&temp);
a[0]=(int)(temp*100)/1000+0x30;
a[1]=(int)(temp*100)/100%10+0x30;
a[3]=(int)(temp*100)/10%10+0x30;
a[4]=(int)(temp*100)%10+0x30;
lcd_write(1,3,a); //lcd_wright(行,列,数组) '字符显示位置'
lcd_write(1,0,c);
b[0]=(int)(humi*100)/1000+0x30;
b[1]=(int)(humi*100)/100%10+0x30;
b[3]=(int)(humi*100)/10%10+0x30;
b[4]=(int)(humi*100)%10+0x30;
lcd_write(2,3,b);
lcd_write(2,0,d);
delay_ms(1000);
}
}