计算器电子竞赛_第1页
计算器电子竞赛_第2页
计算器电子竞赛_第3页
计算器电子竞赛_第4页
计算器电子竞赛_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、G)冻”电力龙淨Northeast Dianli University电子设计大赛论文计算器组长:姓名:组员:姓名:姓名:姓名:联系方式:亠、设计内容本设计是基于52系列单片机来进行的数字计算器系统设计,可以完成计算器 的键盘输入,进行加、减、乘、除基本四则运算,并在 LCDt显示相应的结果; 设计电路采用STC89C5单片机为主要控制电路,利用MM74C92作为计算器4*4键 盘的扫描IC读取键盘上的输入;显示采用字符LC廨态显示;软件方面使用C语言 编程,并用PROTUES真,具体设计如下:(1) 由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分 析后,最后采用LCD显示数

2、据和结果。(2) 采用键盘输入方式,键盘包括数字键(09)、符号键(+、-、X、十)、 清除键(onc)和等号键(=),故只需要16个按键即可,设计中采用矩阵键盘。(3) 在执行过程中,开机显示零,等待键入数值,当键入数字,通过 LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次 键入数值,当再键入数值后将显示键入的数值,按等号就会在LCDk输出运算结果。(4) 错误提示:当计算器执行过程中有错误时,会在LCDt显示相应的提示,如: 当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在 LCDk提 示overflow ;当除数为0时,计算器会在LC

3、Dt提示error。二、总体框图(1)系统模块图:(2)算术运算程序流程图:(3)系统总流程图:开始初始化参数初始化LCD显示有否有键值?N读取键码数字键清零键键入数值状态清零功能键根据上次功能键和输入 的数据计算结果结果送显示缓冲结果送显示缓冲1 ,等待数值键入等待数值键入结果送显示缓冲本次功能键?N数值送显示缓冲等待数值键入LCD显示功能模块(一)、总体硬件设计本设计选用STC89C5单片机为主控单元;显示部分:采用LCD静态显示;按键部分:采用4*4键盘;用MM74C92为4*4键盘扫描IC ,读取输入的键值。 总体设计效果如下图:(二)、单片机接口电路说明1、手动上电复位电路:当VCC

4、上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒 后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作 期间,按下S,C放电。S松手,C又充电,在10K电阻上出现电压,使得单片机复 位。几个毫秒后,单片机进入工作状态。2、内部时钟模式电路:XTAL2XTAL1C1 “ HI当单片机工作于内部时钟模式的时候,只需在XTAL1和XTAL右|脚连接一个晶 体振荡器或者陶瓷振荡器,并接两个电容后接地即可,在使用时对于电容的选择 有一定的要求:当外接晶体振荡器的时候,电容值一般选择 3= C2=30+10p或 30-10pF;当外接陶瓷振荡器的时候,电容值一般选择

5、 3= C2=40+10p或 40-10pF;3、单片机与复位、时钟电路连接电路图:(三)、键盘接口电路:计算器输入数字和其他功能按键要用到很多按键, 如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况 下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O线作为 行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按 键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高单片 机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图1所示:一般有16个键组成,在单片机中正好可以用 一个P

6、口实现16个按键功能,这种形式在单片机系统中也最常用。图1矩阵键盘布局图矩阵键盘内部电路图如图2所示:nn*0 _i-3TS1&11i1.严13图2为了进一步节省单片机I/O 口资源,我们在设计中使用了 MM74C92芯片MM74C92是一款4*4键盘扫描IC,它可检测到与之相连的4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。其引脚图如图3所示:Pin Assignment for DIPH0WY1 UROW V2 上DATA OUI A1G*OATA HUT BH0VTY4 皿“QUT C14IJ 龍 IJA 町 DR DATA OUT DKEyfrQUftCE WK 卫 Gi

7、jmrrNSM7C0LUWI “ 丄12COLUMN XJ 丄tOIXI甜0 巴COLUWIY KZTop ViewMM94C922图3 MM94C22硬件图MM74C922I 脚说明:Y1Y4 (脚1脚4): 4*4键盘第一列至第四。X1X4 (脚11、10、8、7): 4*4键盘第一行至第四行。(3) DOADO( Dataout AD 脚 1417):按键之 BC码输出,其中 DOA为 LSB,DOD为 MSBVCC (脚18):电源脚,+3V+15V ab126计算公式大全GND (脚9):接地管脚。新艺图库OSC( Oscillator ,脚5):键盘扫描电路之频率所需外加电容的连引

8、脚。KBM(Keyboard Mask,脚6):内部消除开关弹跳电路所外加电容的引脚。(8)OE( Output Enable,脚13):芯片使能脚,接低电位可使芯片使能。(9)DA( Data Available ,脚12):数据有效输出脚。任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。如下图4所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到MM74C92的X1-X4、Y1-Y4引脚,MM74C92的数据输出口与单片机的 P2 口相连,MM74C92的DA引脚经过一个非门连接到单片机的/INTO脚,当MM74C92检测到 键盘输入时,DA产生高电平,与之相连的

9、/INTO检测到低电平,给单片机一个中 断,单片机从P2 口的低四位读入键盘上按下的键的值。1110174HC042图4 键盘接口电路图(四)、LCD显示模块:本设计采用LCD液晶显示器来显示输出数据。通过 D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。LCD1LM016LCO O LUACO Q LUCO OlZcO 寸 99Z MMUJQOQQQQQQ2co寸gco006OTCMIL弋-寸L图5 LCD模块(五)运算模块(单片机控制)STC89C52单片机是在一块芯片中集成了 CPU RAM ROM定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件

