51单片机应用数据类型的注意

因为工作需求,写了一个关于生产率看板的程序,MCU用的是51单片机,因为只涉及到一些简单的计算,所以用51就足够了。(下图就是做的生产管理看板)生产进度管理看板

其中实际数和不良数是由光电开关提供脉冲进行加数的,这个只是做一个类似于按键消抖的功能便可以了,不良率是由不良数/实际数得来的,一开始我把三个变量设置的数据类型均为无符号int型的,大小在0~65535之间,感觉没啥毛病,整体功能完成后便给客户发过去使用了。

计算公式:

        Defective_Rate = Number_Bad*1000/Actual_Production;
        if(Number_Bad>=Actual_Production)   Defective_Rate=999;
        if(Defective_Rate<=0)  Defective_Rate=0;

        if(Defective_Rate>99)   Defective_Rate_Code[0]=Defective_Rate%1000/100;           else  Defective_Rate_Code[0]=11;
                                Defective_Rate_Code[1]=Defective_Rate%100/10;           
                                Defective_Rate_Code[2]=Defective_Rate%10;

后来客户反应不良率计算不准确,我的内心是比较尴尬的,在老板的追问下只好要求客户拍个视频过来看一下怎么个出错法。

看了客户发过来的视频,发现不良数加到65以内的时候都是没毛病的,但是超过65就变成0了,脑袋一闪,65、65、65535,好吧,知道问题在哪了,不良数*1000/实际数,这是我的计算公式,65*1000=65000,再加1的话,不良数便溢出了,所以导致不良率显示又为零了。

最后把不良数的数据类型换成了long int,然后就没有再出错了,这是一个很小的问题,但是我觉得这也是一个容易犯错的地方,还是得细心一点啊。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值