基于AT89C51的简单计算器设计_第1页
基于AT89C51的简单计算器设计_第2页
基于AT89C51的简单计算器设计_第3页
基于AT89C51的简单计算器设计_第4页
基于AT89C51的简单计算器设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

设计题目 基于单片机的简易计算器设计与仿真设计题目 基于单片机的简易计算器设计与仿真 一 设计实验条件 一 设计实验条件 地 点 实验设备 PC机 装有Keil Protues Word Visio 二 设计任务 二 设计任务 本系统选用AT89C51单片机为主控机 通过扩展必要的外围接口电路 实现 对计算器的设计 具体设计如下 1 由于设计的计算器要进行四则运算 为了得到较好的显示效果 经综合分 析后 最后采用LCD 显示数据和结果 2 采用键盘输入方式 键盘包括数字键 0 9 符号键 清除键 on c 和等号键 故只需要16 个按键即可 设计中采用集成的计算键盘 3 在执行过程中 开机显示零 等待键入数值 当键入数字 通过LCD显示 出来 当键入 运算符 计算器在内部执行数值转换和存储 并等待再次键入数值 当 再键入数值后将显示键入的数值 按等号就会在LCD上输出运算结果 4 错误提示 当计算器执行过程中有错误时 会在LCD上显示相应的提示 如 当输入的数值或计算得到的结果大于计算器的表示范围时 计算器会在LCD上 提示overflow 当除数为0时 计算器会在LCD上提示error 设计要求 分别对键盘输入检测模块 LCD显示模块 算术运算模块 错误处理 及提示模块进行设计 并用Visio画系统方框图 keil与protues仿 真分析其设计结果 三 设计时间与设计时间安排 三 设计时间与设计时间安排 1 设计时间 设计时间 6月27日 7月8日 2 设计时间安排 设计时间安排 熟悉课题 收集资料 3天 6月27日 6月29日 具体设计 含上机实验 6天 6月30日 7月5日 编写课程设计说明书 2天 7月6日 7月7日 答辩 1天 7月8日 四 设计说明书的内容 四 设计说明书的内容 1 前言 前言 自己写 自己写 组员之间不能相同 写完后将组员之间不能相同 写完后将红字红字删除 排版时注意对齐删除 排版时注意对齐 本设计是基于51系列单片机来进行的数字计算器系统设计 可以完成计算 器的键盘输入 进行加 减 乘 除基本四则运算 并在LCD上显示相应的结果 设计电路采用AT89C51单片机为主要控制电路 利用MM74C922作为计算器4 4 键盘的扫描IC读取键盘上的输入 显示采用字符LCD静态显示 软件方面使用C 语言编程 并用PROTUES仿真 2 设计题目与设计任务 设计题目与设计任务 现实生活中人们熟知的计算器 其功能主要如下 1 键盘输入 2 数值显示 3 加 减 乘 除四则运算 4 对错误的控制及提示 针对上述功能 计算器软件程序要完成以下模块的设计 1 键盘输入检测 模块 2 LCD显示模块 3 算术运算模块 4 错误处理及提示模块 3 主体设计部分 主体设计部分 1 系统模块图 系统模块图 单片机 运算模块 显示模块 输入模块 2 2 算术运算程序流程图 算术运算程序流程图 加加 开开始始 判判断断运运算算符符 乘乘除除减减 判判断断结结果果溢溢出出 除除数数为为0 错错误误信信息息送送显显示示缓缓冲冲 数数值值送送显显示示缓缓冲冲 Y N N Y 3 3 系统总流程图 系统总流程图 开开始始 初初始始化化参参数数 初初始始化化LCD显显示示 本本次次功功能能键键 读读取取键键码码 数数字字键键清清零零键键功功能能键键 键键入入数数值值状状态态清清零零 根根据据上上次次功功能能键键和和输输入入 的的数数据据计计算算结结果果 结结果果送送显显示示缓缓冲冲 LCD显显示示 有有否否有有键键值值 数数值值送送显显示示缓缓冲冲 结结果果送送显显示示缓缓冲冲 等等待待数数值值键键入入等等待待数数值值键键入入 结结果果送送显显示示缓缓冲冲 等等待待数数值值键键入入 Y N Y N 4 4 硬件设计 硬件设计 一 一 总体硬件设计 总体硬件设计 本设计选用AT89C51单片机为主控单元 显示部分 采用LCD静态显示 按键部分 采用4 4键盘 用MM74C922为4 4键盘 扫描IC 读取输入的键值 总体设计效果如下图 二 单片机接口电路说明 1 1 手动上电复位电路 手动上电复位电路 当VCC上电时 C充电 在10K电阻上出现电压 使得单片机复位 几个毫秒 后 C充满 10K电阻上电流降为0 电压也为0 使得单片机进入工作状态 工 作期间 按下S C放电 S松手 C又充电 在10K电阻上出现电压 使得单片机 复位 几个毫秒后 单片机进入工作状态 2 2 内部时钟模式电路 内部时钟模式电路 当单片机工作于内部时钟模式的时候 只需在XTAL1和XTAL2引脚连接一个 晶体振荡器或者陶瓷振荡器 并接两个电容后接地即可 在使用时对于电容的 选择有一定的要求 当外接晶体振荡器的时候 电容值一般选择C1 C2 30 10pF或30 10pF 当外接陶瓷振荡器的时候 电容值一般选择C1 C2 40 10pF或40 10pF 3 3 AT89C51AT89C51单片机引脚介绍 单片机引脚介绍 V VC CC C 供电电压 G GN ND D 接地 P P0 0口口 P0口为一个8位漏级开路双向I O口 每脚可吸收8TTL门电流 当P0口 的管脚第一次写1时 被定义为高阻输入 P0能够用于外部程序数据 存储器 它可以被定义为数据 地址的第八位 在FIASH编程时 P0 口作为原码输入口 当FIASH进行校验时 P0输出原码 此时P0外部 必须被拉高 P P1 1口口 P1口是一个内部提供上拉电阻的8位双向I O口 P1口缓冲器能接收输 出4TTL门电流 P1口管脚写入1后 被内部上拉为高 可用作输入 P 1口被外部下拉为低电平时 将输出电流 这是由于内部上拉的缘故 在FLASH编程和校验时 P1口作为第八位地址接收 P P2 2口口 P2口为一个内部上拉电阻的8位双向I O口 P2口缓冲器可接收 输出 4个TTL门电流 当P2口被写 1 时 其管脚被内部上拉电阻拉高 且 作为输入 并因此作为输入时 P2口的管脚被外部拉低 将输出电流 这是由于内部上拉的缘故 P2口当用于外部程序存储器或16位地址外 部数据存储器进行存取时 P2口输出地址的高八位 在给出地址 1 时 它利用内部上拉优势 当对外部八位地址数据存储器进行读写时 P2口输出其特殊功能寄存器的内容 P2口在FLASH编程和校验时接收高 八位地址信号和控制信号 P P3 3口口 P3口管脚是8个带内部上拉电阻的双向I O口 可接收输出4个TTL门电 流 当P3口写入 1 后 它们被内部上拉为高电平 并用作输入 作为输入 由于外部下拉为低电平 P3口将输出电流 ILL 这是由 于上拉的缘故 P3口也可作为AT89C51的一些特殊功能口 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断0 P3 3 INT1 外部中断1 P3 4 T0 记时器0外部输入 P3 5 T1 记时器1外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 P3口同时为闪烁编程和编程校验接收一些控制信号 R RS ST T 复位输入 当振荡器复位器件时 要保持RST脚两个机器周期的高电平 时间 A AL LE E P PR RO OG G 当访问外部存储器时 地址锁存允许的输出电平用于锁存地址的 地位字节 在FLASH编程期间 此引脚用于输入编程脉冲 在平时 A LE端以不变的频率周期输出正脉冲信号 此频率为振荡器频率的1 6 因此它可用作对外部输出的脉冲或用于定时目的 然而要注意的是 每当用作外部数据存储器时 将跳过一个ALE脉冲 如想禁止ALE的 输出可在SFR8EH地址上置0 此时 ALE只有在执行MOVX MOVC指令是ALE才起作用 另外 该引脚被略微 拉高 如果微处理器在外部执行状态ALE禁止 置位无效 P PS SE EN N 外部程序存储器的选通信号 在由外部程序存储器取指期间 每个 机器周期两次 PSEN有效 但在访问外部数据存储器时 这两次有效 的 PSEN信号将不出现 E EA A V VP PP P 当 EA保持低电平时 则在此期间外部程序存储器 0000H FFFFH 不管是否有内部程序存储器 注意加密方式1时 EA将内 部锁定为RESET 当 EA端保持高电平时 此间内部程序存储器 在FL ASH编程期间 此引脚也用于施加12V编程电源 VPP X XT TA AL L1 1 反向振荡放大器的输入及内部时钟工作电路的输入 X XT TA AL L2 2 来自反向振荡器的输出 4 4 单片机与复位 时钟电路连接电路图 单片机与复位 时钟电路连接电路图 三 键盘接口电路 三 键盘接口电路 计算器输入数字和其他功能按键要用到很多按键 如果采用独立按键的方 式 在这种情况下 编程会很简单 但是会占用大量的I O 口资源 因此在很多情况下都不采用这种方式 而是采用矩阵键盘的方案 矩 阵键盘采用四条I O 线作为行线 四条I O 线作为列线组成键盘 在行线和列线的每个交叉点上设置一个按键 这样键盘 上按键的个数就为4 4个 这种行列式键盘结构能有效地提高单片机系统中I O 口的利用率 矩阵键盘的工作原理 计算器的键盘布局如图1所示 一般有16个键组成 在单片机中正好可以用 一个P口实现16个按键功能 这种形式在单片机系统中也最常用 图 1 矩阵键盘布局图 矩阵键盘内部电路图如图2所示 为了进一步节省单片机I O口资源 我们在设计中使用了MM74C922芯片 MM 74C922是一款4 4键盘扫描IC 它可检测到与之相连的4 4键盘的按键输入 并 通过数据输出口将按键相应的编码输出 其引脚图如图3所示 图3 MM94C22硬件图 MM74C922引脚说明 1 Y1 Y4 脚1 脚4 4 4键盘第一列至第四 2 X1 X4 脚11 10 8 7 4 4键盘第一行至第四行 3 DOA DOD Dataout A D 脚14 17 按键之BCD码输出 其中DOA为LSB DOD为MSB 4 VCC 脚18 电源脚 3V 15V ab126计算公式大全 5 GND 脚9 接地管脚 新艺图库 6 OSC Oscillator 脚5 键盘扫描电路之频率所需外加电容的连引脚 7 KBM Keyboard Mask 脚6 内部消除开关弹跳电路所外加电容的引脚 8 OE Output Enable 脚13 芯片使能脚 接低电位可使芯片使能 9 DA Data Available 脚12 数据有效输出脚 任一按键按下时 此脚位会输出高电位 按键释放后此脚又会恢复为低电位 MM74C922对各按键的响应如下表所示 如下图4所示 在本设计中 计算器输入键盘的4条行线 列线分别连接到M M74C922的X1 X4 Y1 Y4引脚 MM74C922的数据输出口与单片机的P2口相连 MM74C922的DA引脚经过 一个非门连接到单片机的 INT0脚 当MM74C922检测到键盘输入时 DA产生高电 平 与之相连的 INT0检测到低电平 给单片机一个中断 单片机从P2口的低四 位读入键盘上按下的键的值 图4 键盘接口电路图 四 四 LCDLCD显示模块 显示模块 本设计采用LCD液晶显示器来显示输出数据 通过D0 D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据 图5 LCD 模块 五 运算模块 单片机控制 五 运算模块 单片机控制 MCS 51 单片机是在一块芯片中集成了CPU RAM ROM 定时器 计数器和多功能I O等一 台计算机所需要的基本功能部件 如果按功能划分 它由如下功能部件组成 即微处理器 CPU 数据存储器 RAM 程序存储器 ROM EPROM 并行I O 口 串行口 定时器 计数器 中断系统及特殊功能寄存器 SFR 单片机是靠程序运行的 并且可以修改 通过不同的程序实现不同的功能 尤其是特殊的独特的一些功能 通过使用单片机编写的程序可以实现高智能 高效率 以及高可靠性 因此我们采用单片机作为计算器的主要功能部件 可以很快地实现运算功能 3 53 5 软件编程 软件编程 1 1 主函数设计 主函数设计 函数声明 include include define uchar unsigned char define uint unsigned 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 error 5 error char overflow 8 overflow sbit EN P3 4 sbit R W P3 5 sbit RS P3 6 主函数 main EA 1 EX0 1 IT0 1 P2 0 xff display 0 init LCM write data 0 x30 while 1 2 2 分块程序设计 分块程序设计 1 1 键盘输入检测程序设计 键盘输入检测程序设计 有键按下时 单片机响应外部中断0 转入外部中断0中断处理函数 在中 断处理函数中完成对按键的判断 以进行下一步的程序处理 键值转化为键盘上按键值函数 char 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 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 operators 0 y num iny 1 else x num if num 当前数值是否超出限定范围 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 operators 2 num 0 break case if operators arithmetic operators 3 num 0 break case if operators arithmetic operators 4 num 0 break 2 2 算术运算程序设计 算术运算程序设计 算术运算函数 void arithmetic if iny switch operators case 1 x x y num x if num display num else dataoverflow break case 2 x x y num x if num display num else dataoverflow break case 3 x x y num x if num display num else dataoverflow break case 4 if y 0 dealerror else x x y num x if num display num else dataoverflow break y 0 3 3 LCDLCD显示程序设计 显示程序设计 利用LCD静态显示 通过程序向LCD写指令字或数据使LCD完成不同功能或显 示相应数据 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 使能信号开 P1 ddata 将数据送入p1口 EN 0 使能信号关 check BF LCD写指令函数 void write com char command RS 0 写指令 R W 0 EN 1 使能信号开 P1 command 将数据送入p1口 EN 0 使能信号关 check BF LCD检查忙碌函数 void check BF char i x 0 x

温馨提示

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

评论

0/150

提交评论