单片机实验报告 计算器讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机原理及其应用实验报告基于51单片机的简易计算器的设计

班级:12电子1班

姓名:金腾达

学号:1200401123

2015年1月6日

摘要

一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。

关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录

一、系统模块设计......................................................................................... 错误!未定义书签。

1.1 单片机最小系统 (1)

1.2 LCD1602液晶显示模块 (1)

1.3 矩阵按键模块 (2)

1.4 串口连接模块 (1)

二、C51程序设计 (2)

2.1 程序功能描述及设计思路 (2)

2.1.1按键服务函数 (2)

2.1.2 LCD驱动函数 (2)

2.1.3 结果显示函数 (2)

2.1.4状态机控制函数 (2)

2.1.5串口服务函数 (2)

2.2 程序流程图 (3)

2.2.1系统总框图 (3)

2.2.2计算器状态机流程转换图 (3)

三、测试方案与测试结果 (4)

3.1测试方案 (4)

3.3 测试结果及分析 (7)

4.3.1测试结果(仿真截图) (7)

4.3.2测试分析与结论 (7)

四、总结心得 (7)

五、思考题 (8)

附录1:整体电路原理图 (9)

附录2:部分程序源代码 (10)

基于51单片机的简易计算器的设计

一、系统模块设计

本系统主要由51单片机最小系统、串口模块、显示模块、矩阵键盘输入模块组成,下面分别论证这几个模块的选择。

1.1单片机最小系统

51单片机的最小系统包括电源、时钟电路、复位电路,搭建最小系统是实现单片操作的最基本的硬件电路要求。由于程序上需要使用串口工作在11920的波特率,为了更好地匹配该波特率,晶振采用11.0592MHz的晶振而不是常用的12MHz晶振。

1.2 LCD1602液晶显示模块

为了便于计算器的计算过程以及结果的显示,方案采用了LCD1602的液晶来显示。使用液晶比数码管的优势很多,占用较少的IO口、更低的功耗、更简单的控制过程、

更强大的显示能力:

1.3 矩阵按键模块

计算器的输入通过4X4的矩阵按键来实现,由于软件上做了相应的映射处理,因此该4X4按键可以实现在极少代码更改下随意安排每个按键的实际意义。矩阵按键通过行

列扫描的方式快速求出当前的按下按键并等待起弹起以防止重复触发:

1.4 串口连接模块

由于使用Proteus仿真,这里的串口电路进行了简化,没有使用实际中将会用于进

行电平转换的232芯片,而直接使用串口观察控件进行串口接收以及显示:

二、C51程序设计

由于本系统对系统的响应速度要求并不高,不需要进行高速的大量数据运算操作,因此不采用汇编方式编写程序。使用C语言编写程序能够清晰地分析系统的整体思路。本程序的主要思想是状态机,利用状态机的不同状态对程序的流程进行分段控制,在本系统中,较大限度的提高了系统的运行效率,同时具有了便于分析、改进和查错的天然优势

2.1程序功能描述与设计思路

2.1.1、按键服务函数:将4X4矩阵按键封装至按键服务函数中,利用映射表(数组)对4X4的对应按键进行键值映射,这样不仅仅完成了按键判断的函数封装更便于实际操作时对按键的定义的灵活改动,另外,按键的返回值采用ASCII码形式,这样更加利于程序上的可读性;

2.1.2、LCD驱动函数:按照LM016模块的操作时序编写的LM016(LCD1602液晶)的驱动函数,使用C和H文件组合的形式既完成了底层的液晶驱动又开放了操作液晶的接口函数,使整体程序更加清晰明了;

2.1.3、结果显示函数:由于计算结果涉及到小数点、负数以及长度的不确定性,这里直接通过调用stdio.h中的sprintf字符串格式化函数进行格式化,得到15个字符长度的ASCII形式数据显示,并在程序中进行范围限定以避免数据过大而产生显示不完整造成结果“不正确”的现象。同时该函数还通过调用串口输出函数对单片机串口进行输出,可在计算机上位机端得到每次的计算结果信息;

2.1.4、状态机控制函数:该函数直接在main函数的内部实现,并融合状态机的程序思想,利用状态机判断计算器输入时的各种可能状态并在不同程序状态中跳转实现灵活的程序流程控制,实践表明这种方式是非常适合计算器的程序设计的,能较大限度地提高系统的运行效率;

2.1.5、串口服务函数:串口服务主要负责实现单片机向计算机上位机端的数据结果输出以及灵活的字符串显示。

2.2 程序流程图

2.2.1、系统总框图

2.2.2、计算器状态机流程转换图

三、仿真方案与仿真结果

3.1仿真方案

1、硬件仿真

使用Proteus7.8进行硬件仿真。

2、软件仿真

使用Keil4For51 Debug工具进行软件编写和仿真

3、硬件软件联调

利用Proteus7.8和Keil4进行联合软硬件调试,方便查错和仿真展现3.2 测试结果及分析

3.2.1测试结果(仿真截图)

1、加、减、乘、除基本运算展示:

相关文档
最新文档