51单片机的简单计算器设计与仿真_第1页
51单片机的简单计算器设计与仿真_第2页
51单片机的简单计算器设计与仿真_第3页
51单片机的简单计算器设计与仿真_第4页
51单片机的简单计算器设计与仿真_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、基于单片机的简易计算器设计与仿真 设计题目:基于单片机的简易计算器设计与仿真 一、设计实验条件: 地 点:自动化系实验室 实验设备:PCM(装有 Keil ; Protues ; Word ; Visio ) 二、设计任务: 本系统选用AT89C5单片机为主控机。通过扩展必要的外围接口电路,实现 对计算器的设计,具体设计如下: (1) 由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分 析后,最后采用 LCD 显示数据和结果。 (2) 采用键盘输入方式,键盘包括数字键(09)、符号键(+、-、X、十)、 清除键(onc)和等号键(=),故只需要16个按键即可,设计中采用集成的计算

2、 键盘。 (3) 在执行过程中,开机显示零,等待键入数值,当键入数字,通过 LCD显示出 来,当键入+、 -、 *、 /运算符,计算器在内部执行数值转换和存储,并等待再次 键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结 果。 (4) 错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如: 当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在 LCD上提 示overflow ;当除数为0时,计算器会在LCD上提示error。 设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理 及提示模块进行设计,并用Visio画系统方框图

3、,keil与protues仿真 分析其设计结果。 三、设计时间与设计时间安排: 1、设计时间:6月27日7月8日 2、设计时间安排: 熟悉课题、收集资料:3 具体设计(含上机实验): 编写课程设计说明书:2 答辩: 1 四、设计说明书的内容: 天(6 月 27 日 6 月 29 日 ) 6天(6月 30日 7 月 5日) 天(7月 6日 7 月 7日) 天( 7 月 8 日) 1、前言: ( 自己写, 组员之间不能相同,写完后将 红字删除,排版时注意对齐 ) 本设计是基于 51 系列单片机来进行的数字计算器系统设计,可以完成计算 器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相

4、应的结果; 设计电路采用AT89C51单片机为主要控制电路,利用 MM74C92作为计算器4*4 键盘的扫描IC读取键盘上的输入;显示采用字符 LCD静态显示;软件方面使用 C语言编程,并用PROTUE仿真。 2、设计题目与设计任务: 现实生活中人们熟知的计算器,其功能主要如下:( 1)键盘输入;( 2)数 值显示;(3)加、减、乘、除四则运算; (4) 对错误的控制及提示。 针对上述功能,计算器软件程序要完成以下模块的设计: (1) 键盘输入检测 模块;(2)LCD示模块;(3)算术运算模块;(4)错误处理及提示模块。 3、主体设计部分: 1)、系统模块图: (2)、算术运算程序流程图: 数

5、值送显示缓冲 (3)、系统总流程图: N 读取键码 1 卩V 数字键 清零键 功能键 1 F 1P 键入数值 根据上次功能键和输入 状态清零 的数据计算结果 * N 本次功能键?丫 结果送显示缓冲 结果送显示缓冲 等待数值键入 等待数值键入 数值送显示缓冲 结果送显示缓冲 等待数 值键入 LCD显示 (4)、硬件设计: (一)、总体硬件设计: 本设计选用AT89C51单片机为主控单元; 显示部分:采用LCD静态显示; 按键部分:采用4*4键盘;用MM74C92为4*4键盘扫描IC,读取输入的键值。 总体设计效果如下图: ;dMU Eg 血 ?1 IM. 円2 P1J rt- rijs FIJI

