现代的电子计算器能进行数学运算的手持电子机器,拥有集成电路芯片,但结构比电脑简单的多,可以说是第一代的电子计算机(电脑),且功能也较弱,但较为方便与廉价,可广泛运用于商业交易中,是必备的办公用品。
单片机控制的数字计算器以STC89C52单片机为核心,采用4×4的矩阵键盘输入数字,可以实现加、减、乘、除的运算,然后在LCD12864上显示输入的过程和计算结果,同时蜂鸣器报警。该系统有电路结构简单,开发成本低、操作方便等优点。1
系统工作原理该系统的数字和运算的输入按键以4×4的矩阵键盘为基础,单片机采用线反转法对矩阵键盘进行驱动,并用LCD12864对输入内容进行显示,在每一次按键按下的时候,通过系统预先设计好的程序对输入的信息进行处理和计算,在所有数字和运算法则输入完之后,以“=”为输出结果的标志,在按下之后将运算的结果显示到LCD12864的液晶屏幕上。整个系统的工作过程为:首先进行初始化和按键扫描,然后判断按键位置,读出按键值,进行键值的存储和计算并实时的显示到液晶屏幕上。1
硬件系统设计1、系统硬件设计
整个系统由单片机、液晶屏、矩阵按键、蜂鸣器等构成。选用STC89C52与MCS-51系列的单片机在指令系统和引脚上完全兼容;全静态工作;片内有4k字节在线可以重复编程快擦写程序存储器;三级程序存储器加密;128×8位内部RAM;32位双向输入输出线;五个中断源,两级中断优先级;一个全双工的异步串行口;间歇和掉电两种工作方式。
2 液晶显示电路设计
LCD12864是本系统的重要组成部分之一,主要用于显示数字和功能按键的输入和运算结果的输出,单片机的P0口和其输入数据相连,单片机P2.5~P2.7和其控制端相连,其中的10k的电位器是对液晶的极化电压进行调节进而调节对比度。因为52单片机的P0口内部不带上拉电阻,因此不能有效的输出高低电平,所以在外部要接上拉电阻。
3、按键电路设计
该系统使用的是有16个按键的4×4的矩阵键盘,用来作为数字和功能按键的输入,是系统的重要组成部分之一。该矩阵键盘的第1行到第4行分别接在单片机的P3.0~P3.3口,该矩阵键盘的的第1列到第4列分别接在单片机P3.4~P3.7口,这样仅通过单片的P3口就成功驱动了4×4的矩阵键盘,而且驱动此矩阵键盘只使用了8个I/O口,与独立按键相比矩阵按键更加节省I/O口。
4、声响电路设计
声响电路主要由蜂鸣器组成,由于人耳只能听到一定范围的音频的声音,所以可以通过程序对单片机的 P2.3口的高低电平进行控制,因此单片机的P2.3口能产生固定频率的矩形波,将此I/O口通过电阻及三极管接蜂鸣器后,蜂鸣器就能发出声音。三极管是功率驱动电路,为了避免单片机I/O的输出电流不足而无法驱动蜂鸣器发声的弊端。1
系统软件设计数字计算器的功能是把矩阵按键所对应的内容在液晶上显示,在有功能按键按下时能存储数据并计算,然后显示出输入的表达式和结果,并且在每个按键按下后,会发出“滴”的一声。因此,计算器处理程序由按键扫描程序、液晶动态显示程序、蜂鸣器发声程序以及算术运算程序四个部分组成。
按键扫描程序的设计。采用线反转法判断按键。P3高4位为列、低4位为行,将行线作为输出线,列线作为输入线。置输出线全部为0,此时列线中呈低电平0的为按键所在的列,如果全部都不是0,则没有键按下。若有键按下则延时15s,在判断是否有键按下。在将第一步反过来,将列线作为输出线,行线作为输入线,此时行线中呈低电平0的为按键所在的列。至此,便确定了按键的位置。
液晶动态显示的程序设计。12864点阵液晶显示模块是由128×64个液晶显示点组成的一个128列×64行的阵列。每一个显示点对应一个一位二进制数,1表示亮,0表示灭。要想显示某个图形或数字,其方法就是将相应的点阵信息与其存储单元一一对应。即设计竖中指和符号就是把其显示点在液晶屏幕上的位置与其存储器的地址一一对应。
蜂鸣器发声程序的设计。利用I/O定时翻转电平产生驱动波形进而对蜂鸣器进行驱动。此方法利用通过翻转电平产生特定的频率的矩形波来驱动蜂鸣器。在程序上,将TIMERO设置成定时端口,把其预分频(在需要分频的时候,例如二级分频时前面一级就称为预分频)设置为1,将TIMERO始终为系统时钟,在地址分别写入载入 / 计数寄存器的高4位和低4位来设计其中断时间,当需要蜂鸣器鸣叫时,只需要在进入TIMERO中断的时候对该I/O口的电平进行一次翻转,当蜂鸣器不用鸣叫的时候,把其电平设置为低电平即可。将I/O口的输出电平设置成低电平是为了在不鸣叫时防止漏电。
算术运算程序的设计。从矩阵按键接收运算式,编程实现两个数的算术运算(+、-、*、\),若输入的不是数字或运算符,进行错误处理,按任意键退出。1
有效数字和计算器介绍了有效数字的概念及其计算规则,介绍了计算器的一般特性及使用技巧,并给出计算实例。2
计算器计算器是被广泛使用的电子设备,多数是8位和10位两种(例如,CA SIO的fx - 80,fx-82和fx-100D等,前两种是8位、后一种是10位显示的)。 这种计算器可以对8位或10位有效数字的多个数值进行乘除法和加减法运算,得出8位或10位有效数字的答案。
那么,用计算器运算,特别是大量数据的连续运算,会不会也产生所说的,答案最末一位甚至前两位的误差呢? 其实,计算器厂商已经注意到这一点,那时的10位计算器是‘’10位输入,机内12位运算,10位显示‘’的。8位计算器也是一样,是机内10位运算的。当12位或10位的运算完成时,切掉最末两位(四舍五入),只显示前10位或前8位,以避免这一缺点。当然,如果这种计算器能够12位输入,那就更好了。
由于芯片工艺的进步,市面上的计算器都是‘’10位输入,机内15位运算,10位显示‘’的(例如CASIO的fx-500ES,甚至学生型的fx-82ES)。不少机型还可以允许15位输入,这就可使计算精度更为提高。2
熟悉计算器假如拥有的计算器是10位显示的。怎样知道它机内是几位运算呢? 例如,可以先计算2的开方,按2键和开方键,显示的一定是1.414 213 562。从这里减去一个准确数1.414 213 562 000,后者必须手动键入。如果你的机内是12位运算的,前者键入的2在机内的运算结果是1.414 213 562 37,二者相减,得3.7×10-10,如果机内是15位运算的,2在机内的运算结果是1.414 213 562 373 09,与手动输入的准确值相减,应得3.7309×10-10。这样,就可以知道你的计算器机内运算的位数了。
用这一方法,任何计算结果的机内15位数据都可以调出来. 例如计算1.234 567 891的平方,显示为1.524 157 877,从这里减去前5位数1.524 1,得5.787 748 818×10- 5。于是,得到这个平方的15位答案是1.524 157 877 488 18。在一般情况下,机内的15位数据只有最后一位是靠不住的。前面算的根号2机内15位的结果是1.414 213 562 373 09只有最后一位9与精确值相差1,因为根号2=1.414 213 562 373 095 048 8…。切掉的第16位数是5,应该‘’五入‘’ 才对。再看圆周率,机内的15位显示是3.141 592 653 589 80,最后一位也相差1,因为π=3.141 592 653 589 793 238…,第16位应当舍掉的。
由此可知,如果这台计算器可以15位输入,就完全可以当一台15位的计算器使用.其实,无论科研还是教学,通常的物理计算用不到这样高的精度。就算在金融界,以‘’元‘’为单位的金额已经精确到小数点后第六位。除了你手中的计算器之外,还拥有一 台超高精度的计算器!名符其实的超高精度,机内64位运算,32位显示的! 这台计算器藏在电脑中。
打开电脑,通过[开始→所有程序→附件→计算器]即可找到电脑中的计算器。共有两台,一台是四则计算器,一台是函数计算器。机内的圆周率的数值。点击圆周率π,显示出32位数值,然后再把机内的后32位调出,可得圆周率的机内计算结果为:
π=3.141 592 653 589 793 238 462 643 383 279 5 |02884 197 169 399 3 |11 481 966 593 000 570
在等号右边的数值中有两条竖线,第一条竖线在第32位后面,表示正常显示的前 32位;第二条竖线在第47位后面,说明机内给出的圆周率数值47位之前是正确的,竖线以后就不对了。就是说,机内运算所得出的64位数值,后面有17位是靠不住的。
第一,显然,圆周率的数值是机内预存公式程序临时现算出来的。机器需要一项一项地算,每项都要算到64位,再一项一项加起来,而且需要加很多很多项才能得出精确结果. 即使这样,结果中还有最末17位是靠不住的。可见设计选‘’机内64位运算‘’,选那么多位是有道理的。这样才能充分保证显示数值的正确性。2
本词条内容贡献者为:
吴晨涛 - 副研究员 - 上海交通大学