基于单片机的计算器课程设计报告_第1页
基于单片机的计算器课程设计报告_第2页
基于单片机的计算器课程设计报告_第3页
基于单片机的计算器课程设计报告_第4页
基于单片机的计算器课程设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、昆明理工大学课程设计报告设计名称:单片机计算器课程设计姓 名:学 号:2011118521XXX专业班级:测控技术与仪器 1111院(系):信息工程设计时间:2013年 6 月 21日设计地点:昆明理工大学 德信楼目录一、题目二、任务与要求三、课程设计及整体方框图a. .总体设计思路简述 b. 硬件设计简述 c. 软件设计简述 d. 程序主流程图 四、课程设计原理分析及相关知识概述五、结论六、体会与收获附件:1、源程序代码(根据需要选择)2、整体电路原理图(根据需要选择)2、元件表(根据需要选择)3、实验操作(根据需要选择)、题目使用单片机芯片 AT89C51、LCD1 602 液晶显示屏,用

2、 KEIL uVision 与 porteus 仿真软件实现简易计算器的仿真与调试。 设计制作一个计算器, KEYPAD4 *4 键 盘输入,用 LCD显示计算数值及结果。、任务与要求 要求计算器能实现加减乘除四种运算,具体如下: 1. 加法:多位数加法,计算结果不超过 8 位则显示计算。 2. 减法:多位整数减法,计算结果可以算小于零则显示计算。 3. 乘法:多位整数乘法,计算结果若超过 8 位则显示计算4. 除法:整数除法,可以算出小数点 3 位。5. 有清除功能三、课程设计简述及整体方框图1. 总体设计思路简述按照系统设计的功能的要求, 初步确定设计系统由主控模块、 显示模块、 键 扫描

3、接口电路共三个模块组成,电路系统构成框图如图 1.1 所示。主控芯片使用 AT89C51 单片机, 功能更强,由先进工艺制造,并带有非易失性 Flash 程序存 储器。它是一种高性能、低功耗的 8 位 COMS 微处理芯片,市场应用最多。 键盘电路采用 4*4 矩阵键盘电路。显示模块采用 1 枚LCD 1602 与 RES-V 构成器件构成。2硬件设计简述单片机最小系统就是支持主芯片正常工作的最小电路部分, 包括运算器 . 控制器. 存储器, 输入输出设备构成 .主控芯片选取 AT89C51 芯片,因其具有良好的性能及稳定性,价格便宜应 用方便。晶振选取 11.0592MHz,晶振旁电容选取

4、22pF。 采用按键清零电路, KEYPAD 4*4 C.键盘接口电路计算器所需按键有:数字键: 1,2,3,4,5,6,7,8,9,0功能键: +, - , *, / , = , C( 清零)共计 16个按键,采用 4*4 矩阵键盘,键盘的行和列之间都有公共端相连, 四行和四列的 8 个公共端分别接 P3.0P3.7,这样扫描 P3 口就可以完成对矩阵键 盘的扫描,通过对 16个按键进行编码, 从而得到键盘的口地址, 对比 P3口的扫 描结果和各按键的地址, 我们就可以得到是哪个键按下, 从而完成键盘扫描的功LCD 显示电路采用 LCD 对计算数据和结果的显示,动态扫描。为了实现 LCD 的

5、动态显示, P0口输出显示值, 通过 P0口的二进制代码送到 LCD 进行显示。3. 软件设计简述键盘扫描子程序设计要进行数据的计算就必须先进行数据的输入, 也就必须确定按键输入的数值 是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。对于键盘的扫描, 这里采用行列扫描的方法来完成对键盘的扫描。 原理就是 先确定按键在哪一行, 接着再确定是哪一列, 这样就可以知道是哪个按键被按下 了。我是将 P3 口作为按键扫描口的,比如开始先给 P3 口设置,每个按键都会 有一个对应的十六进制值, 我把它们列出来进行一一对应就行了, 下面是扫描按 键图。以下为键盘扫描子程序的程序清单。uchar c

6、ode table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1= 7,8,9,0x2f-0x30, 4,5,6,0x2a-0x30,1,2,3,0x2d-0x30, 0x01-0x30,0,0x3d-0x30,0x2b-0x30;LCD 显示电路 采用 LCD 1602 对计算数据和结果的显示, P0 口进行输出显示, D0D7 口接 P0.0P0.7 口,RW接 P2.0,RS 接P2.4,E 接 P2.3.LCD2LM032L1 2 3 4 5 6 7 8 9 10 1 21 31 41void delay(uchar z) / 延迟

7、函数 uchar y;for(z;z0;z-)for(y=0;y110;y+);void check() / 判断忙或空闲doP0=0xFF;rs=0; /指令rw=1; / 读lcden=0; / 禁止读写delay(1); /等待,液晶显示器处理数据lcden=1; / 允许读写while(busy=1); / 判断是否为空闲, 1为忙,0 为空闲void write_com(uchar com) / 写指令函数P0=com; /com 指令付给 P0 口rs=0;rw=0;lcden=0;check();lcden=1;void write_date(uchar date) / 写数据函

