搜索
bottom↓
回复: 2

430驱动DHT11 失败,求指点

[复制链接]

出0入0汤圆

发表于 2013-5-10 18:40:22 | 显示全部楼层 |阅读模式
搞了一天了,下面是程序,麻烦各位大神帮忙看看
  1. #include "msp430x14x.h"
  2. #include "Dht11.h"
  3. typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           无符号8位整型变量  */
  4. typedef signed   char  S8;       /* defined for signed 8-bits integer variable                  有符号8位整型变量  */
  5. typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable           无符号16位整型变量 */
  6. typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符号16位整型变量 */
  7. typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable           无符号32位整型变量 */
  8. typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符号32位整型变量 */
  9. typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
  10. typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
  11. //

  12. //===============================================================================
  13. U8  U8temp;
  14. U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  15. U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;


  16. char receive(void)               //接受函数
  17. {
  18.   char tem,cnt=0;                      //临时变量用于存储接受数据
  19.   while(cnt<8)
  20.   {
  21.   while(!(P3IN&BIT0));              //等待50us的低电平结束
  22.   DelayNus(45);  
  23.   if(P3IN&BIT0)                       //长于30us定义为1
  24.   {
  25.     tem++;                       
  26.     tem<<=1;
  27.     while(P3IN&BIT0);             //结束高电平
  28.   }
  29.   else
  30.   {
  31.     tem<<=1;
  32.   }
  33.   if(cnt!=7)
  34.     while(!(P3IN&BIT0));              //最后一次给函数返回留下时间
  35.   cnt++;
  36.   }
  37.   return tem;
  38. }
  39. void RH(void)
  40. {
  41.   LOW;
  42.   DelayNus(18000);
  43.   HIGH;
  44.   DelayNus(30);
  45.   P3DIR&=~BIT0;  
  46.   while(P3IN&BIT0);
  47.   
  48.   while(!(P3IN&BIT0));
  49.   while(P3IN&BIT0);
  50.   //Data comes  
  51.   U8RH_data_H=receive();
  52.   U8RH_data_L=receive();
  53.   U8T_data_H=receive();
  54.   U8T_data_L=receive();
  55.   U8checkdata_temp=receive();
  56.   U8checkdata=U8RH_data_H+U8RH_data_L+U8T_data_H+U8T_data_L;
  57.   if(U8checkdata_temp==U8checkdata)
  58.   {
  59.     //LPM0;
  60.   }
  61. }
复制代码
  1. #include <msp430x14x.h>
  2. #include "ds1302.h"
  3. #include "DS18B20.h"
  4. #include "Cry12864.h"
  5. #include "Keypad.h"
  6. #include "Dht11.h"

  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. //要显示的6位温度数字
  10. //顺序:秒,分,时,日,月,星期,年;格式:BCD
  11. uchar times[7]={00,00,20,9,5,4,13};
  12. uchar time_buf[7];
  13. uchar num=0;
  14. uchar Rh_num=0;
  15. uchar temp_flag=0;

  16. void ShowTime(void);

  17. void main(void)
  18. {
  19.     uchar i;
  20.     uchar tmp;
  21.     WDTCTL = WDTPW + WDTHOLD;    //关狗
  22.      /*------选择系统主时钟为8MHz-------*/
  23.     BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
  24.     do
  25.     {
  26.         IFG1 &= ~OFIFG;                 //清除晶振失败标志
  27.         for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
  28.     }
  29.     while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
  30.     BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振
  31.    
  32.     //设置DS18B20的IO状态
  33.     P6DIR |= BIT5;
  34.     P6OUT |= BIT5;
  35.     //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
  36.     TACTL |= TASSEL_2 + ID_3;
  37.     TBCCTL0 = CCIE;                           // TBCCR0 interrupt enabled
  38.     TBCCR0 = 65000-1;
  39.     TBCTL = TBSSEL_2 + MC_1;                  // SMCLK, upmode
  40.    
  41.     //打开全局中断
  42.     _EINT();

  43.     Ini_Lcd();                  //初始化液晶
  44.     Reset_DS1302();
  45.    
  46.     for(i=0;i<7;i++)
  47.     {           //BCD处理
  48.         tmp=times[i]/10;
  49.         time_buf[i]=times[i]%10;
  50.         time_buf[i]=time_buf[i]+tmp*16;
  51.     }
  52.     Set_DS1302(time_buf);
  53.     while(1)
  54.     {
  55.        Get_DS1302(times);
  56.        if(Rh_num==221)   RH();
  57.     }
  58.    
  59. }

  60. /*******************************************
  61. 函数名称:ShowTime
  62. 功    能:将DS1302的时间转换成10进制显示
  63. 参    数:无
  64. 返回值  :无
  65. ********************************************/   
  66. void ShowTime(void)
  67. {
  68.      
  69.    
  70.     Write_Cmd(0x80);
  71.     Write_Data((times[2]>>4)+0x30);//时
  72.     Write_Data((times[2]&0x0f)+0x30);
  73.     Write_Data(0x3a);
  74.     Write_Data((times[1]>>4)+0x30);//分
  75.     Write_Data((times[1]&0x0f)+0x30);
  76.     Write_Data(0x3a);
  77.     Write_Data((times[0]>>4)+0x30);//秒
  78.     Write_Data((times[0]&0x0f)+0x30);

  79. }


  80. #pragma vector=TIMERB0_VECTOR
  81. __interrupt void Timer_B (void)
  82. {
  83.    num++;
  84.    Rh_num++;
  85.    if(num==100)
  86.    {
  87.       Disp_Numb(Do1Convert());
  88.       num=0;
  89.       
  90.       
  91.    }
  92.    if(Rh_num==221)
  93.    {
  94.      
  95.       Rh_num=0;
  96.    }
  97.   if((Rh_num==1)||(Rh_num==200)||(Rh_num==100))
  98.    {
  99.       Write_Cmd(0x90);
  100.       Write_Data((uchar)(U8RH_data_H/10)+0x30);
  101.       Write_Data((uchar)(U8RH_data_H%10)+0x30);
  102.    
  103.    }
  104.    if(num==40)
  105.    {
  106.    
  107.      ShowTime();//显示时间
  108.    }
  109.    
  110.    if(num==54)//显示温度
  111.    {
  112.       
  113.       Write_Cmd(0x88);
  114.       Write_Data(dN[5]+0x30);
  115.       Write_Data(dN[4]+0x30);
  116.       Write_Data(0x2e);//0x2e是小数点对应的ASCII码值
  117.       Write_Data(dN[3]+0x30);
  118.       Write_Data(dN[2]+0x30);
  119.       Write_Data(dN[1]+0x30);
  120.       Write_Data(dN[0]+0x30);
  121.       Write_Data(' ');
  122.       Disp_HZ(0x8c,"度",1);
  123.    }
  124.   
  125. }
复制代码
在定时器里对时间和温度进行显示的,同时放在主程序的话,12864液晶很容易乱码。。只有这样效果稍稍好点。求大神帮忙解答下。
这是完整工程

谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-5-24 00:35:12 | 显示全部楼层
你的硬件电路怎么接的?

出0入0汤圆

发表于 2013-5-25 23:26:27 | 显示全部楼层
..我大一时候用51写的...楼主可以比对下....话说那个DHT11 我用了一次之后就再不用了....准度太差了....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 12:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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