10、。如果按功能划分,它由如下功 能部件组成,即微处理器(CPU、数据存储器(RAM、程序存储器(ROM/EPROM 并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR 。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能, 尤其是特殊的独特的一些功能, 通过使用单片机编写的程序可以实现高智能, 高 效率,以及高可靠性! 因此我们采用单片机作为计算器的主要功能部件, 可以很 快地实现运算功能。四、软件编程:1、主函数设计:函数声明#include#include #define uchar unsigned char #define uint unsigned

11、int char translate(int keycode); void arithmetic();void init_LCM();void write_data(char ddata); void write_com(char command);void check_BF();void clearLCD(); void display(long a); void dealerror();void dataoverflow();定义变量和数组long x=0,y=0,num=0; int operators,input,iny=0; char key;char error5=error;ch

12、ar overflow8=overflow;sbit EN=P3A4;sbit R_W=P3A5; sbit RS=P3A6;主函数 */* main()EA=1;EX0=1;IT0=1;P2=0xff;display(0); init_LCM();write_data(0x30);while(1) 2、分块程序设计:1)、键盘输入检测程序设计:有键按下时,单片机响应外部中断 0,转入外部中断 0 中断处理函数,在中 断处理函数中完成对按键的判断,以进行下一步的程序处理键值转化为键盘上按键值函数 */char translate(int keycode)switch(keycode)case

13、0: return 7; break; case 1: return 4;break;case 2:return 1; break;case 3:return c; break;case 4:return 8; break;case 5:return 5; break;case 6:return 2; break;case 7:return 0; break;case 8:return 9; break;case 9:return 6; break;case 10:return 3; break;case 11:return =; break;case 12:return /; break;c

14、ase 13:return *; break;case 14:return -; break;case 15:return +;break;外部中断 0处理函数 */void INT_0(void) interrupt 0 using 0 key=translate(P2&0x0f);if(key=0) / 判断按下的键是否为数值 num=num*10+(key-0);if (operators0) y=num;iny=1;elsex=num;if(num-134217728) / 当前数值是否超出限定范围display(num);elsedataoverflow();elseswitch(k

15、ey)case c:x=0;y=0;num=0;iny=0;operators=0;display(num);break;case =:arithmetic();iny=0;operators=0;num=0;break;算术运算函数case +:if (operators) arithmetic(); operators=1; num=0; break;case -:if (operators) arithmetic(); operators=2; num=0; break;case *:if (operators) arithmetic(); operators=3; num=0; bre

16、ak;case /:if (operators) arithmetic(); operators=4; num=0; break;(2)、算术运算程序设计:void arithmetic()if (iny)switch(operators)case 1: x=x+y; num=x;if(num-134217728) display(num);else dataoverflow(); break;case 2: x=x-y;num=x;if(num-134217728) display(num);elsedataoverflow(); break;case 3:x=x*y;num=x;if(nu

17、m-134217728)display(num);elsedataoverflow();break;case 4:if (y=0)dealerror();elsex=x/y;num=x;if(num-134217728)display(num);elsedataoverflow();break;y=0;(3)、LCD显示程序设计:利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或 显示相应数据。*LCD初始化函数void init_LCM()write_com(0x30); write_com(0x30); write_com(0x30); write_com(0x38)

18、; write_com(0x08); write_com(0x01);write_com(0x06);write_com(0x0e);LCD写数据函数void write_data(char ddata)RS=1;/* 写指令 */R_W=0;EN=1;/* 使能信号开 */P仁ddata;/*将数据送入pl 口 */EN=O;/*使能信号关*/check_BF();LCD写指令函数void write_com(char command)RS=O;/*写指令*/R_W=O;EN=1;/*使能信号开*/P仁comma nd;/*将数据送入pl 口 */EN=0;/* 使能信号关 */ check

19、_BF();*LCD检查忙碌函数 */void check_BF() char i,x=0x80; P1=0xff; while(x&0x80) RS=0;R_W=1;EN=1;x=P1;EN=0;for (i=0;i10;i+);EN=0;/* 关闭使能信号 */*LCD清屏函数 */void clearLCD() write_com(0x01);LCD显示函数void display(long a) long temp,b,c=-1; int lenth=1,i,j;clearLCD();if(a0;i-)b=1;for(j=0;ji-1;j+) b=b*10;write_data(0x3

20、0+a/b);a=a%b;(4)、错误处理及提示程序设计:/*除数为处理函数 */void dealerror()int i=0; clearLCD();for(i=0;i5;i+)write_data(errori);数值溢出处理函数 */void dataoverflow()int i=0;clearLCD();for(i=0;i8;i+) write_data(overflowi);五、联机调试:在联机调试的过程中, 由于一开始设的液晶显示器的电压过高, 使得屏幕太 亮,所以没有数字显示。在我们的耐心调试之下,发现电压在 1.5 一 2V是液晶显 示器正常工作电压。修改后,LC显示正确。六、心得体会这是我们进入大学来的第三个关于设计类的课题。 第一个是C语言,第二个 是电子科技竞赛。这次与前两次的不同在于这个留给我的更多的是抽象与纠结。 在这次长通杯竞赛中,我学到了好多东西,有些甚至是课本上面所没有的。1、我们对 proteus 仿真软件有了初步的了解和认识。通过使用 proteus 仿 真软件,可以让我们在虚拟的环境中进行实验, 可以先通过它来检验电路的正确 性和可行性, 而不需要真实电路环境的介入, 不必顾及仪器设备的短缺与时间环 境的限制, 能够

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论