找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3448|回复: 4
打印 上一主题 下一主题
收起左侧

nrf905 dht21 数据传输 温湿度经过max7219显示 52单片机 求大神!!

[复制链接]
跳转到指定楼层
楼主
ID:82166 发表于 2015-6-6 02:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个的dht21已经写好了
就是没办法让他用数码管显示
16转十进制那个地方不行‘应该是
还有nrf905是用来远程传输的
在终端上用12864显示】

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-6-6 02:17 来自手机 | 只看该作者
程序贴上来瞧瞧
回复

使用道具 举报

板凳
ID:82166 发表于 2015-6-6 02:31 | 只看该作者
#include<reg52.h>
//#include"dht21shumaguan.c"
#include <intrins.h>
#include <stdio.h>   
#define uint unsigned int
#define uchar unsigned char
unsigned int i;
sbit CLK=P3^2;  //MAX7219时钟信号线
sbit LD=P3^3;  //数据加载线
sbit DIN=P3^4;  //数据输入线
sbit p33= P2^7;//dht11数据输入口

uchar dis1[];

unsigned char code num[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,
0x77,0x1f,0x4e,0x3d,0x01,0x00};  
void w_max7219(unsigned char addr,unsigned char wdata);  
void init_max7219();  //MAX7219
void timer_ms(unsigned char tim);

unsigned char a,b;
//unsigned char num[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};  //共阳
void delayms(uint xms)
{
    uint i,j;
        for(i=xms;i>0;i--)
        for(j=114;j>0;j--);
}  



//dht11程序部分
typedef unsigned char  U8;//全局变量uchar类型意思是可接收8位二进制
typedef unsigned int   U16;//全局变量uint类型意思是可接受16位二进制
U8 U8FLAG;
U8 U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;//分别代表高8位温度,低八位温度,高八位湿度,低八位湿度,校验和U8  
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;//同上
U8 U8comdata;
/***********************/
U16 DHTData1,DHTData2;

/***********************/
U8 count; //数据接收变量
void Delay(U16 j) //100us延时
{  
     
          U8 i;         
          for(;j>0;j--)         
          {                  
           for(i=0;i<27;i++);         
           }
}
void Delay_10us(void)        //进入函数3us
{          U8 i;               
           i--;                  
                   i--;        
                   i--;        
                   i--;        
                   i--;        
                   i--;
}  
void COM(void)
{ U8 i;         
   for(i=0;i<8;i++)            
   {  U8FLAG=2;//将其赋值为2所以下段程序中其变量只能执行253此每次约1us做延时用的   
    while((!p33)&&U8FLAG++);//由于初始时主机将数据线拉低大约时间记不清了自己看时序图吧其中U8FLAG最多可加到255
        Delay_10us();
        Delay_10us();
        Delay_10us();
        U8temp=0;
        if(p33)U8temp=1;//此处代表dht11与单片机连接上了选择接收到的数据是一还是零
       
        U8FLAG=2;
        while((p33)&&U8FLAG++); //超时则跳出for循环
        if(U8FLAG==1)break;
        U8comdata<<=1;
        U8comdata|=U8temp;
   }
}//按照说明上接到的顺序是温度高八位温度低八位湿度高八位湿度低八位
void RH(void)
{
//主机拉低18ms
p33=0;
Delay(5); /************************/
p33=1; //总线由上拉电阻拉高主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us(); //主机设为输入判断从机响应信号
p33=1; //判断从机是否有低电平响应信号如不响应则不读数据,响应则向下运行
if(!p33)//p20==0往下执行
{U8FLAG=2;//判断从机发出80us的低电平响应信号是否结束
while((!p33)&&U8FLAG++);//强制低电平信号最长为254us
U8FLAG=2;//判断从机发出80us的高电平,如发出则进入数据接收状态
while((p33)&&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;
p33=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;//低八位为0
                      DHTData1  = U8RH_data_H;
                    DHTData1<<= 8;
                        DHTData1        |= U8RH_data_L;
                       
                         
                         U8T_data_H=U8T_data_H_temp;
                           U8T_data_L=U8T_data_L_temp;//低八位为0
                             DHTData2  = U8T_data_H;
                          DHTData2        <<=8;
                          DHTData2|= U8T_data_L;

                         U8checkdata=U8checkdata_temp;//湿度值
             }
        }
}
void display()
    {
        dis1[0]=DHTData1/100;
        dis1[1]=DHTData1%100/10;
        dis1[2]= DHTData2/100;
    dis1[3]= DHTData2%100/10;
        dis1[4]= DHTData2%10;
         U8checkdata=U8checkdata_temp;
        }









void main(){
        while(1){
                         RH();
                 init_max7219();  //MAX7219初始化函数
        display();

                  w_max7219(0x01,num[        0]);  //向MAX7219
                  w_max7219(0x02,num[        dis1[2]]);
                  w_max7219(0x03,num[dis1[3]]-0x80);  
                  w_max7219(0x04,num[dis1[4]]);
                delayms(1000);
                init_max7219();


          //        w_max7219(0x05,num[5]);
          //        w_max7219(0x06,num[6]);  
          //        w_max7219(0x07,num[7]);
          //        w_max7219(0x08,num[8]);

        }
}

void init_max7219()
{
  w_max7219(0x0a,0x07);  
  w_max7219(0x0b,0x07);  
  w_max7219(0x09,0x00);  
  w_max7219(0x0c,0x01);
  w_max7219(0x0f,0x00);
  timer_ms(2);
}

/*********************************************************************************************
函数名称:w_max7219

*********************************************************************************************/
void w_max7219(unsigned char addr,unsigned char wdata)
{
  unsigned int temp,i=1,j,k;
  LD=0;
  while(i<16)
  {
    if(i<8) temp=addr;
        else temp=wdata;
        for(j=0;j<8;j++)
        {
         CLK=0;
         if((temp&0x80)==0x80) DIN=1;
         else DIN=0;
      for(k=5;k>0;k--);
         CLK=1;
      for(k=5;k>0;k--);
         temp<<=1;                  
        }
        i+=8;
  }
  LD=1;
}

/*-------------------------------------------------------------------------------------------
函数名称: timer_ms
函数说明: 1ms延时子程序

------------------------------------------------------------------------------------------*/

void timer_ms(unsigned char tim)
{
  unsigned char i;
  while(tim--)
  {
    for(i=0;i<200;i++);   //延时1ms
  }
}
回复

使用道具 举报

地板
ID:82166 发表于 2015-6-6 02:32 | 只看该作者
admin 发表于 2015-6-6 02:17
程序贴上来瞧瞧

贴上了    谢谢   连夜调程序中
回复

使用道具 举报

5#
ID:1 发表于 2015-6-7 01:05 | 只看该作者
你这个程序 数码管上面显示的内容是上面?乱码?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表