极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12383|回复: 8

请各位兄弟帮帮看看是什么原因

[复制链接]
发表于 2013-12-16 19:44:58 | 显示全部楼层 |阅读模式

  1. /主函数
  2. #include<uart.h>
  3. #include <KEYS.h>
  4. #include <BoeBot.h>
  5. #include <stdlib.h>
  6. #include <intrins.h>
  7. #include <lcd2004.h>

  8. //----------------IO口定义区--------------------//
  9. sbit        DHT = P1^2 ;  //DHT11数据引脚
  10. sbit        SDA=P0^1 ;    //DS1307数据输入
  11. sbit        SCLK=P0^0;    //DS1307时钟输入
  12. sbit        Key1=P3^2;          //功能键
  13. sbit        Key2=P3^3;          //加
  14. sbit        Key3=P3^4;          //减

  15. //----------------变量定义区------------------//
  16. unsigned char  U8FLAG,k;
  17. unsigned char  U8count,U8temp;
  18. unsigned char  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  19. unsigned char  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  20. unsigned char  U8comdata;
  21. unsigned char  temp[5]={"****"};                   //温度数组
  22. unsigned char  humi[6]={"*****"};                 //湿度数组
  23. unsigned char  time[9]={"********"};           //时间数组
  24. unsigned char  date[9]={"********"};        //日期数组
  25. unsigned char  weekdata[4]={"***"};        //定义星期数组
  26. unsigned char set_rtc_code[7]={0,40,18,2,13,3,12};         //初始化DS1307,{秒,分钟,小时,星期,        日,月,年}
  27. //unsigned char reset_rtc_code[7];
  28. code unsigned char rtc_address[7]={0x00,0x01,0x02,0x03,0x04,0x05,0x06};
  29. unsigned char read_rtc_code[7]={"1234567"};
  30. //unsigned char ntime[2]={0,0};
  31. volatile unsigned char s1num=0,miao;
  32. volatile unsigned char year;week=0,second=0,minute=0,hour=0,day=0,month=0;
  33. //bit ntime_flag=0,flag1=0;
  34. //unsigned char i=0;                  
  35. //idata unsigned char miao,shi,fen,ri,yue,nian,week;
  36. //idata unsigned char ring_time=0,alarm_hour2=0,alarm_minute2=4,alarm_2_ok=0,alarm_2_en=1,alarm_2_off=0;
  37. //idata unsigned char year;week=0,second=0,minute=0,hour=0,day=0,month=0;  //分别保存秒、分、时、天、月、年的变量


  38. void Delay(unsigned int j)        //定义延时函数
  39.     {
  40.                 unsigned char i;
  41.             for(;j>0;j--)
  42.                           {        
  43.                                 for(i=0;i<27;i++);
  44.                           }
  45.     }

  46. void  Delay_10us(void)
  47.         {
  48. _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  49.         }
  50. void chan(void)                         //转换字符函数
  51.         {
  52.         time[0]=read_rtc_code[2]/10+'0';
  53.         time[1]=read_rtc_code[2]%10+'0';           //小时
  54.         time[2]=':';
  55.         time[3]=read_rtc_code[1]/10+'0';
  56.         time[4]=read_rtc_code[1]%10+'0';        //分钟
  57.         time[5]=':';
  58.         time[6]=read_rtc_code[0]/10+'0';
  59.         time[7]=read_rtc_code[0]%10+'0';        //秒
  60.         time[8]='\0';
  61.         date[0]=read_rtc_code[6]/10+'0';
  62.         date[1]=read_rtc_code[6]%10+'0';        //年
  63.         date[2]='-';
  64.         date[3]=read_rtc_code[5]/10+'0';
  65.         date[4]=read_rtc_code[5]%10+'0';        //月
  66.         date[5]='-';
  67.         date[6]=read_rtc_code[4]/10+'0';
  68.         date[7]=read_rtc_code[4]%10+'0';        //日
  69.         date[8]='\0';
  70.         switch (read_rtc_code[3])                         //星期
  71.                   {
  72.                   case 1:weekdata[0]='M';weekdata[1]='o';weekdata[2]='n';break;
  73.             case 2:weekdata[0]='T';weekdata[1]='u';weekdata[2]='e';break;
  74.             case 3:weekdata[0]='W';weekdata[1]='e';weekdata[2]='d';break;
  75.             case 4:weekdata[0]='T';weekdata[1]='h';weekdata[2]='u';break;
  76.             case 5:weekdata[0]='F';weekdata[1]='r';weekdata[2]='i';break;
  77.             case 6:weekdata[0]='S';weekdata[1]='a';weekdata[2]='t';break;
  78.             case 7:weekdata[0]='S';weekdata[1]='u';weekdata[2]='n';break;
  79.                    }
  80.         }
  81. /******************************** I2C PART START  *********************/

  82. void I2C_delay(void)
  83.         {
  84.                   _nop_();_nop_();_nop_();//_nop_();_nop_();                         //1.调整延时时间和上拉电阻,保证数据稳定
  85.                                                                                                          //2.DS1307与DHT11的供电部分加滤波,接地太近有干扰
  86.         }
  87. /***********************************************************************/
  88. void I2C_start(void)
  89.         {

  90.         //SCLK=0;
  91.         //I2C_delay();
  92.           SDA=1;
  93.           //I2C_delay();
  94.         _nop_();
  95.           SCLK=1;
  96.           //I2C_delay();
  97.         _nop_();
  98.           SDA=0;
  99.           //I2C_delay();
  100.         _nop_();
  101.           SCLK=0;
  102.         //I2C_delay();
  103.         _nop_();
  104.         }
  105. /***********************************************************************/
  106. void I2C_stop(void)
  107.         {
  108.         //SCLK=0;
  109.           SDA=0;
  110.         //I2C_delay();
  111.         _nop_();
  112.           SCLK=1;
  113.           //SCLK=1;
  114.           //I2C_delay();
  115.         _nop_();
  116.           SDA=1;
  117.           //I2C_delay();
  118.         _nop_();
  119.         SCLK=0;
  120.         //I2C_delay();//_nop_();
  121.         //SDA=0;
  122.         }
  123. /***********************************************************************/
  124. void I2C_send_ack(bit k)
  125.         {
  126.           SDA=k;
  127.           I2C_delay();
  128.           SCLK=1;
  129.           I2C_delay();
  130.           SCLK=0;
  131.           //I2C_delay();
  132.         }
  133. /***********************************************************************/
  134. void I2C_write_byte(unsigned char dat)
  135.         {
  136.         unsigned char i;
  137.            for (i=0;i<8;i++)
  138.             {
  139.              SCLK=0;
  140.                 //_nop_();
  141.              I2C_delay();
  142.              SDA=(bit)(dat&0x80);
  143.              dat<<=1;
  144.              I2C_delay();
  145.              SCLK=1;
  146.              I2C_delay();
  147.             }
  148.     SCLK=0;
  149.         //I2C_delay();  
  150.         }
  151. /***********************************************************************/
  152. unsigned char I2C_read_byte(void)
  153.         {
  154.         unsigned char i,dat;

  155.            for (i=0;i<8;i++)
  156.             {
  157.              SCLK=0;
  158.              I2C_delay();       
  159.              SDA=1;
  160.              I2C_delay();
  161.             SCLK=1;
  162.              I2C_delay();
  163.              if(SDA)
  164.              dat|=0x80>>i;  
  165.             }
  166.     SCLK=0;
  167.         //I2C_delay();   
  168.            return (dat);
  169.         }
  170. /******************************** DS1307 PART START  ****************/
  171. unsigned char Write1307(unsigned char add,dat)        //向DS1307写入数据
  172.         {
  173.           unsigned char temp;
  174.           temp=dat/10;
  175.           temp<<=4;
  176.           temp=dat%10+temp;
  177.           I2C_start();                 
  178.           I2C_write_byte(0xD0);  
  179.           I2C_send_ack(0);                 
  180.           I2C_write_byte(add);  
  181.           I2C_send_ack(0);             
  182.           I2C_write_byte(temp);   
  183.           I2C_send_ack(1);          
  184.           I2C_stop();                  
  185.           return (0);
  186.         }
  187. /***********************************************************************/
  188. unsigned char Read1307(unsigned char add)                  //从DS1307读取数据
  189.         {
  190.           int temp,dat;
  191.           I2C_start();
  192.           I2C_write_byte(0xD0);
  193.           I2C_send_ack(0);         
  194.           I2C_write_byte(add);
  195.           I2C_send_ack(1);       
  196.           I2C_stop();         
  197.           I2C_start();       
  198.           I2C_write_byte(0xD1);
  199.           I2C_send_ack(0);          
  200.           dat=I2C_read_byte();
  201.           I2C_send_ack(1);         
  202.           I2C_stop();     
  203.           temp=dat/16;
  204.           dat=dat%16;
  205.           dat=dat+temp*10;
  206.           return (dat);
  207.         }
  208. /***********************************************************************/
  209. void Read_RTC(void)
  210.         {
  211.         unsigned char i,*p;
  212.         p=rtc_address;
  213.         for(i=0;i<7;i++)
  214.                 {
  215.                 read_rtc_code[i]=Read1307(*p);
  216.                 p++;
  217.                   delay_nms(1);
  218.                 }
  219.         }
  220. /***********************************************************************/
  221. void Set_RTC(void)
  222.         {
  223.         unsigned char i,*p;
  224.         p=rtc_address;
  225.         for(i=0;i<7;i++)
  226.                 {
  227.                 Write1307(*p,set_rtc_code[i]);
  228.                 p++;  
  229.                 }
  230.         }  
  231. /******************************** DS1307 PART STOP  ****************/

  232. void refresh(void)                                 //转换字符
  233.         {
  234.         Read_RTC();
  235.         second=read_rtc_code[0];
  236.         minute=read_rtc_code[1];
  237.         hour=read_rtc_code[2];
  238.         week=read_rtc_code[3];
  239.         day=read_rtc_code[4];
  240.         month=read_rtc_code[5];
  241.         year=read_rtc_code[6];
  242.         }

  243. unsigned char turn_val(char newval,unsigned char flag,unsigned char s1num  )                //判断设定的数值是否超过限定的上界或下界
  244.         {
  245.         if(flag)                  
  246.                 {
  247.                   switch(s1num)
  248.                     {
  249.                         case 1:
  250.                                 {       
  251.                                 if(newval>99)
  252.                                   newval=0;
  253.                         date[0]=newval/10+'0';
  254.                                 date[1]=newval%10+'0';
  255.                                 Display_List_Char(0,7,date);
  256.                                   break;
  257.                                 }
  258.                      case 2:
  259.                                 {
  260.                                 if(newval>12)
  261.                                 newval=1;
  262.                              date[3]=newval/10+'0';
  263.                                 date[4]=newval%10+'0';
  264.                                 Display_List_Char(0,7,date);
  265.                                   break;
  266.                                 }
  267.                      case 3:
  268.                                 {
  269.                                 if(newval>31)
  270.                                 newval=1;
  271.                                 date[6]=newval/10+'0';
  272.                                 date[7]=newval%10+'0';
  273.                                 Display_List_Char(0,7,date);
  274.                                   break;
  275.                                 }
  276.                      case 4:
  277.                                 {
  278.                                 if(newval>7)
  279.                                 newval=1;
  280.                           switch (newval)
  281.                                           {
  282.                                                   case 1:weekdata[0]='M';weekdata[1]='o';weekdata[2]='n';break;
  283.                                             case 2:weekdata[0]='T';weekdata[1]='u';weekdata[2]='e';break;
  284.                                             case 3:weekdata[0]='W';weekdata[1]='e';weekdata[2]='d';break;
  285.                                                 case 4:weekdata[0]='T';weekdata[1]='h';weekdata[2]='u';break;
  286.                                             case 5:weekdata[0]='F';weekdata[1]='r';weekdata[2]='i';break;
  287.                                             case 6:weekdata[0]='S';weekdata[1]='a';weekdata[2]='t';break;
  288.                                             case 7:weekdata[0]='S';weekdata[1]='u';weekdata[2]='n';break;
  289.                                         }
  290.                                  Display_List_Char(0,16,weekdata);
  291.                                   break;
  292.                                 }
  293.                       case 5:
  294.                                 {
  295.                                 if(newval>23)
  296.                                 newval=0;
  297.                     time[0]=newval/10+'0';
  298.                                 time[1]=newval%10+'0';
  299.                                 Display_List_Char(1,5,time);
  300.                                   break;
  301.                                 }
  302.                       case 6:
  303.                         {       
  304.                                 if(newval>59)
  305.                                 newval=0;
  306.                           time[3]=newval/10+'0';
  307.                                 time[4]=newval%10+'0';
  308.                                 Display_List_Char(1,5,time);
  309.                                   break;
  310.                         }
  311.                       case 7:
  312.                         {
  313.                                 if(newval>59)
  314.                                 newval=0;
  315.                           time[6]=newval/10+'0';
  316.                                 time[7]=newval%10+'0';
  317.                                 Display_List_Char(1,5,time);
  318.                                   break;
  319.                         }
  320.                       default:break;
  321.             }
  322.         }   
  323.         else
  324.     {
  325.                 switch(s1num)
  326.         {
  327.                         case 1:
  328.                         {
  329.                                 if(newval<0)
  330.                                 newval=99;
  331.                                 date[0]=newval/10+'0';
  332.                                 date[1]=newval%10+'0';
  333.                                 Display_List_Char(0,7,date);
  334.                                 break;
  335.                         }
  336.                     case 2:
  337.                         {
  338.                                 if(newval==0)
  339.                                 newval=12;
  340.                                  date[3]=newval/10+'0';
  341.                                 date[4]=newval%10+'0';
  342.                                 Display_List_Char(0,7,date);
  343.                             break;
  344.                         }
  345.                     case 3:
  346.                         {
  347.                                 if(newval==0)
  348.                                 newval=31;
  349.                                  date[6]=newval/10+'0';
  350.                                 date[7]=newval%10+'0';
  351.                                 Display_List_Char(0,7,date);
  352.                             break;
  353.                         }
  354.                     case 4:
  355.                         {
  356.                                 if(newval==0)
  357.                                 newval=7;
  358.                                    switch (newval)
  359.                                           {
  360.                                                   case 1:weekdata[0]='M';weekdata[1]='o';weekdata[2]='n';break;
  361.                                             case 2:weekdata[0]='T';weekdata[1]='u';weekdata[2]='e';break;
  362.                                             case 3:weekdata[0]='W';weekdata[1]='e';weekdata[2]='d';break;
  363.                                             case 4:weekdata[0]='T';weekdata[1]='h';weekdata[2]='u';break;
  364.                                                     case 5:weekdata[0]='F';weekdata[1]='r';weekdata[2]='i';break;
  365.                                             case 6:weekdata[0]='S';weekdata[1]='a';weekdata[2]='t';break;
  366.                                             case 7:weekdata[0]='S';weekdata[1]='u';weekdata[2]='n';break;
  367.                                         }
  368.                                  Display_List_Char(0,16,weekdata);
  369.                                 break;
  370.                         }
  371.             case 5:
  372.                         {       
  373.                                 if(newval<0)
  374.                                 newval=23;
  375.                                    time[0]=newval/10+'0';
  376.                                 time[1]=newval%10+'0';
  377.                                 Display_List_Char(1,5,time);
  378.                                 break;
  379.                         }
  380.             case 6:
  381.                         {
  382.                                 if(newval<0)
  383.                                 newval=59;
  384.                                    time[3]=newval/10+'0';
  385.                                 time[4]=newval%10+'0';
  386.                                 Display_List_Char(1,5,time);
  387.                             break;
  388.                         }
  389.             case 7:
  390.                         {
  391.                                 if(newval<0)
  392.                                 newval=59;
  393.                                    time[6]=newval/10+'0';
  394.                                 time[7]=newval%10+'0';
  395.                                 Display_List_Char(1,5,time);
  396.                                 break;
  397.                         }
  398.                         default:break;
  399.              }
  400.         }

  401.         return newval;
  402.            
  403.         }
  404. void key_scan(void)
  405.         {       
  406.         unsigned char s1num=0;
  407.         refresh();
  408.         //delay_nms(500);
  409.         if(Key1==0)
  410.             {
  411.               delay_nms(30);                                  //按键延时去抖
  412.                    if(Key1==0)
  413.                    {
  414.                         while(1)
  415.                         {
  416.                                 if(Key1==0)
  417.                      {
  418.                         delay_nms(30);
  419.                             if(Key1==0)
  420.                               {
  421.                                              while(!Key1);
  422.                                  s1num++;
  423.                                   }
  424.                          }
  425.                         LCM_RW=0;
  426.                             Write_Command_LCM(0x0f,1);                                      //光标闪
  427.                                 if(s1num==1)
  428.                                 {       
  429.                                         Write_Command_LCM(0x80+0x07,1);                                         //年光标
  430.                                     if(Key2==0)
  431.                                      {
  432.                                                delay_nms(30);
  433.                                                if(Key2==0)
  434.                                          {        
  435.                                                         while(!Key2);
  436.                                                         year++;
  437.                                                           year=turn_val(year,1,1);                          //送入实时显示函数
  438.                          }
  439.                                       }
  440.                             if(Key3==0)
  441.                                 {
  442.                                         delay_nms(30);
  443.                                         if(Key3==0)
  444.                                          {       
  445.                                                         while(!Key3);
  446.                                                         year--;
  447.                                                    year=turn_val(year,0,1);                                     
  448.                                         }
  449.                                       }
  450.                                  }
  451.                                 if(s1num==2)
  452.                                 {
  453.                                 Write_Command_LCM(0x80+0x0a,1);                                  //月光标
  454.                                          if(Key2==0)
  455.                                         {
  456.                                                   delay_nms(20);
  457.                                                   if(Key2==0)
  458.                                                    {  
  459.                                                         while(!Key2);
  460.                                                         month++;
  461.                                                       month=turn_val(month,1,2);
  462.                                             }
  463.                                         }
  464.                                         if(Key3==0)
  465.                                         {
  466.                                                    delay_nms(20);
  467.                                                    if(Key3==0)
  468.                                                    {  
  469.                                                         while(!Key3);
  470.                                                         month--;
  471.                                                       month=turn_val(month,0,2);
  472.                                                    }
  473.                                         }
  474.                                 }
  475.                                 if(s1num==3)
  476.                                 {       
  477.                                         Write_Command_LCM(0x80+0x0d,1);                               //日光标
  478.                                         if(Key2==0)
  479.                                           {
  480.                                                   delay_nms(20);
  481.                                                   if(Key2==0)
  482.                                                    {
  483.                                                         while(!Key2);
  484.                                                         day++;
  485.                                                  day=turn_val(day,1,3);
  486.                                             }
  487.                                         }
  488.                                         if(Key3==0)
  489.                                         {
  490.                                                    delay_nms(20);
  491.                                                    if(Key3==0)
  492.                                                    {
  493.                                                         while(!Key3);
  494.                                                         day--;
  495.                                              day=turn_val(day,0,3);                //写入日寄存器
  496.                                                    }
  497.                                         }
  498.                                 }
  499.                                 if(s1num==4)
  500.                                 {  
  501.                                         Write_Command_LCM(0x80+0x10,1);                                   //星期光标
  502.                                           if(Key2==0)
  503.                                      {
  504.                                                   delay_nms(20);
  505.                                                   if(Key2==0)
  506.                                                    {
  507.                                                         while(!Key2);
  508.                                                         week++;
  509.                                                      week=turn_val(week,1,4);
  510.                                             }
  511.                                         }
  512.                                         if(Key3==0)
  513.                                         {
  514.                                                    delay_nms(20);
  515.                                                    if(Key3==0)
  516.                                                    {
  517.                                                         while(!Key3);
  518.                                                         week--;
  519.                                              week=turn_val(week,0,4);
  520.                                                    }
  521.                                         }
  522.                                 }
  523.                                 if(s1num==5)
  524.                                 {       
  525.                                 Write_Command_LCM(0x80+0x45,1);        //              //时光标
  526.                                          if(Key2==0)
  527.                                         {
  528.                                                   delay_nms(20);
  529.                                                   if(Key2==0)
  530.                                                    {        
  531.                                                         while(!Key2);
  532.                                                         hour++;
  533.                                          hour=turn_val(hour,1,5);
  534.                                             }
  535.                                         }
  536.                                         if(Key3==0)
  537.                                         {
  538.                                                    delay_nms(20);
  539.                                                    if(Key3==0)
  540.                                                    {
  541.                                                         while(!Key3);
  542.                                                         hour--;
  543.                                                  hour=turn_val(hour,0,5);
  544.                                                    }
  545.                                         }
  546.                                 }
  547.                                 if(s1num==6)                                      //调时间分
  548.                                 {  
  549.                                         Write_Command_LCM(0x80+0x48,1);        //定位秒
  550.                                         if(Key2==0)
  551.                                         {
  552.                                                   delay_nms(20);
  553.                                                   if(Key2==0)
  554.                                                    {        
  555.                                                         while(!Key2);
  556.                                                         minute++;
  557.                                                  minute=turn_val(minute,1,6);                                //写入分寄存器   
  558.                                             }
  559.                                         }
  560.                                         if(Key3==0)
  561.                                         {
  562.                                                    delay_nms(20);
  563.                                                    if(Key3==0)
  564.                                                    {        
  565.                                                         while(!Key3);
  566.                                                         minute--;
  567.                                                  minute=turn_val(minute,0,6);                                //写入分寄存器
  568.                                                    }
  569.                                         }
  570.                                 }
  571.                                 if(s1num==7)//调时间秒
  572.                                 {
  573.                                         Write_Command_LCM(0x80+0x4b,1);        //定位秒//秒光标
  574.                                         if(Key2==0)
  575.                                         {
  576.                                                   delay_nms(20);
  577.                                                   if(Key2==0)
  578.                                                    {
  579.                                                         while(!Key2);
  580.                                                         second++;
  581.                                          if(second==60)
  582.                                             second=0;
  583.                                                  second=turn_val(second,1,7);       
  584.                                             }
  585.                                         }
  586.                                         if(Key3==0)
  587.                                         {
  588.                                                    delay_nms(20);
  589.                                                    if(Key3==0)
  590.                                                    {
  591.                                                         while(!Key3);
  592.                                                         second--;
  593.                                                  second=turn_val(second,0,7);                               
  594.                                                    }
  595.                                         }
  596.                                 }
  597.             

  598.                                 if(s1num==8)                                        //按到最后一次,数据写入DS1307
  599.                                 {       
  600.                                         //miao=Read1307(0x81);
  601.                                         //second=miao;
  602.                                         //Write1307(0x80,second&0x7f);
  603.                                         s1num=0;                                          //s1num清零
  604.                                         Write_Command_LCM(0x0c,1);                                        //光标不闪烁
  605.                                     set_rtc_code[0]= second;                                 //重新构造set_rtc_code数组
  606.                                         set_rtc_code[1]= minute;
  607.                                         set_rtc_code[2]= hour;
  608.                                         set_rtc_code[3]= week;
  609.                                         set_rtc_code[4]= day;
  610.                                         set_rtc_code[5]= month;
  611.                                         set_rtc_code[6]= year;
  612.                                         Set_RTC();               //写入DS1307

  613.                                         break;
  614.                                 }
  615.                         }
  616.                 }
  617.         }
  618.         }
  619. char COM(void)
  620. {
  621.         unsigned char i;   
  622.         for(i=0;i<8;i++)          
  623.         {
  624.                 U8FLAG=2;       
  625.                 while((!DHT)&&U8FLAG++);
  626.                 Delay_10us();
  627.                 Delay_10us();
  628.                 Delay_10us();
  629.                 U8temp=0;
  630.                 if(DHT)
  631.                         U8temp=1;
  632.                         U8FLAG=2;
  633.                 while((DHT)&&U8FLAG++);                //超时则跳出for循环                  
  634.                    if(U8FLAG==1)break;                        //判断数据位是0还是1   
  635.                 U8comdata<<=1;
  636.                            U8comdata|=U8temp;        
  637.         }          
  638. }
  639. void  RH(void)                                                //读取温湿度
  640. {
  641.        DHT=0;
  642.            Delay(180);                                //主机拉低18ms
  643.            DHT=1;                                        //总线由上拉电阻拉高 主机延时20us
  644.            Delay_10us();
  645.            Delay_10us();
  646.            Delay_10us();
  647.            Delay_10us();                        //主机设为输入 判断从机响应信号
  648.            DHT=1;                                        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行          
  649.            if(!DHT)                           
  650.            {
  651.                 U8FLAG=2;                                //判断从机是否发出 80us 的低电平响应信号是否结束         
  652.                   while((!DHT)&&U8FLAG++);
  653.                    U8FLAG=2;                                 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
  654.                    while((DHT)&&U8FLAG++);        //数据接收状态,接收温度湿度数据                 
  655.                    COM();
  656.                    U8RH_data_H_temp=U8comdata;
  657.                    COM();
  658.                    U8RH_data_L_temp=U8comdata;
  659.                    COM();
  660.                    U8T_data_H_temp=U8comdata;
  661.                    COM();
  662.                    U8T_data_L_temp=U8comdata;
  663.                    COM();
  664.                    U8checkdata_temp=U8comdata;
  665.                    DHT=1;                                                 //数据校验
  666.                    U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  667.                    if(U8temp==U8checkdata_temp)//数据校验成功,则转换
  668.                    {
  669.                         U8RH_data_H=U8RH_data_H_temp;
  670.                              U8RH_data_L=U8RH_data_L_temp;
  671.                           U8T_data_H=U8T_data_H_temp;
  672.                              U8T_data_L=U8T_data_L_temp;
  673.                              U8checkdata=U8checkdata_temp;
  674.                         humi[0]=U8RH_data_H/10+'0';        //湿度转换成字符串数组,存放于humi[]       
  675.                            humi[1]=(U8RH_data_H)%10+'0';
  676.                         humi[2]=0x25;
  677.                         humi[3]='R';
  678.                         humi[4]='H';
  679.                         humi[5]='\0';
  680.                         temp[0]=U8T_data_H/10+'0';        //温度转换成字符串数组,存放于temp[]       
  681.                            temp[1]=(U8T_data_H)%10+'0';
  682.                         temp[2]=0xdf;
  683.                         temp[3]='C';
  684.                         temp[4]='\0';
  685.                    }
  686.            }

  687.         }

  688. void display(void)
  689. {
  690.            Read_RTC();           //读取时钟
  691.        
  692.         RH();
  693.                           //读取温湿度,
  694.        
  695.         chan();                        //转换函数
  696.         Display_List_Char(0,0,"Date:20");
  697.         Display_List_Char(0,7,date);
  698.         Display_List_Char(0,16,weekdata);
  699.         Display_List_Char(1,0,"Time:");
  700.         Display_List_Char(1,5,time);
  701.         Display_List_Char(2,0,"Temp:");                                   //        以下为屏幕显示格式
  702.         Display_List_Char(2,5,temp);                                   //  Date:2012-03-14 Wed
  703.            Display_List_Char(2,10,"Humi:");                           //  Time:19:16:46
  704.         Display_List_Char(2,15,humi);                                   //  Temp:21℃ Humi:28%RH
  705.         Display_List_Char(3,1,"Happy Every Day!!!");
  706.         //delay_nms(1000);
  707. }
  708. void main()
  709. {        //init();         //影响按键,接在P3口串口通讯调试用
  710.         LCM_Init();                   //液晶屏幕初始化
  711.         Write_Command_LCM(0x80+0x10);         //清屏
  712.                 //Set_RTC(); //ds1307重置,第一次使用时,
  713.         delay_nms(500);
  714.         while(1)
  715.         {               
  716.         key_scan();
  717.         display();
  718.         delay_nms(300);
  719.         }

  720. }
