初级会员 
  
	- 积分
 - 143
 
        - 金钱
 - 143 
 
       - 注册时间
 - 2016-3-11
 
      - 在线时间
 - 54 小时
 
 
 
 | 
 
20金钱 
 本帖最后由 xuande 于 2016-6-15 11:31 编辑  
 
本模块实现的功能是检测光强强度,根据光强大小来判断开关窗帘(即电机正反转),利用数字光强传感模块检测光强强度并将数据显示在1602液晶屏上,显示的数据是五位数,同时利用矩阵键盘液晶屏上设置光强范围。现在存在的问题是光强强度五位数不能用来做比较,而矩阵键盘设置的数字是可以调用的,请大侠帮忙解答。 
部分程序如下: 
uint   ge,shi,bai,qian,wan,key;           //这是检测的光强强度的变量 
uint w1=0,q1=1,b1=3,s1=4,g1=5; 
uint w2=0,q2=0,b2=1,s2=0,g2=0;    //这两行是矩阵键盘设置的范围的每一位。(如w1、q1、b1、s1、g1分别是最大值的万位千位百位十位个位) 
 
//下面程序是转换出个十百千万 
 
void conversion(uint temp_data)  //  数据转换出 个,十,百,千,万 
{   
    wan=temp_data/10000+0x30 ; 
    temp_data=temp_data%10000;   //取余运算 
   qian=temp_data/1000+0x30 ; 
    temp_data=temp_data%1000;    //取余运算 
    bai=temp_data/100+0x30   ; 
    temp_data=temp_data%100;     //取余运算 
    shi=temp_data/10+0x30    ; 
    temp_data=temp_data%10;      //取余运算 
    ge=temp_data+0x30; 
} 
 
//display函数是在液晶上显示光强强度的函数 
 
void display(void) 
{ 
    float temp; 
    Single_Write_BH1750(0x01);   // power on 
    Single_Write_BH1750(0x10);   // H- resolution mode 
 
    delay_nms(180);              //延时180ms 
 
    Multiple_Read_BH1750();       //连续读出数据,存储在BUF中 
 
    dis_data=BUF[0]; 
    dis_data=(dis_data<<8)+BUF[1];//合成数据,即光照数据 
 
    temp=(float)dis_data/1.2; 
 
    conversion(temp);         //计算数据和显示 
        DisplayOneChar(0,0,'L');  
        DisplayOneChar(1,0,'i');  
        DisplayOneChar(2,0,'g');  
        DisplayOneChar(3,0,'h');  
        DisplayOneChar(4,0,'t');  
    DisplayOneChar(5,0,':');  
 
    DisplayOneChar(7,0,wan); //显示数据 
    DisplayOneChar(8,0,qian);   
    DisplayOneChar(9,0,bai);  
    DisplayOneChar(10,0,shi);  
        DisplayOneChar(11,0,ge);  
 
        DisplayOneChar(13,0,'l'); ////显示数单位 
        DisplayOneChar(14,0,'x'); 
} 
 
//JudgeMin()函数是将光强强度与设置的最小值进行比较 
 
void JudgeMin(void) 
{ 
    if(wan<w2) 
        {   k=0;}//k=0 正转,打开窗帘 
        else if(wan==w2) 
        { 
          if(qian<q2) 
          {k=0;} 
          else if(qian==q2) 
          { 
             if(bai<b2) 
                 {k=0;} 
                 else if(bai==b2) 
                 { 
                    if(shi<s2) 
                        {k=0;} 
                        else if(shi==s2) 
                        { 
                           if(ge<g2) 
                           {k=0;} 
                           else k=2; 
                        }else k=2; 
                 }else k=2; 
          }else k=2; 
        } 
     else k=2;  
} 
经验证,wan,qian,bai,shi,ge是进行不了比较的,w1,q1,等变量是可以比较的,不知道这是什么原因,请各位路过的大侠帮忙解答一下,感激不尽。 
 
 |   
 
 
最佳答案
查看完整内容[请看2#楼] 
((wan-0x30)*10000+(qian-0x30)*1000+(bai-0x30)*100+(shi-0x30)*10+(ge-0x30))
<
(w2*10000+q2*1000+b2*100+s2*10+g2) 
 
 
 
 
 
 
 |