6、 pi.- rm* fZAD r2JIU.ll 工曲I? F3MI3 L4焙闻F7 ErJT- a Zk 1* r 旳 rsEt nnnn nnnB 呛他U百 *iaRxt n IT.- E “zinr 叮孑右 ra.E F3-TT1 科型楚 n*a jan HOH nn+ (二八单片机接口电路说明: 1、手动上电复位电路: 当VCCh电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫 秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。 工作期间,按下S, C放电。S松手,C又充电,在10K电阻上出现电压,使得单 片机复位。几个毫秒后,单片机进入工作状态。 C

7、-I HI 2、内部时钟模式电路: XTAL1 只需在XTAL和XTAL2引脚连接一个晶 GZD 当单片机工作于内部时钟模式的时候, 体振荡器或者陶瓷振荡器,并接两个电容后接地即可,在使用时对于电容的选择 有一定的要求: 当外接晶体振荡器的时候,电容值一般选择 3= C2=30+10p或 30-10pF; 当外接陶瓷振荡器的时候,电容值一般选择 3= C2=40+10p或 40-10pF; 3、AT89C5单片机引脚介绍: VCC 供电电压。 GND接地。 P0口: P0口为一个8位漏级开路双向I/O 口,每脚可吸收 8TTL门电流。当P0 口的管脚第一次写1时,被定义为高阻输入。P0能够用于

8、外部程序数 据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当 FIASH进行校验时,P0输出原码,此时P0外部 必须被拉咼。 P1 口: P1 口是一个内部提供上拉电阻的8位双向I/O 口,P1 口缓冲器能接收输 出4TTL门电流。P1 口管脚写入1后,被内部上拉为高,可用作输入, P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。 在FLASH编程和校验时,P1 口作为第八位地址接收。 P2口: P2口为一个内部上拉电阻的 8位双向I/O 口,P2口缓冲器可接收,输出 4个TTL门电流,当P2口被写“ 1”时,其管脚被内部上拉电阻拉高

9、,且 作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。 这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16位地址外 部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1 ” 时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时, P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高 八位地址信号和控制信号。 P3口: P3口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL门电 流。当P3口写入“ 1”后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由 于上拉

10、的缘故。 P3口也可作为 AT89C51的一些特殊功能口: RXD(串行输入口)TXD (串行输出口)/INTO (外部中断0) /INT1 (外部中断 1 ) T0 (记时器 0外部输入) T1 (记时器 1外部 输入) /WR (外部数据存储器写选通) /RD (外部数据存储器读选通) P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平 时间。 ALE/PROG当访问外部存储器时, 地址锁存允许的输出电平用于锁存地址的 地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时, ALE端以不变的频率周期输出正脉

11、冲信号,此频率为振荡器频率的 1/6 。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意 的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止 ALE的输出可在SFR8E哋址上置0。此时,ALE只有在执行 MOVX MOVC 指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外 部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个 机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效 的/PSEN信号将不出现。 /EA/VPP :当/EA保持低电平时,则在此期间外部程序存储器(OOOOH-FFFFH),

12、不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为 RESET当/EA端保持高电平时,此间内部程序存储器。在FLASH编程 期间,此引脚也用于施加 12V编程电源(VPP。 XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 4、单片机与复位、时钟电路连接电路图: C3 30 - .订m| xi. .11 .rpvQTai C4 1 - - ,uTE:Ta Ou O O Dy67 BB75 XTAI 1 P0.0/AD0 PQ/AD1 XTAL2 P0.3/AD3 P0 5iAD5 P0,6;AD6 AST P0.7JAD7 P2 D/

13、A8 P21倔 F2.2/A1: I-SEN P2.3/A11 ALE P2.4/A13 FX p O C/A 4 q P2.6/A14 P2.7/A15 P1 n P3.CVRXD F 1 1 P3.1/TKD Pl 2 F3.2/NTT P1 3 F3.iNTT P1 4 P3 4/T0 Fl 5 PS T1 pi.e P3.6AWR P1.r p? d 19 ! 1S 36 : 9 3;: ;矽 科T8兀引 28 : 39 I T7: 二 忙: 17 : 21 : ”: R1 E601 1.-2 (三)键盘接口电路: 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方 式,

14、在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多 情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O线 作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一 个按键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高 单片机系统中I/O 口的利用率 矩阵键盘的工作原理: 计算器的键盘布局如图1所示:一般有16个键组成,在单片机中正好可以用 一个P 口实现16个按键功能,这种形式在单片机系统中也最常用 图1矩阵键盘布局图 矩阵键盘内部电路图如图2所示: 为了进一步节省单片机I/O 口资源,我们在设计中使用了 MM74C9

15、2芯片。 MM74C92是一款4*4键盘扫描IC ,它可检测到与之相连的4*4键盘的按键输入, 并通过数据输出口将按键相应的编码输出。其引脚图如图3所示: Pin Assignment for DIP -Vcc LJAtAOur A RQWr3 HQW r4 DATA OUT R BSCHLATOft 竺 DATA OUT J iKtm mE im第h 上 ULjrpfrnCTT 2L QflTApai C DATA AVAILABLE COLUMN )(3 cai UMH XI COlUMM K2 Top View MWI94C922 图3 MM94C22硬件图 MM74C922I 脚说明:

16、 Y1Y4 (脚1脚4): 4*4键盘第一列至第四。 X1X4 (脚11、10、8、7): 4*4键盘第一行至第四行。 (3) DOADO( Dataout AD,脚 1417):按键之 BCD码输出,其中 DO/为 LSB DOD为 MSB VCC (脚18):电源脚,+3V+15V ab126计算公式大全 GND (脚9):接地管脚。新艺图库 OSC( Oscillator ,脚5):键盘扫描电路之频率所需外加电容的连引脚。 KBM(Keyboard Mask,脚6):内部消除开关弹跳电路所外加电容的引脚。 (8)OE( Output Enable,脚13):芯片使能脚,接低电位可使芯片使

17、能。 (9)DA( Data Available ,脚12):数据有效输出脚。任一按键按下时,此脚 位会输出高电位,按键释放后此脚又会恢复为低电位。 MM74C92对各按键的响应如下表所示: Truth TabFes (Pins D thrcutjli 11) Switch Position C 12345078910 tl Y1.X1 Y1_X2 Y1X3 Y1.X4 2X1 Y2.X2 Y2.X3 2X4 V3.X1 3X2 3 X3 YJti D A T A O u A 0 C D f NnTfl 1) 0 0 0 u 0 ft (Pihs12ttirDigh19 Bwitch Pocr

18、ticri (I a a 1 a 1 a o ( 121314151?1819 V4.X1 V4 X2 V4,X3V4,X4 Y$(Nate1|. Y5 (hlotel), 6 (Nate VE 1), X1X2X0X4 A 0 u T A 8 i; D EfNote 1) 0 0 0 o 0 0 1 VOmr mr MM/dt 亿 如下图4所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到 MM74C92的X1-X4、Y1-Y4引脚,MM74C92的数据输出口与单片机的 P2 口相连, MM74C92的DA引脚经过一个非门连接到单片机的/INTO脚,当MM74C92检测到 键盘输入时

19、,DA产生高电平,与之相连的/INTO检测到低电平,给单片机一个中 断,单片机从P2 口的低四位读入键盘上按下的键的值。 也話. 込 Qu . -C2 U1 KBlVt asc 4 is in 14 12 13 DE A P G D D 图4 键盘接口电路图 (四八LCD显示模块: 本设计采用LCD液晶显示器来显示输出数据。通过 D0-D7引脚向LCD写指 令字或写数据以使LCD实现不同的功能或显示相应数据。 图5 LCD模块 LCD1 (五)运算模块(单片机控制): MCS-51单片机是在一块芯片中集成了 CPU RAM ROM定时器/计数器和多 功能I/O等一台计算机所需要的基本功能部件。

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

21、 un sig ned int char tran slate(i nt keycode); void arithmetic。; void ini t_LCM(); void write_data(char ddata); void write_com(char comma nd); 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

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

23、ar translate(int keycode) switch(keycode) case 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:

24、 return 3; break; case 11: return =; break; case 12: return /; break; case 13: return * break; case 14: return -; break; case 15: return +; break; 外部中断 0处理函数 */ void INT_0(void) interrupt 0 using 0 key=translate(P2 if(key=0) / 判断按下的键是否为数值 num=num*10+(key-0); if (operators0) y=num; iny=1; else x=num;

25、 if(num-8) / 当前数值是否超出限定范围 display(num); else dataoverflow(); else switch(key) 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();

26、 operators=2; num=0; break; case 1*1. if (operators) arithmetic(); operators=3; num=0; break; 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-8) display(num); else dataoverflow(); bre

27、ak; case 2: x=x-y; num=x; if(num-8) display(num); else dataoverflow(); break; case 3: x=x*y; num=x; if(num-8) display(num); else dataoverflow(); break; case 4: if (y=0) dealerror(); else x=x/y; num=x; if(num-8) display(num); else dataoverflow(); break; y=0; (3)、LCD显示程序设计: 利用LCD静态显示,通过程序向LCD写指令字或数据使L

28、CD完成不同功能或 显示相应数据 /*LCD 初始化函数 */ void init_LCM() write_com(0 x30); write_com(0 x30); write_com(0 x30); write_com(0 x38); write_com(0 x08); write_com(0 x01); write_com(0 x06); write_com(0 x0e); 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;/*使能信号开*/

温馨提示

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

评论

0/150

提交评论