复制代码




本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-12-16 20:16:47 | 显示全部楼层
I2C的头文件没有加吧!
回复 支持 反对

使用道具 举报

发表于 2013-12-16 21:34:51 | 显示全部楼层
没行号?看错报在哪里啊
回复 支持 反对

使用道具 举报

发表于 2013-12-17 08:13:24 | 显示全部楼层
/主函数

//主函数
回复 支持 反对

使用道具 举报

发表于 2013-12-17 10:42:36 | 显示全部楼层
至少来点描述吧,干什么用的~~~
回复 支持 反对

使用道具 举报

发表于 2013-12-17 14:00:12 | 显示全部楼层
你找一下 bit 是在哪个头中定义的,然后在对应的文件中加入一些错误的代码

如果编译的时候没有报错,那就是你的头文件没有正确引用到。
回复 支持 反对

使用道具 举报

发表于 2013-12-17 17:39:49 | 显示全部楼层
是IIC通信协议的一个返回ACK出问题了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-17 20:09:48 | 显示全部楼层
AT89S52+DS1307+DHT11+LCD2004实现万年历和温湿度显示用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-17 20:12:31 | 显示全部楼层
shenhaiyu 发表于 2013-12-17 10:42
至少来点描述吧,干什么用的~~~

你好拜托帮帮忙给改改好吗?AT89S52+DS1307+DHT11+LCD2004实现万年历和温湿度显示
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-15 09:28 , Processed in 0.057128 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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