完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 sin88 于 2013-7-4 23:49 编辑
/* 函数名称: 功能: 简易计算器主要程序 放在主函数中 说明: 依据键盘工作函数得出的数据量cc进行数据、状态量输入记录及相应计算 备注: 本函数在计算结果在70 000 到99 999之间时 结果错误(一定),结果为其他时正确(仅几个关键点测试过) */ bit key_work_loak; unsigned char cc,in_sec,key_in_shu[6],zt_sec; long int in_a,in_b; void calc_work(void){ if(key_work_loak==1){ key_work_loak=0; if(cc<11&& in_sec<6&& display_loak==0){ key_in_shu[0]=key_in_shu[1]; key_in_shu[1]=key_in_shu[2]; key_in_shu[2]=key_in_shu[3]; key_in_shu[3]=key_in_shu[4]; key_in_shu[4]=key_in_shu[5]; key_in_shu[5]=cc; in_sec++; //记录输入次数 //if(in_sec>5)in_sec=0; } else if(cc==111&&display_loak==0){ zt_sec=1; //除法状态记忆 in_a=(long int)(key_in_shu[0]*100000) +(long int)(key_in_shu[1]*10000) +(long int)(key_in_shu[2]*1000) +(long int)(key_in_shu[3]*100) +(key_in_shu[4]*10) +key_in_shu[5]; key_in_shu[0]=0; key_in_shu[1]=0; key_in_shu[2]=0; key_in_shu[3]=0; key_in_shu[4]=0; key_in_shu[5]=0; //in_a=0; in_sec=0; } else if(cc==112&&display_loak==0){ zt_sec=2; //乘法状态记忆 in_a=(long int)(key_in_shu[0]*100000) +(long int)(key_in_shu[1]*10000) +(long int)(key_in_shu[2]*1000) +(long int)(key_in_shu[3]*100) +(key_in_shu[4]*10) +key_in_shu[5]; key_in_shu[0]=0; key_in_shu[1]=0; key_in_shu[2]=0; key_in_shu[3]=0; key_in_shu[4]=0; key_in_shu[5]=0; in_sec=0; } else if(cc==113&&display_loak==0){ zt_sec=3; //减法状态记忆 in_a=(long int)(key_in_shu[0]*100000) +(long int)(key_in_shu[1]*10000) +(long int)(key_in_shu[2]*1000) +(long int)(key_in_shu[3]*100) +(key_in_shu[4]*10) +key_in_shu[5]; key_in_shu[0]=0; key_in_shu[1]=0; key_in_shu[2]=0; key_in_shu[3]=0; key_in_shu[4]=0; key_in_shu[5]=0; in_sec=0; } else if(cc==114&&display_loak==0){ zt_sec=4; //加法状态记忆 in_a=(long int)(key_in_shu[0]*100000) +(long int)(key_in_shu[1]*10000) +(long int)(key_in_shu[2]*1000) +(long int)(key_in_shu[3]*100) +(key_in_shu[4]*10) +key_in_shu[5]; key_in_shu[0]=0; key_in_shu[1]=0; key_in_shu[2]=0; key_in_shu[3]=0; key_in_shu[4]=0; key_in_shu[5]=0; in_sec=0; } else if(cc==110&&display_loak==0){ //等于计算 in_b=(long int)(key_in_shu[0]*100000) +(long int)(key_in_shu[1]*10000) +(long int)(key_in_shu[2]*1000) +(long int)(key_in_shu[3]*100) +(key_in_shu[4]*10) +key_in_shu[5]; switch (zt_sec){ case 1: zt_sec=0; in_a=in_a/in_b; break; case 2: zt_sec=0; in_a=in_a*in_b; break; case 3: zt_sec=0; in_a=in_a-in_b; break; case 4: zt_sec=0; in_a=in_a+in_b; break; } key_in_shu[0]=in_a%1000000/100000; key_in_shu[1]=in_a%100000/10000; key_in_shu[2]=in_a%10000/1000; key_in_shu[3]=in_a%1000/100; key_in_shu[4]=in_a%100/10; key_in_shu[5]=in_a%10; display_loak=1; //inok_loak=1 } else if(cc==0xff){ //清零 in_a=0; in_b=0; in_sec=0; key_in_shu[0]=0; key_in_shu[1]=0; key_in_shu[2]=0; key_in_shu[3]=0; key_in_shu[4]=0; key_in_shu[5]=0; display_loak=0; //cc=0; } } } 请教各位大侠,问题在哪里? 谢谢 |
|
相关推荐
5个回答
|
|
如果没错的话65536--99999之间应该都是错的,因为long int在这里是有符号32位,有效数据范围-65536--65535超出范围后这个数后就溢出了!
|
|
|
|
本帖最后由 sin88 于 2013-7-5 18:56 编辑
不对啊,100000~700000间是对的,出错的只有70000~99999和700000~999 999这个范围 long int 是32位的吧 数据范围是-2^31 ~2^31-1 比如 555 555+1 结果是555 556 对的 888 888+1 结果是823 353 错的 88 888+1结果是23 353 错的 69 999+1结果是70 000 对的 70 000+1结果是4465 错的 65 535+1结果是65 536对的 |
|
|
|
本帖最后由 sin88 于 2013-7-6 11:03 编辑
补充 乘法运算结果在这个范围时是正确的,出错的只是加法和减法运算,怎么回事?难道是mcu的问题? 另外单独写 long int a,b; a=70000; b=1; a+=b; 结果a是70 001 对的 擦 为什么 |
|
|
|
难道太简单了没人回复?
|
|
|
|
这个实在找不到问题所在了 跪求高手指点
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
551 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡 - 如何在Ubuntu中编译OpenCV库(X86架构)
1404 浏览 0 评论
1207 浏览 1 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-VMware设置成桥接模式后没有VMnet0
1354 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?
772 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
9020 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-23 11:34 , Processed in 0.603238 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191