OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3862|回复: 7

程序里数据比较出问题了

[复制链接]

7

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-3-11
在线时间
54 小时
发表于 2016-6-15 11:06:55 | 显示全部楼层 |阅读模式
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)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-6-15 11:06:56 | 显示全部楼层
忆初仁 发表于 2016-6-15 13:56
对我注意到了,忘记加了0x30,谢谢你哈
相比较的两个数都是五位数,而且每一位都是分别定义的,那不应该 ...

((wan-0x30)*10000+(qian-0x30)*1000+(bai-0x30)*100+(shi-0x30)*10+(ge-0x30))
<
(w2*10000+q2*1000+b2*100+s2*10+g2)


回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-6-15 11:27:00 | 显示全部楼层

进行不了比较?

听不懂。


回复

使用道具 举报

7

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-3-11
在线时间
54 小时
 楼主| 发表于 2016-6-15 13:27:28 | 显示全部楼层
xuande 发表于 2016-6-15 11:27
进行不了比较?

听不懂。

就是wan,qian,bai,shi,ge这光强的五位数不能分别和w1,q1,b1,s1,g1做比较,光强显示是正确地,但是万位千位百位等(就是变量wan,qian,bai,shi,ge)在程序中不能作为数字来用的,我不知道是为什么。
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-6-15 13:43:51 | 显示全部楼层
不能比较是不可能的,肯定有别的原因。   应该是你加了 0x30的原因

不过你为什么不计算成原来的数在比较呢,或者保留一个全局变量,整一堆 if 干嘛
回复

使用道具 举报

7

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-3-11
在线时间
54 小时
 楼主| 发表于 2016-6-15 13:56:50 | 显示全部楼层
止天 发表于 2016-6-15 13:43
不能比较是不可能的,肯定有别的原因。   应该是你加了 0x30的原因

不过你为什么不计算成原来的数在比较 ...

对我注意到了,忘记加了0x30,谢谢你哈
相比较的两个数都是五位数,而且每一位都是分别定义的,那不应该是从高位到低位每一位都做比较吗?我除了这个方式不知道有什么简便的方法了
回复

使用道具 举报

7

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-3-11
在线时间
54 小时
 楼主| 发表于 2016-6-15 14:07:14 | 显示全部楼层
止天 发表于 2016-6-15 14:03
((wan-0x30)*10000+(qian-0x30)*1000+(bai-0x30)*100+(shi-0x30)*10+(ge-0x30))
<
(w2*10000+q2*1000+b ...

太感谢你了,感觉自己好笨
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2016-5-27
在线时间
91 小时
发表于 2016-6-19 19:11:56 | 显示全部楼层
不知道你用的是什么MPU,不过建议你先测下你的conversion函数的用时。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 15:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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