8、数P0=date;rs=1;rw=0;lcden=0; check();lcden=1;void init() / 初始化 num=-1;lcden=1; /使能信号为高电平write_com(0x38); /8 位,1 行write_com(0x0c); / 显示开,光标关,不闪烁 */ write_com(0x06); / 增量方式不移位 显竟獗暌贫 柚 write_com(0x80); / 检测忙信号write_com(0x01); / 显示开,光标关,不闪烁 num_1=0;i=0;j=0;a=0; /第一个参与运算的数b=0;/第二个参与运算的数c=0;flag=0; /flag 表

9、示是否有符号键按下, fuhao=0; / fuhao 表征按下的是哪个符号 除法子程序设计除 法的运算,可以显示小数点 3 位 write_com(0x04);i=0;c=(long)(float)a/b)*1000);while(c!=0)write_date(0x30+c%10);c=c/10;i+;if(i=3)write_date(0x2e);if(a/b=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;break;主程序见附录 14. 程序主框图四、课程设计原理分析及相关知识概述本次课程设计用的 AT89C51

10、具有速度快、功耗低、抗干扰强的特点,有多种 I/O 端口模式。 Vcc=5vU2XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WRP1.7P3.7/RD193918343292429302

11、5312861578AT89C512627121011345121314161738373635五、结论完成硬件和软件的设计和制作后, 进行系统的调试, 并处理不断 出现的问题。对于计算器的性能, 主要的衡量指标就在于计算的精度, 本次制作的 计算器性能情况如下:a. 加法运算: 8 位整数加法运算,和值不超过 99999,若超过上 限,则显示错误提示。b. 减法运算: 4 位正整数减法运算, 结果为正或负。c. 乘法运算:积不超过 999999 的整数乘法运算,若超出上限, 显示错误提示。d. 除法运算:整数除法,既计算结果为可显示小数。六、体会与收获单片机课程设计, 体会是单片机学的不够扎

12、实, 不会的很多啊, 当然这次的课程设计做计算器程序用的是 c 语言,不是课上初学的汇 编,所以很难适应,尽管大家都知道汇编编这个程序也很困难,但还 是互相学习,到处找资料看,问同学,所以我的软件主程序才能编译 成功,系统才能调试出结果。 很感谢那些热心教导我的同学和指导我 的老师。在软件方面,感觉困难更多一些,一开始真的很着急,毫无头绪 啊,一时间,百度,论坛,贴吧逛了个遍,找了很多资料,也参考了 同学的程序, 其中每一个子程序模块都认真去读, 去分析,化为己用, 最重要的按键扫描和显示程序, 还有包括加减乘除的运算程序, 还了 解了 c 语言在单片机编程中的一些特点,包括函数的声明和调用等

13、 等。而且在用 uvison 编译的时候出了很多问题,其中一个就是关于 头文件的,要加上“ #include ”,不仅如此,还要将有关 的文件覆盖在 uvison 安装路径下,这样头文件才有效啊,所以,一 开始找不出问题所在,极其郁闷。但是总的来说,软件设计能够把结 果调出来还是很激动的, 同时,我们还亲自动手试验箱进行操作, 在老师的帮助下得以突破,完美的结束了实训。附录 1 程序源代码#include/头文件#define uint unsigned int /#define uchar unsigned charsbit lcden=P23; / 定义引脚sbit rs=P24;sbit

14、 rw=P20;sbit busy=P07;char i,j,temp,num,num_1;long a,b,c;/a,第一个数 b,第二个数 c,得数float a_c,b_c;uchar flag,fuhao;/flag 表示是否有符号键按下, fuhao 表征按下的是哪个符号uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30, 0x01-0x30,0,0x3d-0x30,0x2b-0x30;void delay(

15、uchar z) / 延迟函数uchar y;for(z;z0;z-) for(y=0;y0)c=a-b;elsec=b-a;while(c!=0) write_date(0x30+c%10); c=c/10;if(a-b0) write_date(0x2d);write_date(0x3d);/再写 =a=0;b=0;flag=0;fuhao=0;else if(fuhao=3)write_com(0x80+0xf);write_com(0x04);c=a*b; while(c!=0) write_date(0x30+c%10);c=c/10; write_date(0x3d);a=0;b=

16、0;flag=0;fuhao=0;else if(fuhao=4)write_com(0x80+0xf);write_com(0x04);i=0;c=(long)(float)a/b)*1000);while(c!=0) write_date(0x30+c%10); c=c/10;i+;if(i=3)write_date(0x2e);if(a/b=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;break;case 15:write_date(0x30+table1num);flag=1;fuhao=1;break;main

17、()init();while(1)keyscan();附录 2 protues 仿真图LCD1LM032LU119 XTAL118XTAL2RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7293031PSEN ALE EAP2.0/A8P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A151KRES-VAR393836353433212526282345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/

温馨提示

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

评论

0/150

提交评论