已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学 单片机 课程设计说明书 1 简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分 单片机 显示部分三部分组成 键盘部分主要完成输入功能 单片机主要完成数据处理功能 包括确定按键 完成运算 以及输出数据 显示器部分 主要完成单片机输出的显示 本设计的思路是利用单片机性能好 稳定性强的优点来实现系统的运行 设计大致 可以分为三个步骤 第一步 硬件的选取和设计 第二步 程序的设计和调试 第三步 Protues 系统仿真 硬件是设计的骨骼 不仅关系到设计总体方向的确定 还要综合考虑节能 环保 以及稳定性和经济性等各种因素 因此需要花费大量的时间 硬件的选取最为重要 包 括选用的芯片 显示设备的选取 输入设备的选取等 本设计是通过单片机来实现的 因此选用了 ATMEGA16 单片机作为主体 输入设备选用矩阵键盘 程序是硬件的灵魂 是 实现设计的中心环节 本设计使用的程序语言是 C 语言 在 ICC AVR 中运行 调试 直到运行出正确结果 然后输出后缀名为 HEX 格式的文件 以备在 Protues 中仿真使用 程序是设计的关键 程序的调试需要大量的时间 耐心 还够要有足的细心才能成功 本设计中就出现了大量的错误 经过认真修改 最终才能运行出正确结果 最后的系统 仿真是设计是否成功的验证 是设计不可缺少的重要环节 这就要求能掌握 Protues 的 一些基本操作 2 原理分析 2 1 矩阵键盘的扫描 M1 SW PB M2 SW PB M3 SW PB M4 SW PB M5 SW PB M6 SW PB M7 SW PB M8 SW PB M9 SW PB M10 SW PB M11 SW PB M12 SW PB M13 SW PB M14 SW PB M15 SW PB M16 SW PB PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 武汉理工大学 单片机 课程设计说明书 2 图 2 1 矩阵键盘图 如图 2 1 所示 单片机的 8 个 I O 口和矩阵键盘相连 用 8 个 I O 口来控制矩阵键 盘的 16 个按键是非常有意思的 首先我们设置单片机的 PD0 PD7 为输出 且 PD0 PD3 依次设置为低电平 而 PD4 PD7 设置为高电平 然后我们设置 PD4 PD7 为输入 而 PD0 PD3 仍然为输出 假如此时 M1 键按下 则 PD0 与 PD4 相连 因为 PD0 是低电平 而 PD4 是输入 所以 PD4 会被拉为低电平 同理 如果 M2 被按下 则 PD5 会被拉低 M3 按 下 PD6 会被拉低 M4 按下 PD7 被拉低 这是判断有无键盘按下的过程 当我们判断是 那一个键盘按下时 我们首先设置 8 个 I O 口为输出 输出为 FE 即 PD0 为低电平 其 他全为高电平 然后我们设置 PD4 PD7 为输入 如果 M1 被按下 则 PD4 会比被拉为低 电平 此时会变成 EE 同理可以知道 M2 被按下时会变为 DE M3 被按下时会变为 BE M4 被 按下时会变为 7E 同理我们可以设置 8 个 I O 口输出 FD 来检测 M5 M8 是否被按下 设 置 8 个 I O 口输出 FC 来来检测 M9 M12 设置 8 个 I O 口输出 F7 来检测 M13 M16 如果 M1 M4 没有被按下 就继续检测 M4 M8 一次类推 就可以检测出 16 个按键了 在这次 设计中 16 个按键 M1 M16 所对应检测值分别为 EE DE BE 7E ED DD BD 7D EB DB BB 7B E7 D7 B7 77 2 2 数字显示与计算 本次设计选用的显示器是1602液晶显示器 此液晶显示器能显示32个字符 VSS接 地 VDD接电源正极 E为时使能信号 R W为读写选择端 H L RS为数据 命令选择端 H L D0 D7为数据I O口 首先我们初始化液晶显示器 然后显示出第一个被按下的数 并且使光标右移 如 果有第二个数按下 则据继续显示 以此类推 然后把所有显示出来的数换算成一个数 如果按下 号 则显示出 并且同理显示出 号后面按下的数字 然后调用 加子程序 运算出结果 如果按下的是 则调用减子程序 如果按下 则调用 乘子程序 如果按下 则调用除子程序 然后再调用显示结果子程序 显示出结果 武汉理工大学 单片机 课程设计说明书 3 3 程序设计与说明 3 1 流程图 主程序流程图和运算子程序流程图为 图 3 1 主程序流程图 图 3 2 运算子程序流程图 开始 显示Welcome 是否按键按下 是否是 是否是 是否是ce清屏 显示数字 显示 计算 结束 是 否 是 是 否 否 否 是 开始 是否是 是否是 是否是 是否是 结束 Result c d Resule c d Resule c d Resule c d 武汉理工大学 单片机 课程设计说明书 4 键盘扫描流程图为 开始 延时10ms DDRD 0XFE 是否按键按下 PORTD 0XF0 DDRD 0X0F 是否是第一排 按键 DDRD 0XFD PORTD 0XF0 DDRD 0X0F 是否第二排按 键 DDRD 0XFB PORTD 0XF0 DDRD 0X0F 是否是第三排 按键 DDRD 0XF7 PORTD 0XF0 DDRD 0X0F 取当前状态 确定那个按键 结束 否 是 否 是 否 是 肯定是第四排按键 武汉理工大学 单片机 课程设计说明书 5 图 3 3 键盘扫描子程序流程图 3 2 程序说明 本次设计采用模块化设计思想 包括主程序和初始化子程序 延时子程序 输出数 据子程序 检测是否有按键按下子程序 确定按键子程序 清第二行屏与显示 Welcome 子程序 换算第一个数子程序 运算子程序 显示结果子程序等子程序 运 行程序后 首先调用子程序清屏第二行并显示 Welcome 然后检测是否有按键按下 如果没有 继续检测 如果按下 则判断是否是加减乘除键被按下 如果是加减乘除被 按下 则显示相应的字符并换算出字符前输入的数据和字符后输入的数字 然后检测是 否有等号按下 如果有则完成相应的运算并显示相应的结果 然后检测是否有清屏键按 下 如果有则清屏 相应的流程图如图 2 所示 其中运算子程序的流程图如图 3 所示 4 调试 4 1 Protues 系统仿真 打开 Protues 按设计思想放相应的零部件并连好线 把 HEX 文件加载到单片机中 运行 检测结果是否正确 硬件连线图如图 4 1 所示 武汉理工大学 单片机 课程设计说明书 6 图 4 1 Protues 仿真图 4 2 调式过程 编写完程序后保存程序 在 ICC AVR 中运行 调试 直到运行出正确结果 然后 输出后缀名为 HEX 格式的文件 刚开始有错误 是一些语法规则上的错误 不过经过几 次的修改 最终输出了后缀名为 HEX 格式的文件 把后缀名为 HEX 格式的文件加载到单片机后 刚开始只是显示出 Welcome 的一部 分字符 仔细观察发现 程序的前后空格不对称 经过修改 最终得到了预期结果 最 终运行结果如图 4 1 所示 5 总结 5 1 优缺点分析 本计算器能完成加减乘除运算 结构简单 硬件较少 成本较低 另外本程序采用 模块化设计思想 可读性强 具有很强的可移植性 便于调用 在处理多任务时 可以 用中断服务来实现多线程 通过设置中断 启动中断服务子程序使其自己执行任务 而 CPU 可以做自己的工作 当有停止中断的请求产生时 CPU 再停下自己的工作做相应处 理 但是也有很多不足之处 首先 程序有很多相同的代码 本来可以用调用的方法实 现 减少代码长度 但是考虑到本程序不是很长 而且用调用的方法必然会增加算法的 复杂度和逻辑思维强度 所以在这里没有采用 其次 为了节省空间 程序设计的注释 部分不够详细 使读程序不是很方便 再次 本计算器不能完成小数运算 也不能完成 科学计算器的一些功能 而要完成这些功能 需要设置更多的键盘 加更多的程序 比 较复杂 因为我时间有限 在此不再处理 5 2 心得体会 通过课程设计 我掌握了计算器的工作原理以及设计方法 我通过对计算器的几 个模块的深入理解 我掌握了计算器的组成和制作过程 并通过自己的努力 制作出了 自己的计算器 提高了我的动手能力和实践能力 同时我对单片机有了更深入的理解 也学会了使用单片机的方法 加深了对课本知识的进一步理解 加强了我思考和解决问 武汉理工大学 单片机 课程设计说明书 7 题的能力 认识来源于实践 实践是认识的动力和最终目的 实践是检验真理的唯一标 准 在设计过程中 经常会遇到一些问题 就是心里想老着这样的接法可以行得通 但 实际接上电路 总是实现不了 所以这几天不管是吃饭还是睡觉 脑子里总是想着如何 解决这些问题 功夫不负有心人 我通过认真思考 请教同学 查找资料 最后终于熟练 掌握了基本理论知识 而且领悟诸多平时学习难以理解掌握的较难知识 学会了如何思 考的思维方式 找到了设计的灵感 在寻找答案的过程中 我学到了很多平时缺少的东西 对于理论知识学习不够扎实的我深感 书到用时方恨少 认真思考才能找到出路 当初没有思路 诚如举步维艰 茫茫大地 不见道路 在 对理论知识梳理掌握之后 茅塞顿开 柳暗花明 思路如泉涌 高歌 条条大路通罗马 顿悟 没有思考便无出路 雨后才能见彩虹 失败是成功之母 不经历多次调试 是不可能得到完好的程序的 至善至美 是人 类永恒的追求 但是 不从忘却 金无足赤 人无完人 我们换种思维方式 去恶亦 是至善 改错亦为至美 在课程设计过程中 我们不断发现错误 不断改正 不断领悟 不断获取 最终的调试环节 本身就是在践行 过而能改 善莫大焉 的知行观 实践课诚然是一门专业课 给我很多专业知识以及专业技能上的提升 同时又是一 门讲道课 一门思辨课 给了我许多道 给了我很多思 给了我莫大的空间 至于建议 一言以蔽之 大学教育当如此 我是一个急性子的人 看到那么复杂知识 我就不想做了 不过为了搞好课程设计 我硬是耐心完成每一个细节 我坚持一天呆在实验室 10 多个小时 虽然晚上眼睛比较酸 痛 但是我感觉值 这么多天的努力没有白费 我最后很好的完成了任务 很有成就感 我相信我在以后的生活和学习中会更耐心 更认真的 武汉理工大学 单片机 课程设计说明书 8 参考文献 1 陈冬云 等 ATmega 128 单片机原理与开发指导 机械工业出版社 2006 2 李群芳 等 单片微型计算机及接口技术 第二版 电子工业出版社 2005 3 周航慈 单片机程序设计基础 北航出版社 2005 4 何立民 MCS 51 单片机应用系统设计 北航出版社 2002 5 马潮 高档 8 位单片机 ATmega128 原理与开发应用指南 北京航空航天大学出版社 2004 武汉理工大学 单片机 课程设计说明书 9 附录 程序 include include include const unsigned char tab1 Welcome const unsigned char tab3 unsigned char key 10 unsigned int temp1 0 temp2 0 unsigned char count1 0 unsigned char wei void delay unsigned int ms unsigned int i j for i 0 i ms i for j 0 j 1141 j void int port DDRA 0XFF DDRB DDRB 0X07 PORTB DDRD 0XFF PORTD 0XFF 武汉理工大学 单片机 课程设计说明书 10 DDRD 0XF0 PORTD PORTD void com lcd unsigned char com PORTB PORTB PORTA com PORTB BIT PB0 delay 1 PORTB void data lcd unsigned char data PORTB BIT PB2 PORTB PORTA data PORTB BIT PB0 delay 1 PORTB unsigned char key press unsigned char i DDRD 0XFF PORTD 0XF0 武汉理工大学 单片机 课程设计说明书 11 DDRD 0X0F i PIND if i 0XF0 DDRD 0XFF 没键按下 return 0 else DDRD 0XFF 有键按下 return 1 unsigned char key scan 键检测 unsigned char key1 i 0X7F j delay 10 if key press do i i 7 PORTD i DDRD 0X0F key1 PIND j key1 while j 0XF0 while key press 武汉理工大学 单片机 课程设计说明书 12 switch key1 case 0 xEE key1 0 x0 break case 0 xDE key1 0 x1 break case 0 xBE key1 0 x2 break case 0 x7E key1 0 x3 break case 0 xED key1 0 x4 break case 0 xDD key1 0 x5 break case 0 xBD key1 0 x6 break case 0 x7D key1 0 x7 break case 0 xEB key1 0 x8 break 武汉理工大学 单片机 课程设计说明书 13 case 0 xDB key1 0 x9 break case 0 xBB key1 0 xA break case 0 x7B key1 0 xB break case 0 xE7 key1 0 xC break case 0 xD7 key1 0 xD break case 0 xB7 key1 0 xE break case 0 x77 key1 0 xF break default key1 16 else key1 16 武汉理工大学 单片机 课程设计说明书 14 return key1 void clear lcd unsigned char i com lcd 0 x01 清屏 delay 1 com lcd 0 x38 5 7 2 行显示 delay 1 com lcd 0 x06 文字不动 光标自动右移 delay 1 com lcd 0 x0C 开显示 delay 1 com lcd 0 x81 第一行首地址 delay 1 for i 0 i 16 i data lcd tab1 i delay 5 void clear lcd 2 清第二行 unsigned char i com lcd 0 xc0 delay 1 for i 0 i 16 i data lcd tab1 1 delay 1 unsigned int qushu unsigned char m 第一个数 武汉理工大学 单片机 课程设计说明书 15 unsigned char i unsigned int num unsigned int temp 0 wei m 1 位数 for i 1 i wei i if key i 9 num 0 else num key i 1 temp temp 10 num return temp unsigned int result unsigned int c unsigned int d 运算子程序 unsigned int result2 unsigned char k k key wei 1 switch k case 0 x0a result2 c d break case 0 x0b result2 c d break case 0 x0c result2 c d break case 0 x0d result2 c d default return result2 武汉理工大学 单片机 课程设计说明书 16 void disp result unsigned int result num 显示结果子程序 unsigned char aa 0 unsigned char i c unsigned int n result num clear lcd 2 com lcd 0 xc0 delay 1 data lcd tab3 14 com lcd 0 x04 delay 1 com lcd 0 xcf delay 1 if n 0 aa 1 while n 0 计算结果长度 n n 10 aa for i 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料采购日常管理制度
- 采购部部门奖惩制度
- 采购集中付款制度
- 采购食品验收管理制度
- 重庆非基本药物采购制度
- 钢构公司采购制度
- 社交媒体平台个体自滤把关研究-以微信为例
- 解决问题(例8)(课件)-2025-2026学年三年级下册数学人教版
- 2026年重庆二手房购房合同(1篇)
- 2025年5月17日合肥肥西县事业单位遴选面试真题及答案解析
- 挡土墙新建及土地回填平整投标方案(技术方案)
- T-CECS120-2021套接紧定式钢导管施工及验收规程
- JGJ+196-2010建筑施工塔式起重机安装、使用、拆卸安全技术规程
- 《创新创业基础》课件-模块四 创新成果保护与转化
- 燃料检修潜在风险与预控措施
- 中学生防震减灾知识
- 劳务合同模板电子下载
- 新安全生产法全文-安全生产法全文
- 麦积山石窟课件
- 分数百分数应用题的复习课件
- 开复工安全检查表
评论
0/150
提交评论