| 
 
初级会员 
 
	积分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) |