基于单片机的计算器-Protuse仿真及源代码.pdf
文本预览下载声明
刘言·1990liuyan@163.com ·2009.12
基于单片机的计算器
刘言
编程语言用的是C语言。要做好计算器,这里用的是AT89S52单片机,拥有8KB 程序
存储空间。
实现功能:
1、一定数值范围内的加减乘除、开方、倒数运算,能计算小数、负数,以及记忆功能。
2、时钟功能,能直接用键盘上的数字键设置时间,一定时间内无操作能自动显示时间。
3、闹铃功能及可控制的按键声音。
基本思路::::
每按一个按键,单片机做出一个反应。
计算的过程实际上就是对以下对象进行操作:
比如2+4=6。
写程序时脑中要时常想着这张图片,弄清除现在该对哪个对象进行操作。
比如:
用h1,h2,h3,h4分别存放 数1、符号、数2、结果,刚开始输入时是对h1进行操作,
将输入的数存入h1 内,当按下一个”+”,用h2 存放”+”代表的值,再次输入数字时就是对
h3进行操作,最后按下等号就是将h1+h3的值赋给h4,并清空h1、h2、h3。
但如果最后不是按下的等号,而是又按下了一个运算符号呢?这是就要想我们用计算器
时这样操作是希望干什么,我们是希望将上一个运算结果接着用在下一个运算中,这时就不
将h1+h2赋给h4了,而是赋给h1。假设又一次按下的是”-”,判断h2的值得知前一次按下
的是加号,于是执行h1=h1+h3;,并将这次按下的减号存入h2。于是就构成了“上次运算结
果(h1)”减(h2)“等着输入的数(h3)”,又处于上面第一次运算按下”+”时的状态了。
像这样就可以无限计算下去,直到按下等号,将最终结果存入h4,整个计算结束。
硬件电路:
-1-
大学生电子实验室 /bbs/
刘言·1990liuyan@163.com ·2009.12
数码管用的是两个共阳极的四连体。S8550为PNP 型三极管,发射极接VCC,集电极
接数码管公共端,基极通过电阻接单片机IO 口,这里是P2 口。低电平时导通。
P2口与三极管基极之间的电阻这里用的是10K的,估计600~60K都行,用的越大越省
电,对亮度几乎没有影响。对亮度影响大的是P0口与数码管之间的电阻,这里用的510K。
-2-
大学生电子实验室 /bbs/
刘言·1990liuyan@163.com ·2009.12
键盘是普通的矩阵按键。(4*7)
程序设计:
1、计算部分:
计算流程如下:
这里输入一个符号指的是“加减乘除”任意一个。
前面说过,用分别用两个变量存输入的数,一个变量符号,一个变量结果。比如 h1、
-3-
大学生电子实验室 /bbs/
刘言·1990liuyan@163.com ·2009.12
h2、h3、h4。
输入的数是存到h1还是h3中,就要判断h2的值,若h2=0,存入h1中,反之存入h3
中,h2=0表示没有输入符号。
最后一个运算结果很特殊,与之前的运算结果是用不同的变量来存放的,基本思路中提
到过,之前的是存在h1 中用来参与紧接着的运算。按了等号之后是存在h4 中,清空h1,
h2,h3等待再一次全新的运算。
输入一个数时显示输入的那个数,数入一个符号时是显示h1中的数,即参与运算在这
个符号之前的数。按了等号后显示h4中的数。
在这里说一下数码管显示,定义一个有8个值的数组,如x[8],这八个数分别对应每个
数码管,扫描中就是让P0口分别等于这8个数,这样改变x[8]中的值就能改变数码
显示全部