基于单片机的整数的加减乘除运算计算器设计毕业论文

  • 格式:doc
  • 大小:125.50 KB
  • 文档页数:19

基于单片机的整数的加减乘除运算计算器设计毕业论文课题基于单片机的整数的加减乘除运算计算器设计学生姓名学号专业机电一体化班级院,系, 机械与电子信息工程学院指导教师职称2014年12月12日目录摘要 (1)Abstract..................................................1 设计要求..................................................2 1方案.....................................................2 2系统和主要功能...........................................2 第一章计算器的硬件设计.................................3 1.1位数码管动态显电路........................................3 1.2 LED数码显示器...........................................4 1.3 8255接口芯片..........................................4 1.4 数码管显示模块........................................5 1.5 按键模块..............................................6 1.6 4×4矩阵键盘识别处理电路.................................7 第二章计算器的软件设计................................7 2.1 主程序流程及模块设计.....................................8 2.2 总程序模块............................................9 第三章调试结果及分析.................................10 参考文献.................................................11 附录一:总体原理图.......................................12 附录二:总程序...........................................13 致谢.. (14)摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

因此,单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。

计算器在人们的日常中是比较的常见的电子产品之一。

可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的计算器。

该设计系统是以 AT89C51 为单片机, P0 口作为输入端,外接 4X4 的键盘。

通过键盘扫描来对输入数的控制,在P1 口、P2 口接了驱动电路,用来保证 LED 的工作正常。

计算器将完成的功能有加,减,乘,除等功能。

关键词:计算器,单片机,LCD,矩阵键盘AbstractWith the rapid development of science and technology in recent years, the application of SCM is the deepening and promote the traditional controlling detection technologies that are increasingly updated. Inreal-time detectionand automatic control of microcomputer application system, themicrocontroller is often used as a core component to use, but onlythe knowledge of the microcontroller is not enough, and should be based on the specific hardware architecture, hardware and software combinationto make it The design system is based on AT89C51 microcontroller, P0 port as input, external 4X4 keyboard. In P1, P2mouth is connected with the drive circuit to ensure the normal work of LED. The calculator will complete add, subtract,multiply, divide and other function.KEYWORDS: calculator, MCU, LCD, Matrix keyboard设计要求该计算器4*4矩阵键盘的16个按键分别代表不同的功能,包括0到9这10个数字和加,减,乘,除,等于,复位这6个功能键。

开机启动,第四位数码管小数点亮,8位数码管的前四位显示前面输入的加数,被减数,被除数,乘数,后四位用于显示后输入的加数,减数,乘数,除数,复位键用于计算器恢复初始化,当输入加数和被加数时,显示器上显示的数字像平时用的计算器输入一样,即:每输入一个数字,原来显示的数字要往左移,当输入出错时(例如除数为零),调用报错子程序,数码管显示“ERROR”。

方案(1) 操作显示设备显示设备采用八片七段共阴极LED显示器,共设臵16个键,其中数字键0,9共十个,接下来依次是加号键、减号键、乘号、除号、等于号、复位键。

“清除键”表示程序初始化,为下次输入准备。

(2) 程序实现功能a.十进制加减乘除计算:输入范围为(1~999),结果可以显示7位,计算结果可以精确到小数点后4位; b.计算机复位功能:复位均为清零重启,任何时候按下复位将重新开c.报错子程序是当系统计算出错时候,控制数码管自动显示“ERROR”,然后系统自动复位。

系统的主要功能该系统使用了1块STC89C52RC单片机,主要性能有: ,.,, ,,,,程序存储器,存储量更大 ,.工作频率从静态到,,,,,,更加灵活 ,.,,根,,端口,方便使用 ,.内臵两个,,位定时计数器,利用单片机周期工作,方便控制且可靠性高 ,.包含了全双工串行接口,方便与电脑或其它终端通信 ,.内臵看门狗,防止程序跑丢,在外界环境突变时可自行复位继续工作第一章计算器的硬件设计1.1位数码管动态显示电路硬件电路如下图所示:1.2 LED数码显示器LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压如上图,a,b,c,d,e,f,g,h控制数码管的段,1,2,3,4,5,6,7,而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字行码,字行码见下表:动态扫描方法动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。

(1) 在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。

(2)对于显示的字形码数据我们采用查表方法来完成。

