简易计算器设计-msp430-C语言_第1页
简易计算器设计-msp430-C语言_第2页
简易计算器设计-msp430-C语言_第3页
简易计算器设计-msp430-C语言_第4页
简易计算器设计-msp430-C语言_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

简易计算器设计报告 1 简易计算器简易计算器 简易计算器设计报告 2 目录 摘要 P3 关键字 P3 1 设计要求 P3 2 方案论证与选择 P3 2 1 单片机选择 P3 2 2 LCD 显示屏选择 P3 2 3 键盘选择 P4 2 4 CPU 工作方式选择 P4 3 系统实现 P4 3 1 硬件设计 P4 3 1 1 系统框图 P4 3 1 2 盘的电平设计以及与单片机的连接键 P5 3 2 3 单片机与显示器的连接 P5 3 2 软件设计 P6 4 作品性能测试与分析 P10 4 1 试性能概览 P10 4 2 误差分析 P12 五 参考文献 P12 六 附录 P13 6 1 计算器功能介绍 P13 6 2 仿真电路图 P13 6 3 元件清单 P13 6 4 原程序代码 P14 简易计算器设计报告 3 摘要摘要 本设计以低功耗单片机 MSP430V136T 1602 字符型液晶屏和 4 4 简 易键盘为主要器件 来实现加 减 乘 除 开根号 平方 求倒数等运算 设计中分别采用 P1 口低 4 位和 P2 口低 4 位与键盘的行列线相连 用于采集中 断信号并分析键值 键盘规格为 4 4 由于所需的功能键数大于 16 因此需要 进行按键复用 单片机的 P3 口连接显示器的 D0 D7 端 用于输出显示数据或 控制命令 选用 P4 口中的 3 4 和 5 口用于实现显示屏的控制功能 使能 控 制 数据选择端 读 写 本设计的软件部分采用中断方式获取键值 空闲时单片 机处于休眠状态 极大地减小了单片机的功耗 关键字 关键字 计算器 MSP430F2274 单片机 LCD1602 显示屏 键盘 1 设计要求 基本功能要求 输入两个 2 位十进制数 完成 开方运算 扩展功能要求 可在完成基本功能的基础上参照实际计算器完成 功能不 限 二 方案论证与选择 2 1 单片机选择 本设计采用的是 MSP430F2274 单片机 MSP430 是德州公司新开发的一类 具有 16 位总线的带 FLASH 的单片机 由于其性价比和集成度高 受到广大技术 开发人员的青睐 它采用 16 位的总线 外设和内存统一编址 寻址范围可达 64K 还可以外扩展存储器 具有统一的中断管理 具有丰富的片上外围模块 片内有精 密硬件乘法器 两个 16 位定时器 一个 14 路的 12 位的模数转换器 一个看 门狗 4 路 P 口 16 个外部中断 两路 USART 通信端口 一个比较器 一个 DCO 内部振荡器和两个外部时钟 支持 8M 的时钟 由于为 FLASH 型 则可以在 线对单片机进行调试和下载 且 JTAG 口直接和 FET FLASH EMULATION TOOL 的相连 不须另外的仿真工具 方便实用 而且 可以在超低功耗模式下工作 对环境和人体的辐射小 测量结果为 100mw 左右的功耗 电流为 14mA 左右 可 靠性能好 加强电干扰运行不受影响 在软件方面 MSP430 单片机适合 C 语言开发 具有如下优点 1 可以大 大提高软件开发的工作效率 2 可以提高所设计的程序代码的可靠性 可读性 和可移植性 3 设计者可以将注意力更多地集中在充分发挥 MSP430 的功能上 2 2 LCD 显示屏选择 本设计采用的是 1602 液晶显示屏 在单片机系统中应用晶液显示器作为输 出器件有以下几个优点 1 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度 恒定发光 而不像阴极射线管显示器 CRT 那样需要不断刷新新亮点 因此 液晶显示 器画质高且不会闪烁 2 数字式接口 液晶显示器都是数字式的 和单片机系统的接口更加简单可靠 操作更加方便 简易计算器设计报告 4 3 体积小 重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的 在重量 上比相同显示面积的传统显示器要轻得多 4 功耗低 相对而言 液晶显示器的功耗主要消耗在其内部的电极和驱动 IC 上 因而耗电 量比其它显示器要少得多 2 3 键盘选择 本设计只需实现 开根号等基本功能 所以使用 4 4 的简易键 盘即可 对于附加功能 通过简单点的按键复用 即可实现 2 4 CPU 工作方式选择 查询方式 在这种工作方式下 当 CPU 执行完初始化程序后 便通过不断 地查询端口值来判断是否有键按下 若有则跳转去执行相关的键值分析或数值 计算及显示程序 执行完毕 继续回到主程序继续不断查询 中断方式 在此工作方式下 CPU 无需查询 在执行完中断程序后 通过 一条指令使得单片机进入休眠状态 当有键按下时 则跳转去执行中断程序 执行完毕 继续回到主程序休眠 本设计选择中断方式 由于本设计为单任务 中断方式的高效性未能体现 但是通过中断方式 我们可以让单片机在空闲的时候进入休眠状态 这样可以 极大地减少其消耗 3 系统实现 3 1 硬件设计 3 1 1 系统框图 系统的逻辑框图如下图所示 3 2 2 键盘的电平设计以及与单片机的连接 键盘的每个按键都有它的行值和列值 行值和列值的组合就是识别这个按 键的编码 矩阵的行线和列线分别通过两并行接口和 CPU 通信 键盘的一端 简易计算器设计报告 5 列线 通过电阻接 VCC 而接地是通过程序输出数字 0 实现的 键盘处理 程序的任务是 确定有无键按下 判断哪一个键按下 键的功能是什么 还要 消除按键在闭合或断开时的抖动 两个并行口中 一个输出扫描码 使按键逐 行动态接地 另一个并行口输入按键状态 由行扫描值和回馈信号共同形成键 编码而识别按键 通过软件 查出该键的功能 键盘的 8 个口分别与 430 单片机的 P1 和 P2 口的第四位相连 且 P1 口输 入 P2 口输出 二者结合 采用行扫描法确定按键 其与单片机的具体连接方 式如下图所示 3 2 3 单片机与显示器的连接 1602 液晶显示屏有 16 个接口 各口的符号及功能如下表 在本设计中 1 号 3 号和 16 号引脚并联后接地 2 号和 15 号脚并联接 5V 电平 3 号 4 号和 5 号三个控制端口分别与单片机的 P4 4 P4 5 和 P4 3 相接 分别实现上表中对应的功能 7 号 14 号口和单片机的 P3 0 P3 7 口 以实现数 据和命令的传输 具体连接入下图所示 简易计算器设计报告 6 3 2 软件设计 本设计的软件部分由多个模块组成 主程序 中断程序 键盘分析程序 单片机初始化程序 LCD 初始化程序 延时程序 测试 LCD 是否忙碌 写入 指令数据到 LCD 设定显示位置 写入字符显示数据到 LCD 等 下面将对这 些模块的功能一一讲解 并将画出主要模块的流程图 主程序 主程序首先调用一些子程序来完成单片机初始化 显示器初始化 显示器清屏 显示器显示方式的设置 确定起始显示位置等 接着显示 Welcome 延时一段时间后清屏 然后打开中断 最后进入休眠状态 等待 按键中断 整个过程的流程图如下图所示 简易计算器设计报告 7 中断程序 中断程序的架构如流程图所示 其中运算和显示功能由于篇幅 限制 没有在图上给出 由于本设计中共有 7 种运算 我们在检测到运算符时 用 FLAG 对其进行标志 在接下来的运算中 即根据标志进行相关计算 显示 分为整数显示和实数显示 其中加 减 乘 平方中只涉及整数 而除 开方 和求倒数结果为实数 我们的程序将这两类结果分开显示 其中整数显示较简 单 这里不再叙述 对于实数的显示我们又分为两类 开方 除法 包含求倒 数 开方运算时 我们先用逼近法算出其值 然后进行显示 将结果乘以 10000 设其为 d 除以 10000 得整数部分显示 在显示小数点后 再用 d 对 10000 求余 将这个结果在小数点后显示 除法运算时则是先将操作数乘以 10000 再进行除法运算 最后再运用上面的显示方法 简易计算器设计报告 8 键盘分析 键盘分析程序是利用行扫描法来判断按键 首先由读 P1 0 P1 3 的值来判断被按下的列 接着使键盘上某一行线为低电平 而其余行接高电平 然后读取列值 如果列值中有某位为低电平 则表明行列交点处的键被按下 否则扫描下一行 直到扫描完全部的行线为止 最后在确定所按键后返回键值 整个过程的流程图如下 简易计算器设计报告 9 单片机初始化程序 void inot 该子程序实现了关开门狗 设定 DCO 频 率 设定各端口输入输出方向 清除中断标志 允许 P1 0 P1 1 P1 2 P1 3 中断并设置为上升沿中断 LCD 初始化程序 void lcd init 这段子程序主要实现三个功能 首先是 设置显示模式 即设置为 16 2 显示 5 7 点阵 8 位数据接口 接着进行显示 开 关及光标设置 本程序中设置为开显示 不显示光标 当读或写一个字符后 地址指针加一 且光标加一 写一个字符后整屏显示不移动 最后清除 LCD 显 示的内容 测试 LCD 是否忙碌 int lcd bz 该子程序的功能是测试 LCD 数据端时候 忙碌 首先使得 P3 口切换成输入模式 然后对 P3 口的数据进行运算判断 P3 7 是否为高来确定是否忙碌 最后返回判定值 写入指令数据到 LCD void lcd wcmd uchar cmd 该程序在被调用时首 先检测 LCD 是否忙碌 若不忙则设定 LCD 的控制方式 即将其设定为写命令 的方式 然后将要写的命令输出 再使能端 E 口输出一个正电平脉冲 即可完 简易计算器设计报告 10 成输出 设定显示位置 void lcd pos uchar pos 该程序中调用 lcd wcmd 子程 序写入数据的起始显示位置 写入字符显示数据到 LCD void lcd wdat uchar dat 和上面写指令数 据到 LCD 类似 这里只是将控制方式改成写数据的方式 4 作品性能测试与分析 4 1 测试性能概览 我们分别测试了系统具备的 7 中计算功能 加 减 乘 除 开方 平方 求倒数 测试结果如下图所示 加法 减法 简易计算器设计报告 11 乘法 除法 简易计算器设计报告 12 开方 平方 求倒数 4 2 误差分析 根据测试结果 开根号的运算产生了误差 在本设计中 经分析发现 这源于程序的算法问题 程序中采用逼近320 71319 713 法进行开方计算 并设定比较精度为 0 0001 当计算结果逼近至 1 7319 时 即 满足要求 若在程序中减小比较精度 则计算结果将更为精确 五 参考文献 1 MPS430 系列单片机 C 语言程序设计与开发 胡大可 编著 北京航空航天大学 出版社 2 C 程序设计 第三版 谭浩强 著 清华大学出版社 简易计算器设计报告 13 x 12 x 六 附录 6 1 计算器功能介绍 Clear 369 2580 147shift 键盘上各个按键所代表的含义如上图所示 我们将这 16 个键以行优先的方 法从左向右编号为 1 16 则 5 7 9 12 13 15 键为数字键 16 键位功能转换键 摁下后运算执行 1 4 键表格中斜线下方的功能 否则执行斜线上方的功能 6 2 仿真电路图 6 3 元件清单 简易计算器设计报告 14 元件清单 器 件 名 称型 号数 量 个 单片机 MSP430F22741 液晶显示器 1602LCD1 4 4 键盘 1 电阻 10K4 直流电源 5V1 下载线 1 排线排线若干 6 4 原程序代码 include include define uchar unsigned char define ep 1 P4OUT BIT3 define ep 0 P4OUT long int i k int key keyz keyzz key f1 key1 long int a d1 0 d2 0 d3 0 d5 0 d6 d 0 f 0 i n flag 0 flag1 0 flag2 0 flag3 0 flag4 0 flag5 0 flag6 0 flag7 0 flag8 0 h0 11 h1 25 h2 40 h3 0 h4 0 t1 0 t2 0 g void lcd wcmd uchar 函数声明 void lcd pos uchar void lcd wdat uchar void delay int ms void delayl int s int key pass int inot void double p2 double x 开方 y sqrt x z y 简易计算器设计报告 15 y y y if y x do z z 0 0001 y z z while y x return z else if y x return z else if y x do z z 0 0001 y z z while y x return z 测试 LCD 忙碌状态 int inot void 初始化 WDTCTL WDTPW WDTHOLD 关看门狗 BCSCTL1 CALBC1 16MHZ 设定 DCO 为 1MHZ DCOCTL CALBC1 16MHZ P1DIR 寄存器 决定对应口的的输入输出状态 P1DIR 0 xf0 将 P1 4 P1 5 P1 6 P1 7 设置为输出方向 P1OUT 0 x00 先输出低电平 P2DIR P2DIR 0 xFf 将 P2 0 P2 1 P2 2 P2 3 设置为输出方向 P3DIR 0 xff P3 输出 P3OUT 0 x00 P4DIR 0 xff P4 输出 P4OUT 0 x00 P1IE 0 P1IES 0 P1IFG 0 P1IE BIT0 P1IES BIT0 P1IE BIT1 P1IES BIT1 简易计算器设计报告 16 P1IE BIT2 P1IES BIT2 P1IE BIT3 P1IES BIT3 return 0 void delay int ms 延时 可能不要 while ms for i 0 i 16000 i void delayl int s while s delay 100 测试 LCD 忙碌状态 int lcd bz P3DIR int result 0 rs 0 rw 1 ep 1 result result P3IN ep 0 P3DIR 0 xff return result 写入指令数据到 简易计算器设计报告 17 LCD void lcd wcmd uchar cmd while lcd bz rs 0 rw 0 ep 0 P3OUT cmd ep 1 ep 0 delay 5 设定显示位置 void lcd pos uchar pos lcd wcmd pos 0 x80 delay 5 写入字符显示数据到 LCD void lcd wdat uchar dat while lcd bz rs 1 rw 0 ep 0 P3OUT dat ep 1 ep 0 LCD 初始化设定 void lcd init lcd wcmd 0 x38 function set delay 10 lcd wcmd 0 x38 function set delay 10 lcd wcmd 0 x0c display on off delay 10 简易计算器设计报告 18 lcd wcmd 0 x06 entry mode set delay 10 lcd wcmd 0 x01 清除 LCD 的显示内容 delay 10 int key pass 键盘分析 int keyz int key key P1IN switch key case 0 x0e delay 5 P2OUT BIT0 if P1IN if P1INbreak P2OUT BIT1 if P1IN if P1INbreak P2OUT BIT2 if P1IN if P1INbreak P2OUT BIT5 if P1IN if P1INbreak 简易计算器设计报告 19 break case 0 x0d P2OUT BIT0 if P1IN if P1INbreak P2OUT BIT1 if P1IN if P1INbreak P2OUT BIT2 if P1IN if P1INbreak P2OUT BIT5 if P1IN if P1INbreak break case 0 x0b P2OUT BIT0 if P1IN if P1INbreak P2OUT BIT1 if P1IN if P1INbreak 简易计算器设计报告 20 P2OUT BIT2 if P1IN if P1INbreak P2OUT BIT5 if P1IN if P1INbreak case 0 x07 P2OUT BIT0 if P1IN if P1INbreak P2OUT BIT1 if P1IN if P1INbreak P2OUT BIT2 if P1IN if P1INbreak P2OUT BIT5 if P1IN if P1INbreak 简易计算器设计报告 21 default keyz 16 break P2OUT return keyz pragma vector PORT1 VECTOR interrupt void PORT1 ISR void int key pass key key pass if key 14 flag6 1 else flag6 0 switch key case 0 lcd wdat 0 x30 写入字符显示数据到 LCD break case 1 lcd wdat 0 x31 break case 2 lcd wdat 0 x32 break case 3 lcd wdat 0 x33 break case 4 lcd wdat 0 x34 break case 5 lcd wdat 0 x35 break case 6 lcd wdat 0 x36 break case 7 lcd wdat 0 x37 break case 8 lcd wdat 0 x38 break 简易计算器设计报告 22 case 9 lcd wdat 0 x39 break case 10 if flag6 1 lcd wdat d 0 d2 d1 flag 3 else lcd wdat c flag 7 break case 11 if flag6 1 lcd wdat d 0 d2 d1 flag 2 else lcd wdat flag 6 break case 12 if flag6 1 lcd wdat d 0 d2 d1 flag 1 else lcd wdat flag 5 break case 13 if flag6 1 lcd wdat d 0 d2 d1 flag 0 else lcd wdat 0 xe8 flag 4 break case 14 简易计算器设计报告 23 lcd wdat 246 flag5 1 break default break if flag5 1 变功能 flag flag 4 if flag 7 lcd wcmd 0 x01 d 0 key1 0 flag flag1 flag2 flag3 flag4 flag5 flag6 0 i k 0 d1 d2 d3 d4 d5 0 if key 10 d key d 10 d1 d if d1 d2 if key 15 lcd wdat delay 5 flag6 1 lcd pos 0 x40 lcd wdat A A lcd wdat N N lcd wdat S S lcd wdat switch flag case 0 d3 d2 d break case 1 d3 d2 d break case 2 d3 d2 d break case 3 d4 d2 10000 d flag2 1 d3 d2 d d5 d2 d break case 4 d4 p2 d 简易计算器设计报告 24 flag2 0 break case 5 d3 d d flag2 0 break case 6 d4 10000 d flag2 1 break case 7 lcd wcmd 0 x01 d 0 key1 0 flag flag1 flag2 flag3 flag4 flag5 flag6 0 i k 0 d1 d2 d3 d4 d5 0 break default break if d3 0 f d3 lcd wcmd 0 x04 lcd pos 0 x4e whi

温馨提示

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

评论

0/150

提交评论