admin管理员组文章数量:1794759
基于单片机(AT89C51)的进制转换及进制计算器
基于单片机(AT89C51)的进制转换及进制计算器
闲来无事,用手头51单片机做个进制计算器
成品功能:能实现十进制带负数、带小数点的加减乘除,不同进制之间的转换,同一进制之间的加减乘。
材料
- AT89C51开发板要带4x4矩阵按键,再带8个独立按键才够用
- 用LCD18650显示
- 杜邦线
- 用keil4进行开发
开始制作。
制作过程思考过程
首先要考虑的就是按键数量了:
我就得出来如下方案:
硬件部分
直接放图 如图所示连接P1接矩阵按键,P3接独立按键。
十进制的加减乘除带符号和小数这里矩阵按键和独立按键怎么测值就不说了。
整数部分的加减乘除
代码如下:
if(fuhao==1)//加 { sprintf(Disp,"%-6.3f",a_l+b_l); //将结果存在数组中方便显示 //spintf将右边的字符串到左边数组中 //%-6.3f为占位符既(1)表示靠左6位保留三位小数的浮点数 lcdwrd_string(Disp,6); //显示 } if(fuhao==2)//减 { sprintf(Disp,"%-6.3f",a_l-b_l); lcdwrd_string(Disp,6); } if(fuhao==3)//乘 { sprintf(Disp,"%-9.4f",a_l*b_l); lcdwrd_string(Disp,9); } if(fuhao==4)//除 { sprintf(Disp,"%-9.4f",a_l/b_l); lcdwrd_string(Disp,9); }这里直接显示运算结果,就避免了运算过程中产生的小数(两数相除)等数据类型问题。
负数问题
小数问题
有小数点的话,我解决的方法是按完小数点之后记录小数点之后有几位,计算结果之前,让存起来的数乘0.1的多少次方。比如输入的3.1415,小数点之后有四位,存起来的数就是31415再四个0.1。
代码如下:
if(fhao_a==1){a_l = a*pow(0.1,a_wei)*(-1);} //将结果保存到double精度的数中 //有几位小数的话要乘0.1的几次方 //负数的话要成-1 else {a_l = a*pow(0.1,a_wei);} if(fhao_b==1){b_l = b*pow(0.1,b_wei)*(-1);} else {b_l = b*pow(0.1,b_wei);}部分效果如图。 这样十进制的加减乘除带符号和小数的问题就基本解决完了。
进制转换思想
为啥不做除呐,因为按键不够。一除就会出现小数,没想明白怎么表示。
思想还是以十进制保存,然后再做运算,再转化为相应进制的数输出。按键不够用所以没法做不同进制之间的运算。
效果如图所示: 十六进制减 二进制加
最后附上完整的项目文件。自行下载。 download.csdn/download/weixin_42320020/16593760
这个项目到这里就算完了。 还有很多不足的地方,希望大佬可以指正。也希望和爱好者交流学习。
大家有想法可以私信或者留言,博主有时间会帮大家做一些项目。
禁止转载!!! QQ:2039723308 VX:Shiboven
版权声明:本文标题:基于单片机(AT89C51)的进制转换及进制计算器 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686581855a84246.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论