火箭数据记录系统。。。
小哈_abc2010/08/15电子技术 IP:江苏
记录火箭飞行过程中周围空间的温湿度变化情况,为将来的探空火箭和探空气球作准备。

主控芯片 STC89C52RC
储存芯片 AT24C02
湿度传感器 DHT11
温度传感器 DS18B20


I8YLLA@9%EF](QARSHKMOBN.jpg   
V~I)FP_7[2CKT_N5E@LNK56.jpg
_Q9UYZM7P2)EZN~D{4(}HQN.jpg
记录完毕后取出存储芯片,查到读取器上读取
读取数据时如下图:第133组数据 温度26.3 湿度42%
U0%%O${`ZDS3C%$5ZJ4]])U.jpg
+300  科创币    warmonkey    2010/08/15 优秀
来自:电子信息 / 电子技术
43
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
warmonkey
14年6个月前 IP:未同步
248840
小心火箭把你的芯片振下来。
建议留测试接口

附上源代码再加700分
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248845
DHT11的温度传感器还不够用么....
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
123123123
14年6个月前 IP:未同步
248846
你用来插三极管的是什么东西,我买不到
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248847
尽量不要用插接件.....
那么高的加速度会杯具的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248848
引用第3楼123123123于2010-08-15 21:21发表的  :
你用来插三极管的是什么东西,我买不到

排座呗...
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
123123123
14年6个月前 IP:未同步
248850
不用插接件怎么拔存储芯片,我建议加个保护的东西
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
123123123
14年6个月前 IP:未同步
248852
引用第5楼nhlijiaming于2010-08-15 21:22发表的  :

排座呗...

你是说两排,接IC的插座
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
248855
引用第6楼123123123于2010-08-15 21:23发表的  :
不用插接件怎么拔存储芯片,我建议加个保护的东西

有种东西叫测试针
还有一种东西叫插针
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
248856
引用第7楼123123123于2010-08-15 21:24发表的  :

你是说两排,接IC的插座


2.54mm圆孔排针座
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248857
引用第7楼123123123于2010-08-15 21:24发表的  :

你是说两排,接IC的插座

难道插18B20那个和24C02用的那个就不同?
接24C02的那个不是IC座来的啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
248863
引用第10楼nhlijiaming于2010-08-15 21:30发表的  :

难道插18B20那个和24C02用的那个就不同?
接24C02的那个不是IC座来的啊


回复:用普通IC座不好焊,也不好拔取。。。


6楼:不用插接件怎么拔存储芯片,我建议加个保护的东西
回复:将来会用热熔胶固定的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ltl
14年6个月前 IP:未同步
248869
话说PCB很悲剧……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248870
弄个mma7260/7445测测加速度也好嘛...
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248871
引用第12楼ltl于2010-08-15 21:47发表的  :
话说PCB很悲剧……

感光板嘛.....  有点过曝而已..
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
248892
晶振挂了就彻底悲剧了,建议换AVR用内部RC工作
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
248897
13楼:弄个mma7260/7445测测加速度也好嘛...
回复:正在进行中

15楼:晶振挂了就彻底悲剧了,建议换AVR用内部RC工作
回复:升级版准备改用STC12系列单片机,内部RC
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248899
猴子, 晶振不会飞出来的吧.....
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AsyncMaster
14年6个月前 IP:未同步
248918
而且avr自带eerom,不用外接24C02
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
248923
LS:而且avr能把你的系统成本翻一番
去看了一下mega32L贴片的价, 16.9 还可以......   不过我经常用DIP封装就杯具了 mega16 也要25.0
看LZ那stc的引脚数, 和mega64/128差不多, mega64/128都要价50+了....
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
248924
18楼:而且avr自带eerom,不用外接24C02

回复:STC系列单片机,STC12,11的许多型号单片机都带内部EEROM
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
10班陈大葱22号
14年6个月前 IP:未同步
248974
楼主做的不错啊。建议买个高g的加速度计,那样可以两次积分算飞行高度
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
248983
引用第17楼nhlijiaming于2010-08-15 22:38发表的  :
猴子, 晶振不会飞出来的吧.....

晶振不耐摔。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小特斯拉圈圈
14年6个月前 IP:未同步
248984
建议装在一个紧密的小盒子里,传感器部分开小洞,免得芯片成了自由落体 [s:247]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
绘梦工坊
14年6个月前 IP:未同步
248985
引用第6楼123123123于2010-08-15 21:23发表的  :
不用插接件怎么拔存储芯片,我建议加个保护的东西

打2洞用牛皮筋拉着
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
248992
引用第20楼迷雾水珠于2010-08-15 23:17发表的  :
18楼:而且avr自带eerom,不用外接24C02

回复:STC系列单片机,STC12,11的许多型号单片机都带内部EEROM


那个是假EEPROM用Flash模拟的
我早就放弃了STC,太不方便了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
249015
引用第21楼10班陈大葱22号于2010-08-16 08:46发表的  :
楼主做的不错啊。建议买个高g的加速度计,那样可以两次积分算飞行高度

存进eeprom的话, 一秒只有几十次的采样  积分误差比较大吧....
AVR写eeprom就得8.5ms, 算起来每秒60次采样也差不多了呃..
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
249057
OV7660+Blackfin 531+MMA7455+AIDS16100+SHT11+18B20+SDHC 4GB
还差一个25g的加速度计就可以开工了

大加速度下的力量比较恐怖,流言终结者有个测试就是模拟坠机时的加速度。结果某人的bra里面的钢丝都给扯出来了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jrcsh
14年6个月前 IP:未同步
249059
STC 的52 猫是也逞EEE
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
249066
AIDS16100是什么东东.... 角速度??? 还是气压计?
bra里面有钢丝的么= =
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
249079
再说一遍,希望lz能够上传源代码和电路图,这样能够加2000分
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
249100
LZ真强...  吊着胃口, 700分变2K了..
AIDS16100不会是16100号的hiv病毒吧
有25g的加速度计怎么还用7455呢?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249276
额,原理图没画,我用的是LAYOUT50
程序写的太乱了,我就送上几个重要的模块吧。11.0592M晶振和12M晶振通用。
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###########DS18B20温度读取模块##################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
sbit DQ=P1^0;
void tmpDelay(int num)//延时函数
{
    while(num--) ;
}    
/******************************************************************************/
void Init_DS18B20()//初始化ds1820
{
    unsigned char x=0;
    DQ = 1;    //DQ复位
    tmpDelay(8);  //稍做延时
    DQ = 0;    //单片机将DQ拉低
    tmpDelay(80); //精确延时 大于 480us
    DQ = 1;    //拉高总线
    tmpDelay(14);
    x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    tmpDelay(20);
}
/******************************************************************************/
unsigned char ReadOneChar()//读一个字节
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
    {
        DQ = 0; // 给脉冲信号
        dat>>=1;
        DQ = 1; // 给脉冲信号
        if(DQ)
        dat|=0x80;
        tmpDelay(4);
    }
    return(dat);
}
/******************************************************************************/
void WriteOneChar(unsigned char dat)//写一个字节
{
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
        DQ = 0;
        DQ = dat&0x01;
        tmpDelay(5);
        DQ = 1;
        dat>>=1;
    }
}
/******************************************************************************/
unsigned int Readtemp()//读取温度
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int t=0;
    float tt=0;    
    Init_DS18B20();
    WriteOneChar(0xCC); // 跳过读序号列号的操作
    WriteOneChar(0x44); // 启动温度转换
    Init_DS18B20();
    WriteOneChar(0xCC); //跳过读序号列号的操作
    WriteOneChar(0xBE); //读取温度寄存器
    a=ReadOneChar();   //连续读两个字节数据   //读低8位
    b=ReadOneChar();                          //读高8位
    t=b;
    t<<=8;
    t=t|a; //两字节合成一个整型变量。
    tt=t*0.0625;  //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度
    t= tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
    return(t);


}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###########DS18B20温度读取模块end################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//


这个温度读取模块引用时随便定义一个变量,如unsigned int num;
主程序中写num=Readtemp();即可完成读取温度
十位=num/100; 个位num/10%10;小数=num%10;
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249280
#define uchar unsigned char                        
#define uint unsigned int

sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;

uchar code wendu[]="0123456789";      


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块######################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
void delay(uchar z)
{
    uchar x,y;
    for(x=1000;x>1;x--)
        for(y=z;y>1;y--);
}

void write_com(uchar com)
{
    lcdrs=0;
    P2=com;    
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}
void write_date(uchar date)
{
    lcdrs=1;
    P2=date;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}
void init_lcd()
{
    lcden=0;
    lcdrw=0;
    write_com(0x38);
    write_com(0x01);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x80);    
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块end###################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//

这个是LCD1602的显示模块
引用时先引用init_lcd();初始化LCD

结合上一个温度读取模块,就可以写成一个LCD1602显示的温度计

    num=Readtemp();      //读取温度
    shi=num/100;             //十位
    ge=num/10%10;       //个位
    xiaoshu=num%10;  //小数位

             write_com(0x80);    //LCD1602第一行第一位
    write_date(wendu[shi]);    //显示十位
    write_com(0x81);     //LCD1602第一行第二位
    write_date(wendu[ge]);   //显示个位
    write_com(0x82);      //LCD1602第一行第三位
    write_date(0x2e);     //显示小数点
    write_com(0x83);     //LCD1602第一行第四位
    write_date(wendu[xiaoshu]);  //显示小数点
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249283
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############AT24C02读写模块###################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
/*********************************数据定义**********************************/
#define    OP_READ    0xa1        // 器件地址以及读取操作
#define    OP_WRITE 0xa0        // 器件地址以及写入操作

/*******************************共阳LED段码表*******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/********************************定义全局变量*******************************/
int eepromdata;                //从EEPROM里读出来的数据

/*********************************端口定义**********************************/
sbit SDA = P3^4;
sbit SCL = P3^3;

/****************************************************************************/
void delayms(unsigned char ms)    
{
    unsigned char i;
    while(ms--)
    {
        for(i = 0; i < 120; i++);
    }
}

/****************************************************************************/
void start()
{
    SDA = 1;
    SCL = 1;
    _nop_();
    _nop_();
    SDA = 0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    SCL = 0;
}


/****************************************************************************/
void stop()
{
    SDA = 0;
    _nop_();
    _nop_();
    SCL = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    SDA = 1;
}


/****************************************************************************/
unsigned char shin()

{
    unsigned char i,read_data;
    for(i = 0; i < 8; i++)
    {
        SCL = 1;
        read_data <<= 1;
        read_data |= (unsigned char)SDA;
        SCL = 0;
    }
    return(read_data);
}


/****************************************************************************/
bit shout(unsigned char write_data)
{
    unsigned char i;
    bit ack_bit;
    for(i = 0; i < 8; i++)        
    {
        SDA = (bit)(write_data & 0x80);
        _nop_();
        SCL = 1;
        _nop_();
        _nop_();
        SCL = 0;
        write_data <<= 1;
    }
    SDA = 1;            
    _nop_();
    _nop_();
    SCL = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ack_bit = SDA;            // 读取应答
    SCL = 0;
    return ack_bit;            // 返回AT24Cxx应答位
}

/****************************************************************************/
void write_byte(unsigned char addr, unsigned char write_data)
{
    start();
    shout(OP_WRITE);
    shout(addr);
    shout(write_data);
    stop();
    delayms(10);        
}
/****************************************************************************/
unsigned char read_current()
{
    unsigned char read_data;
    start();
    shout(OP_READ);
    read_data = shin();
    stop();
    return read_data;
}

/****************************************************************************/
unsigned char read_random(unsigned char random_addr)
{
    start();
    shout(OP_WRITE);
    shout(random_addr);
    return(read_current());
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############AT24C02读写模块###################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
引用时先拉高
    SDA = 1;
    SCL = 1;

如想向AT24C02第一位写入2
                         write_byte(1, 2);    //    write_byte(地址, 数据);    一次写一字节,注意不要超值
同理向AT24C02第二位写入温度值的十位
              write_byte(2, shi);    
    
如果想读出AT24C02第一位数据,可以将事先定义的变量eepromdata赋值为独处的数据
    eepromdata= read_random(1);
+700
科创币
warmonkey
2010-08-16
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
249284
重头戏是DHT11。。。快点交出来
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249286
下个程序是DHT11的湿度读取,LCD1602显示程序,DHT11的官方版读取温度湿度的程序,我给改成LCD1602显示,加上了注释。。。DHT11的官方版程序写的太乱了,将就着点。
#include <reg51.h>
#include <intrins.h>
#include<stdio.h>
#define uchar unsigned char                        
#define uint unsigned int  
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable       无符号8位整型变量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable          有符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable       无符号16位整型变量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable       有符号16位整型变量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable       无符号32位整型变量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable       有符号32位整型变量 */
typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
#define uint unsigned int
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;
uchar code tab[]="0123456789";        //利用表解决温度显示乱码
void disdelay(U8 i);


void displayt(uint temph ,uint templ);
void displayr(uint rh ,uint rl);

//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit  P2_0=P0^3 ;  //DHT11的数据脚


void disdelay(U8 i)  //延时代码
{
unsigned int j;
for(i=0;i<8;i++)
    {for(j=0;j<50;j++);
    }
}
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8  U8FLAG,k;
U8  U8count,U8temp;
U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8  U8comdata;
U8  x;
U8  count, count_r=0;
U16 U16temp1,U16temp2;
void Delay(U16 j)
    {      U8 i;
        for(;j>0;j--)
      {    
        for(i=0;i<27;i++);

      }
    }
       void  Delay_10us(void)
      {
        U8 i;
        i--;
        i--;
        i--;
        i--;
        i--;
        i--;
       }
    
void  COM(void)
  {
    
     U8 i;
   for(i=0;i<8;i++)      
     {
        U8FLAG=2;
     while((!P2_0)&&U8FLAG++);
        Delay_10us();
        Delay_10us();
        Delay_10us();
              U8temp=0;
         if(P2_0)U8temp=1;
            U8FLAG=2;
         while((P2_0)&&U8FLAG++);
            

           //超时则跳出for循环          
            if(U8FLAG==1)break;
           //判断数据位是0还是1    
              
        // 如果高电平高过预定0高电平值则数据位为 1
            
           U8comdata<<=1;
              U8comdata|=U8temp;        //0
         }//rof
      
    }

    //--------------------------------
    //-----湿度读取子程序 ------------
    //--------------------------------
    //----以下变量均为全局变量--------
    //----温度高8位== U8T_data_H------
    //----温度低8位== U8T_data_L------
    //----湿度高8位== U8RH_data_H-----
    //----湿度低8位== U8RH_data_L-----
    //----校验 8位 == U8checkdata-----
    //----调用相关子程序如下----------
    //---- Delay();, Delay_10us();,COM();
    //--------------------------------

void RH(void)
{
      //主机拉低18ms
       P2_0=0;
       Delay(180);
       P2_0=1;
     //总线由上拉电阻拉高 主机延时20us
       Delay_10us();
       Delay_10us();
       Delay_10us();
       Delay_10us();
     //主机设为输入 判断从机响应信号
       P2_0=1;
     //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行      
       if(!P2_0)         //T !      
       {
       U8FLAG=2;
     //判断从机是否发出 80us 的低电平响应信号是否结束    
       while((!P2_0)&&U8FLAG++);
       U8FLAG=2;
     //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
       while((P2_0)&&U8FLAG++);
     //数据接收状态        
       COM();
       U8RH_data_H_temp=U8comdata;
       COM();
       U8RH_data_L_temp=U8comdata;
       COM();
       U8T_data_H_temp=U8comdata;
       COM();
       U8T_data_L_temp=U8comdata;
       COM();
       U8checkdata_temp=U8comdata;
       P2_0=1;
     //数据校验
       U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
       if(U8temp==U8checkdata_temp)
       {
             U8RH_data_H=U8RH_data_H_temp;
             U8RH_data_L=U8RH_data_L_temp;
          U8T_data_H=U8T_data_H_temp;
             U8T_data_L=U8T_data_L_temp;
             U8checkdata=U8checkdata_temp;
       }    
       }

    }


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块######################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
void delay1(uchar z)
{
    uchar x,y;
    for(x=1000;x>1;x--)
        for(y=z;y>1;y--);
}

void write_com(uchar com)
{
    lcdrs=0;
    P2=com;    
    delay1(5);
    lcden=1;
    delay1(5);
    lcden=0;
}
void write_date(uchar date)
{
    lcdrs=1;
    P2=date;
    delay1(5);
    lcden=1;
    delay1(5);
    lcden=0;
}
void init_lcd()
{
    lcden=0;
    lcdrw=0;
    write_com(0x38);
    write_com(0x01);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x80);    
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
//###############液晶显示模块end###################//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//

//*******参数传递rh ,rL**********************************
void displayr(U8 rh ,U8 rL)
{  
   U8 sw,gw,xw1,xw2;
   sw=rh/10;//0
   gw=rh%10;
   xw1=rL/10;
   xw2=rL%10;
   write_com(0x80);
   write_date(tab[sw]);

    write_com(0x81);
    write_date(tab[gw]);
    write_com(0x82);
    write_date(0x2e);
    
    write_com(0x83);
    write_date(tab[xw1]);

    write_com(0x84);
    write_date(0x25);
  
}



void main()
{
  init_lcd();
  while(1)
  {
  RH();
  displayr( U8RH_data_H , U8RH_data_L);
  Delay(100);
  }
}
+400
科创币
warmonkey
2010-08-16
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249287
C语言的移植性为我这个还在中学煎熬的孩子打开了方便之门

整理收集一些精简的模块,组合在一起就是一个很好很完美的程序
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
14年6个月前 IP:未同步
249288
引用第35楼warmonkey于2010-08-16 21:11发表的  :
重头戏是DHT11。。。快点交出来

难道你的SHT11出问题了, 然后......................
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
249387
引用第38楼nhlijiaming于2010-08-16 21:24发表的  :

难道你的SHT11出问题了, 然后......................


lz交出DHT11的代码能再加400分,一共1k4
另外我还没买SHT11,只是计划之中,如果DIY的湿度传感器能通过测试,就不用破费了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小哈_abc作者
14年6个月前 IP:未同步
249405
我全部都坦白从宽了。。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
qiufeng
14年6个月前 IP:未同步
249422
引用第40楼迷雾水珠于2010-08-17 12:14发表的  :
我全部都坦白从宽了。。。。。


原理图画在纸上,拍上来;提供HEX。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
14年6个月前 IP:未同步
249424
引用第41楼qiufeng于2010-08-17 12:43发表的  :


原理图画在纸上,拍上来;提供HEX。


提供原理图再加400
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
小哈_abc
学者 笔友
文章
42
回复
759
学术分
3
2009/07/25注册,1年1个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}