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