




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 基于 51 单片机的 计算器设计 2015 年 5 月 1 日 1 目录目录 摘 要 3 一 前言 4 1 主要的问题及目标 4 2 针对上述目标 做出以下的设计 4 3 系统设计依据 4 二 系统方案设计 4 1 方案一 5 2 方案二 5 三 理论分析与计算 6 四 系统电路设计 6 1 显示模块 6 2 输入模块 7 3 控制模块 8 4 元器件的选择 9 5 特殊器件的简介 9 6 各单元模块的连接 9 五 系统软件设计 10 1 设计原理 10 2 程序结构框图 10 3 程序流程框图 11 六 系统测试 13 1 测试方法 14 2 计算器功能测试 14 3 测试结果分析 14 七 结束语 15 2 1 心得感悟 15 2 改进的设想 15 八 附录 15 1 系统设计图 15 2 设计程序 15 摘 要 电子计算器是日常生活中常用的电子计算仪器 他广泛应用于超市 大中 型商场 大小企业与学校中 具有精度高 体积小 应用范围广泛 易于操作 等优点 本作品以 MCS 51 系列中的 AT89C51 单片机为核心 能够实现单步加 减 乘 除运算 该系统通过检测矩阵键盘扫描 判断是否按键 实现对 4 4 键盘 扫描进行实时的按键检测 并把检测数据存储下来 经数据转换把数值送入 lcd1602 液晶屏显示 整个计算器系统的工作过程为 首先存储单元初始化 显示初始值和键盘 扫描 判断按键位置 查表得出按键值 单片机则对数据进行储存与相应处理 转换 之后送入 lcd1602 显示 整个系统可分为三个主要功能模块 功能模块 一 实时键盘扫描 功能模块二 数据转换为了数码管显示 功能模块三 lcd1602 显示 能实现 6 位或 6 位以内的精确运算 若输出数据超过 6 位则会以科学计数 法显示 关键词 关键词 AT89C51 单片机 计算器 加减乘除 矩阵键盘 液晶屏 3 1 前言 本设计是基于 51 系列单片机来进行的数字计算器系统设计 可以完成计 算器的键盘输入 进行加 减 乘 除基本四则运算 并在 LCD 上显示相应 的结果 设计电路采用 STC89C51 单片机为主要控制电路 显示采用 1602LCD 显示 软件方面使用 C 语言编程 最后用 PROSE99 画 PCB 焊接 万用板 进行硬件调试 1 主要的问题及目标 键盘输入 数值显示 能实现加 减 乘 除四则运算 可计算小数 负数 当计算器执行过程中有错误时 会在液晶屏上做出相应的提示 当除 数为 0 时 程序运算出错 液晶屏会显示 INF 2 针对上述目标 做出以下的设计 以 STC89C51 位主控芯片 P0 口连接 1602 液晶屏 P1 口连接 4 4 矩阵 键盘 将所有输入数据已浮点型进行运算 故最大输入数据为 16 位 为了更好的显示效果使用采用 1602 液晶屏作为显示模块 由于按键包含数字键 0 9 与 这 16 个按键 故以 4 4 矩阵键盘作为输入模块 以 3 节串联的 5 号电池作为电源 3 系统设计依据 实用性 可靠性 美观性 4 2 系统方案设计 1 方案一 显示模块采用数码管 数值只能显示一行 且无法显示 等符号 使用效果欠佳 电源模块采用USB 电压为5 0V 符合单片机的要求 但使计算器不方便 使用 必须通过USB通电 实用性不强 功能设计中添加复位键 可以使电路恢复到起始状态 确保微机系统中稳 定可靠 避免计算器出现 死机 程序走飞 等现象 但添加复位键会使计 算器显得繁琐 双精度型 double 占用64位的存储空间 在操作值很大的数字时 双精度型是最好的选择 2 方案二 显示模块 数码管 电源模块 USB 功能设计 有复位键 数据类型 双精度浮点型 电源模块 USB 显示模块 1602lcd 电源模块 电池盒 功能设计 上电复位 数据类型 单精度浮点型 方案一方案二 5 以1602lcd作为显示器 可显示双行数据 还可以显示多种运算符号 实用 性强 便于计算器的升级 将独立电源盒作为电源 以3节5号电池串联 电压可达4 5V 可以使 单片机正常工作 并且易于携带 给使用者带来很大便利 采用上电复位 将复位电路与电源开关结合 既可以确保微机系统中稳定 可靠的运行 又使计算器更为精简 单精度浮点型 float 专指占用32位存储空间的单精度值 单精度在一些处 理器上比双精度更快而且只占用双精度一半的空间 但是当值很大或很小的时 候 它将变得不精确 当你需要小数部分并且对精度的要求不高时 单精度浮 点型的变量是有用的 结合上述考虑论证 小组采用方案二作为计算器系统的设计方案 结合上述考虑论证 小组采用方案二作为计算器系统的设计方案 3 理论分析与计算 本作品为了要实现键盘输入 液晶显示屏输出 加 减 乘 除计算 上 电复位等功能 小组做出以下的分析与计算 将4 4矩阵键盘连接到单片机的P1口上 液晶显示屏连接到P0口上 并在 软件中用矩阵键盘扫描程序对其实时检测 将键盘输入的数据显示到液晶屏上 并通过运算程序计算 最终将计算结果输出到液晶屏上 将输入与输出数据以单精度浮点型定义 以 g或 f显示输出数据 可显示 精确数字或以科学计数法表示 6 4 系统电路设计 1 显示模块 液晶显示器 LCD 的主要原理是一电流刺激液晶分子产生点 线 面并 配合背部灯管构成画面 本系统采用的1602液晶为5V电压驱动 带背光 可显 示两行 每行16个字符 能显示汉字 内置128个字符的ASCII字符集字库 只 有并行接口 无串行接口 2 输入模块 4 4矩阵键盘将16个按键排成4行4列 第一行将每个按键的一端连在一起 构成行线 第一列将每个按键的另一端连接在一起构成列线 共有4行4列8根 线 将这八根线接到单片机的8个I O口上 通过程序扫描键盘就可检 测16个键 7 3 控制模块 AT89C51 是一种带 4K 字节 FLASH 存储器 FPEROM Flash Programmable and Erasable Read Only Memory 的低电压 高性能 CMOS 8 位微处理器 俗 称单片机 AT89C51 是一种带 2K 字节闪存可编程可擦除只读存储器的单片机 单片机的可擦除只读存储器可以反复擦除 1000 次 该器件采用 ATMEL 高密度 非易失存储器制造技术制造 与工业标准的 MCS 51 指令集和输出管脚相兼容 由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中 ATMEL 的 AT89C51 是 一种高效微控制器 AT89C51 是它的一种精简版本 AT89C51 单片机为很多嵌 入式控制系统提供了一种灵活性高且价廉的方案 8 4 元器件的选择 1602LCD 4 4矩阵键盘 10千欧排阻 自锁开关 20pF电容 12MHZ晶振 103千欧电位器 5 特殊器件的简介 自锁开关是指开关自带机械锁定功能 按下去 松手后按钮是不会完全跳 起来的 处于锁定状态 需要再按一次 才解锁完全跳起来 按下后接通 弹 起来后断开 6 各单元模块的连接 P0 单片机 P2 P1 P3 1602LCD 键盘 晶振 9 如图所示 液晶接PO口 键盘接P1口 液晶使能端P2 5 液晶数据命令选择端P2 6 液晶读写选择端P2 7 电源正负极分别接到VCC和GND 5 系统软件设计 1 设计原理 以keilV4 0设计 采用大循环嵌套的设计思想 程序主要由 液晶显示模 块 矩阵键盘扫描模块 运算模块 构成 大循环一直进行 是计算器一 直处于工作状态 不停地调用键盘扫描函数 将键盘输入的数据送给液晶显示 与运算模块 经运算模块计算出结果后 只需调用液晶显示的子函数就可将答 案显示到液晶屏上 2 程序结构框图 10 定义变量 便于后面程序的使用 位定义 液晶使能端P2 5 液晶数据命令选择端P2 6 液晶读写选择端P2 7 初始化 液晶开显示 清屏 矩阵键盘扫描程序 包含软件去逗 在大循环中不断调用键盘扫描程序当检测 到有键按下后 如果是有效值就进行处理 否则继续扫描键盘 3 程序流程框图 矩阵键盘扫描程序 1602 显示程序 运算模块 主函数初始化 大循环 处理错误 调用头文件 变量定义 位定义 11 否是 否 是 否是 开始 初始化 键盘扫描 有键按下 返回值 为 0 9 计算第一次输入的数值 键盘扫描 有按键 按下 12 是 否 是 否 返回值为 0 9 计算第二次输入的数值 计算运算结果 有按键按 下 LCD 显示 13 6 系统测试 1 测试方法 将计算器断电 把万用表调到蜂鸣器档上 把万用表两表笔放在待测 的两个端子上 若短路蜂鸣器就会响 经测得开关处电路存在短路 经修 复后电路焊接正常 2 计算器功能测试 加法测试 减法测试 乘法测试 除法测试 错误处理 3 测试结果分析 经测试 各项功能均已达成 对于一般的整形运算 计算器能准确无误的计算出来 由于使用浮点型数 据 计算器只能进行6 7位以内的精确运算 14 7 结束语 1 心得感悟 经过两个星期的设计与制作 本小组完成了基于51单片机的计算器的设计 期间我们遇到许多困难和问题都一一解决 最终完全达到了预期的目标 体会 到团体合作与成功的喜悦 我感到只有亲手实践才能更深刻 更全面的学好知 识 并且要在设计制作中多加入自己的想法 力求创新而不要模仿前人做过的 作品 在设计的每一小步都要尽自己最大努力做到最好 这样才能做出出色的 作品 2 改进的设想 1 使计算器能完成多步混合运算的功能 2 添加一个功能键 当按下功能键后改变矩阵键盘的键值 将第四列改为平 方 开根号 求模 求余 再次按下此键后第四列改回加 减 乘 除 并设计一个led灯来显示键值是否被改变 8 附录 1 系统设计图 2 设计程序 include include include 15 define uchar unsigned char define uint unsigned int define check busy sbit rs P2 7 sbit rw P2 6 sbit en P2 5 void delay int z int x y for x z x 0 x for y 110 y 0 y 判忙函数 bit LCD check busy 当LCD 忙 时 LCD的DATA 7位输 出为高电平信号 当LCD 不忙 时 LCD的DATA 7位输出为低 电平信号 P0 0 xFF 为便于检测 16 rs 0 rs 0 rw 1 en 1 忙 rw 1 void busy void P1 0 xff RS 0 RW 1 E 1 while P1 E 0 en 0 nop en 1 return bit P0 else lcd1602判忙函数 bit LCD Check Busy void bit result 修改了判 忙函数 DataPort 0 xFF RS 0 RW 1 EN 1 nop 17 result bit DataPort EN 0 return result return 0 写入命令函数 void write com uchar com while LCD check busy 忙则等待 rs 0 rw 0 en 1 P0 com nop en 0 18 写入数据函数 void write dat uchar dat while LCD check busy 忙则等待 rs 1 rw 0 en 1 P0 dat nop en 0 写入字符函数 void LCD write char uchar x uchar y uchar dat if y 0 write com 0 x80 x 19 else write com 0 xC0 x write dat dat 写入字符串函数 void write string uchar x uchar y uchar s while s LCD write char x y s s x 20 初始化函数 void LCD init write com 0 x38 显示模式设置 delay 5 write com 0 x06 显示光标移动设置 delay 5 write com 0 x0C 显示开及光标设置 write com 0 x01 显示清屏 按键扫描函数 返回扫描键值 uchar keyscan 键盘扫描函数 使用行列反转扫描法 unsigned char cord h cord l 行列值中间变量 P1 0 x0f 行线输出全为0 cord h P1 读入列线值 21 if cord h 0 x0f 先检测有无按键按下 delay 10 去抖 if P1 读入列线值 P1 cord h 0 xf0 输出当前列线值 cord l P1 读入行线值 while P1 等待松开并输出 return cord h cord l 键盘最后组合码值 return 0 xff 返回该值 unsigned char keypro switch keyscan 22 case 0 x7e return break case 0 x7d return break case 0 x7b return x break case 0 x77 return break case 0 xbe return 3 break case 0 xbd return 6 break case 0 xbb return 9 break case 0 xb7 return break case 0 xde return 2 break case 0 xdd return 5 break case 0 xdb return 8 break case 0 xd7 return 0 break case 0 xee return 1 break case 0 xed return 4 break case 0 xeb return 7 break case 0 xe7 return break default return 0 xff break 23 主函数 void main unsigned char num i sign unsigned char temp 16 最大输入16个 bit firstflag float a 0 b 0 unsigned char s LCD init 初始化液晶屏 delay 10 延时用于稳定 可以去掉 write com 0 x01 清屏 while 1 主循环 num keypro 扫描键盘 if num 0 xff 如果扫描是按键有效值则进行处理 24 if i 0 输入是第一个字符的时候需要把该行清 空 方便观看 wri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025金华经济技术开发区下属公办学校公开招聘参聘制教师14人考试参考题库附答案解析
- 2025安徽六安市霍山县公办幼儿园招聘保育员9人笔试参考题库附答案解析
- 高级财务管理指南
- 珠宝设计毕业论文
- 财会系毕业论文范文专科
- 高尔夫专业毕业论文课题
- 2025年建筑中介服务招标合同样本
- 空乘专业毕业论文题目
- 2025年赠予房屋权益正式合同
- 2025贵州黔东穗恒供应链服务有限公司招聘临聘人员1人笔试模拟试题及答案解析
- 2025年湖北省农村义务教育学校教师公开招聘小学语文真题(附答案)
- 2025四川绵阳市医学会招聘2人笔试模拟试题及答案解析
- 软件项目突发事件应急预案
- 2025年潍坊市中考数学试题卷(含标准答案)
- 调酒小摊设计方案(3篇)
- 虚拟现实在初中化学教学产品中的应用效果与设计创新(2025年)
- 2025年高速公路防汛应急演练方案(带演练脚本可直接使用)
- 2025年职业健康卫生知识培训考试试题及答案
- 游泳培训招生讲解
- 清洁生产审核报告模板
- 社区2025年开展的党委会议记录范文
评论
0/150
提交评论