完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本模块实现的功能是检测光强强度,根据光强大小来判断开关窗帘(即电机正反转),利用数字光强传感模块检测光强强度并将数据显示在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 else if(wan==w2) { if(qian else if(qian==q2) { if(bai else if(bai==b2) { if(shi else if(shi==s2) { if(ge else k=2; }else k=2; }else k=2; }else k=2; } else k=2; } 经验证,wan,qian,bai,shi,ge是进行不了比较的,w1,q1,等变量是可以比较的,不知道这是什么原因,请各位路过的大侠帮忙解答一下,感激不尽。 |
|
相关推荐
8个回答
|
|
((wan-0x30)*10000+(qian-0x30)*1000+(bai-0x30)*100+(shi-0x30)*10+(ge-0x30))
< (w2*10000+q2*1000+b2*100+s2*10+g2) |
|
|
|
|
|
|
|
就是wan,qian,bai,shi,ge这光强的五位数不能分别和w1,q1,b1,s1,g1做比较,光强显示是正确地,但是万位千位百位等(就是变量wan,qian,bai,shi,ge)在程序中不能作为数字来用的,我不知道是为什么。
|
|
|
|
|
|
|
|
对我注意到了,忘记加了0x30,谢谢你哈
相比较的两个数都是五位数,而且每一位都是分别定义的,那不应该是从高位到低位每一位都做比较吗?我除了这个方式不知道有什么简便的方法了 |
|
|
|
太感谢你了,感觉自己好笨
|
|
|
|
不知道你用的是什么MPU,不过建议你先测下你的conversion函数的用时。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1193浏览 3评论
613浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 17:03 , Processed in 1.436027 second(s), Total 95, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号