系统板上硬件连线(1) 把“单片机系统”区域中的P2.0,P2.7用8芯排线连接到“动态数码显示”区域中的a,h端口上;(2)把“单片机系统”区域中的P1.7,P1.0用8芯排线连接到“动态数码显示”区域中的1,8端口上;1.3 4×4矩阵键盘识别处理电路每个按键有它的行值和列值,行值和列值的组合就是这个按键的码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

键盘功能表如图键盘硬件电路如下:如图所示键盘硬件电路,用排线将行的1~4和单片的P0.0~P0.3连起来,列的5~8和单片机的P0.4~P0.7连接。

:第二章抢答器的软件设计2.1总体系统流程图如下:2.2模块介绍该计程计价系统的软件设计分为以下几个模块:(1)主程序模块主程序主要完成初始化、检查有无按键按下、计算求答、以及调用显示等等。

(主程序如电子版文档所示)(2)键盘扫描及识别子程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。

(3)显示子程序采用动态显示,一位一位的轮流显示各显示管。

,所以只须用P2口控制段,P1口的低位控制其位。

(4)计算程序根据输入的符号采取不同的算法,当然也是本程序的关键所在。

对应输入数值,计算出输入量,供显示子程序使用,而对符号量则根据前次和后次的数值计算其结果。

(5)报错子程序当系统计算出错时候,控制数码管自动显示“ERROR”,然后系统自动复位。

2(2 总程序模块#include<reg52.h>#include<intrins.h>#define Lint long int#define uint unsigned int#define uchar unsigned charsbit led=P2^3;sbit SCK_595=P2^0;sbit DS_595=P2^1; sbit RCK_595=P2^2;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管段码表 /****************定义全局变量*******************/ Lint store[2]={0}; //存取按键值和结果的数组uchar flag_op=0; //+,-,*,/操作符标志符uchar flag_order=0; //输入数的顺序标志符uchar flag_equal=0; //等于号标志符uchar key=16; //按键值/*****************延时函数*********************/ void delay(uint x) { uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);/*****************595写函数********************/ void write_595(uchar wrdat)uchar i;SCK_595=0;RCK_595=0;for(i = 0; i < 8; i++){DS_595=wrdat&0x80; wrdat<<=1;SCK_595=0;_nop_();_nop_();SCK_595=1;_nop_();_nop_();SCK_595=0; }RCK_595=0;_nop_(); _nop_();RCK_595=1; _nop_();_nop_();RCK_595=0;}/****************显示函数*********************/void display(Lint temp){uint buf1,buf2,i=0; buf1=temp/10000000;if(buf1>=10||temp<-9999999) //数据溢出,显示错误00000000 { led=0; P2=(P2&0x0f)|0x80;for(i=0;i<8;i++) {write_595(table[14]); P2=P2+0x10;}} else if(temp<0&&temp>=-99999999) //显示负数 { led=1; P2=0x70; do{buf2=temp%10;P2=P2+0x10;write_595(table[buf2]); delay(4);temp=temp/10;}while(temp!=0)switch(flag_op){ case 1: //加法运算 store[0]=store[0]+store[1];flag_op=0; flag_order=0;store[1]=0; //输入的第二个数清零 break;case 2: //减法运算store[0]=store[0]-store[1];flag_op=0;flag_order=0; store[1]=0; //输入的第二个数清零 break;case 3: //乘法运算store[0]=store[0]*store[1]; flag_op=0;flag_order=0;store[1]=0; //输入的第二个数清零 break;case 4: //除法运算store[0]=store[0]/store[1]; //计算结果,存入第一个数 flag_op=0; //操作符清零flag_order=0; //输入顺序标识符清零,显示结果 store[1]=0; //输入的第二个数清零 break; }flag_equal=0; } } /*****************主函数*****************/ void main(){ while(1){ key=KeyScan(); //键盘扫描if(key>=0&&key<=9) //如果key在0到9之间,证明键盘按下的是数值 { if(store[flag_order]<10000000){ store[flag_order]=store[flag_order]*10+key;}key=16;}if(key==14) //如果key为14时,证明键盘按下的是CE键{P2=(P2&0x0f)|0x80;write_595(table[0]);store[0]=0; //数据清零store[1]=0;flag_op=0;flag_order=0;flag_equal=0;key=16;}YunSuan();display(store[flag_order]); } }第三章调试结果及分析本设计主要是在编写的程序编译通过后,用下载软件将编写的程序下载到实验开发板上,验证结果是否满足设计要求。