收藏 分享(赏)

单片机课程设计报告(简易计算器).doc

上传人:精品资料 文档编号:8418207 上传时间:2019-06-25 格式:DOC 页数:32 大小:1.70MB
下载 相关 举报
单片机课程设计报告(简易计算器).doc_第1页
第1页 / 共32页
单片机课程设计报告(简易计算器).doc_第2页
第2页 / 共32页
单片机课程设计报告(简易计算器).doc_第3页
第3页 / 共32页
单片机课程设计报告(简易计算器).doc_第4页
第4页 / 共32页
单片机课程设计报告(简易计算器).doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、- 1 -简易计算器摘 要:计算器是人们的日常生活中是最常见的电子产品之一,它应用极广、发展迅猛,并且不断出现着拥有更加强大功能的计算器。为了解和研究计算器,本次课设设计制作了一个简易计算器,能够在十四位的计算范围内进行“+” 、 “-”、 “*”、“/”的基本运算,能进行负数以及小数点后两位的精确结果显示。该计算器以 AT89C51 单片机芯片作为核心。采用 LCD1602工业字符液晶进行显示。完成的计算器经过检验能够完整的实现预设功能,各种细节完善,具有很高的使用价值。关键词:单片机;简易计算器;AT89C51;LCD1602- 2 -Simple CalculatorAbstract :

2、Calculator is Peoples Daily life is one of the most common electronic products, used very wide, developing rapidly, and constantly appear more powerful function with have calculators. In order to understand and study calculator, this class set design made a simple calculator, can the calculation in

3、within 14 “+“ and “-“ and “*“, “/“ the basic computing, can carry out negative and two decimal places accurate results are shown. This calculator with AT89C51 chips as the core. Using liquid LCD1602 industrial characters displayed. Complete calculator after inspection can complete realization, vario

4、us details preset functions to perfect, have high use value.Keywords:MCU; Simple calculator;AT89C51;LCD1602- 3 -目录中文摘要 1英文摘要 2单片机课程设计 41 课程设计任务 41.1 主要功能设计 41.2 任务目的 42 整体设计方案 42.1 方案论证 42.2 系统框图 53 硬件电路的设计 6 3.1 计算机 Protel 总图 63.2 显示电路设计方案 93.3 键盘设计方案 93.4 复位电路设计 103.5 晶振电路设计 104 控制软件设- 4 -计 11 4.1

5、 程序时序总图 114.2 液晶显示软件设计 124.3 键盘输入软件设计 134.4 计算函数设置 155 系统调试 185.1 硬件调试 185.2 软件调试 18参考文献 20个人小结 21附录 24附录1 24附录2 251 课程设计任务1.1 主要功能设计以 AT89C51 单片机芯片为核心来制作一个简易计算器,外部由 4*4 矩阵键盘和一个 LCD1602 工业字符型液晶显示屏构成,内部由一块 AT89C51 单片机构成,通过软件编程可实现简单加减乘除。1.2 任务目的通过本次课程设计提高我们的单片机硬件设计、软件编程能力,自主学习到更多的单片机应用知识。- 5 -2 整体设计方案

6、2.1 方案论证计算器电路包括三个部分:显示电路、4*4 键扫描电路、单片机微控制电路。具体如下:(1)LCD显示电路LCD1602 作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合 LCD 本身的时序图来完善初始化程序。又以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,故采用LCD.(2)4*4键盘扫描电路一般常采用 3 种方法读取键值。一种是中断式,外两种是扫描法和反转法。中断式:在键盘按下时产生一个外部中断通知 CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个案件被按下。本实验采用中断式实现用户键盘接口。扫描法:对键盘上的

7、某一行送低电平,其他行为高电平,然后读取列值。若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。反转法:先将所有行扫描线输出低电平,读列值。若列值有一位是低,则表明有键按下,读列值;然后所有列扫描线输出低电平,再读行值。根据读到的值组合就可以查表 1 得到的键码。因为编程的方式,本次设计采用逐行扫描来读取键值,方便程序编写。(3)单片机微控制电路:微控制电路就是以 AT89C51 为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。2.2 系统框图- 6 -51 系列单片机系统4*4 键盘LCD 显示晶振电路复位电路系统框图2.13 硬件电路的设计3.1 计算机

8、Protel 总图- 7 -简易计算器电路原理图1.13.2 显示电路设计方案LCD1602 型液晶(1) 显示特性 单 5V 电源电压,低功耗,长寿命,可靠性高 内置 192 种字符(160 个 5*7 点阵字符和 32 个 5*10 点阵字符)- 8 - 具有 64 个字节的自定义字符 RAM,可自定义 8 个 5*8 点阵字符 或四个 5*11 点阵字符 显示方式:STN、半透、正显 驱动方式:1/16DUTY,1/5BIAS 视角方式:6 点 背光方式:底部 LED 通讯方式:4 位或 8 位并口可选 标准的接口特性,适配 MC51 和 M6800 系列 MPU 的操作时序(2) 接口

9、定义引脚 符号 功能说明1 VSS 一般接地2 VDD 接电源(+5V)3 V0 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影” ,使用时可以通过一个 10K 的电位器调整对比度) 。4 RS RS 为寄存器选择,高电平 1 时选择数据寄存器、低电平 0 时选择指令寄存器。5 R/W R/W 为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6 E E(或 EN)端为使能(enable)端,下降沿使能。7 DB0 底 4 位三态、 双向数据总线 0 位(最低位)813 DB1DB6 底 4 位三态、 双向数据总线 16 位14 D

10、B7 高 4 位三态、 双向数据总线 7 位(最高位) (也是 busy flag)(3)寄存器选择控制表RS R/W 操作说明- 9 -0 0 写入指令寄存器(清除屏等)0 1 读 busy flag(DB7) ,以及读取位址计数器(DB0DB6)值1 0 写入数据寄存器(显示各字型等)1 1 从数据寄存器读取数据(4)液晶显示电路接线图本次设计中 15,16 号脚分别接电源接地开启背光,DB0DB7 对应 P1 口,2号脚接电源,1 和 3 脚接地。3.3 键盘设计方案12mm*12mm*8mm 规格 4*4 矩阵排布键盘(1)按键设置图- 10 -共设置 16 个键,其中数字键 09 共

11、十个,符号健有加号键、减号键、等于号、清除键。操作设备是四行四列共 16 键的简单键盘。其分布如图所示。(2)按键功能19 为数字输入;ON/C 为清除健;“+“、“-“、“*“、“、“=“为符号输入;(3)键盘连接图- 11 -键盘对应连接如图所示,接单片机 P3 口,在焊接过程中要注意短接虚焊,同时 P3 口接入 510 欧电阻进行上拉。3.4 复位电路设计途中的 RC 为延时电路,只要 RST 端出现 2 个机器周期的高电平就可以使单片机复位,单片机复位后 RST 端出现低电平。3.5 晶振电路设计单片机内部设有一个反向放大器构成的振荡器,18 脚和 19 脚分别为振荡电路的输入和输出端

12、,时钟由内部产生,定时器件为石英晶体和电容组成的并联谐振回路,电容 C2,C3 取值在 5-30PF;Y1 的取值在 1.212M 之间选取。- 12 -4 控制软件设计:设计中采用 C 语言对单片机进行编程,采用的是自下而上的设计方式,先设计出每一个模块(子程序) ,然后再慢慢扩大,最后组成程序。4.1 程序总时序图- 13 -4.2 液晶显示软件设计(1)显示流程- 14 -液晶初始化调用显示数字程序液晶显示结束开始(2)1602 液晶显示时序图,通过时序图,所有编程问题都可以得以解决。(3)由时序图可以写出液晶的初始化函数、功能设置函数、清屏函数、写指令函数、写数据函数。void lcd

13、1602_write_com(uchar com) /向 1602 写入命令P1=com;rs=0;rw = 0;lcden=0;lcd1602_delay(10);lcden=1;lcd1602_delay(10);lcden=0;- 15 -void lcd1602_pos(uchar x,uchar y) /1602 定位 uchar pos;if (x=0)x=0x80;else if (x=1)x=0xc0;pos = x+y ; lcd1602_write_com(pos); /显示地址void lcd1602_write_date(uchar date) /向 1602 写入数据

14、P1=date;rs=1;rw=0;lcden=0;lcd1602_delay(10);lcden=1;lcd1602_delay(10);lcden=0;void lcd1602_write_str(uchar *p) /向 1602 写入一个字符串while(*p!=0)lcd1602_write_date(*p);p+;void lcd1602_init() /1602 初始化rw=0;lcd1602_write_com(0x38);lcd1602_delay(20);lcd1602_write_com(0x0c);lcd1602_delay(20);lcd1602_write_com(

15、0x06);lcd1602_delay(20);lcd1602_write_com(0x01);lcd1602_delay(20);4.3 键盘输入软件设计(1)键盘输入程序运行时序图- 16 -(2)键盘扫描程序void keyscan() / 键盘扫描程序P3=0xfe; /1111 ,1110,为 0 扫描 先扫描的第一行if(P3!=0xfe) delay(5);if(P3!=0xfe) /防抖动过程temp=P3switch(temp)case 0xe0:num=0;break;case 0xd0:num=1;break; case 0xb0:num=2;break;case 0x7

16、0:num=3;break;while(P3!=0xfe);if(num=0|num=1|num=2)/如果按下的是7,8或9 - 17 -if(j!=0) lcd1602_write_com(0x01);j=0;if(flag=0)/没有按过符号键a=a*10+tablenum; /将计算符号前输入的数存入 aelse/如果按过符号键b=b*10+tablenum; /将计算符号后输入的数存入 aelse/如果按下的是 /flag=1;fuhao=4; /4 表示除号已按i=table1num;lcd1602_write_date(0x30+i); /显示在屏幕上P3=0xfd;.4.4 计

17、算函数设置因为只有 16 个健,所以计算上只设计了加减乘除的功能,下面是几个计算程序的关键部(1)加法部分j=1;if(fuhao=1)lcd1602_pos(1,16); /按下等于键,光标前进至第二行最后一个显示处 lcd1602_write_com(0x04);/设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; /相加后进行值的大小判定if(c=-999999999999)else c=b-a;if(c=-99999999) flag=1;break;elsekeyvalue+=4;keyscan=keyscan#define uint unsigned int#defin

18、e uchar unsigned charsbit lcden=P20;sbit rs=P22;sbit rw=P21;sbit busy=P17;char i,j,temp,num;long a,b,c; uchar 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 lcd1602_delay(uint x);void

19、lcd1602_write_str(uchar *p);void lcd1602_write_com(uchar com);void lcd1602_delay1(uint x);void lcd1602_pos(uchar x,uchar y);void lcd1602_write_date(uchar date);void lcd1602_init();void lcd1602_delay(uint x)uint a,b;for(a=x;a0;a-)for(b=10;b0;b-); void lcd1602_delay1(uint x)uint a,b;for(a=x;a0;a-)for(

20、b=100;b0;b-); void lcd1602_write_com(uchar com) /向 1602 写入命令P1=com;rs=0;rw = 0;lcden=0;lcd1602_delay(10);- 25 -lcden=1;lcd1602_delay(10);lcden=0;void lcd1602_pos(uchar x,uchar y) /1602 定位 uchar pos;if (x=0)x=0x80;else if (x=1)x=0xc0;pos = x+y ; lcd1602_write_com(pos); /显示地址void lcd1602_write_date(uc

21、har date) /向 1602 写入数据P1=date;rs=1;rw=0;lcden=0;lcd1602_delay(10);lcden=1;lcd1602_delay(10);lcden=0;void lcd1602_write_str(uchar *p) /向 1602 写入一个字符串while(*p!=0)lcd1602_write_date(*p);p+;void lcd1602_init() /1602 初始化rw=0;lcd1602_write_com(0x38);lcd1602_delay(20);lcd1602_write_com(0x0c);lcd1602_delay(

22、20);lcd1602_write_com(0x06);lcd1602_delay(20);lcd1602_write_com(0x01);lcd1602_delay(20);num=-1;lcden=1; /使能信号为高电平i=0;j=0;a=0; /第一个参与运算的数b=0; /第二个参与运算的数c=0;- 26 -flag=0; /flag 表示是否有符号键按下, fuhao=0; / fuhao 表征按下的是哪个符号void delay(uchar z) / 延迟函数uchar y;for(z;z0;z-)for(y=0;y=-99999999)else c=b-a;if(c=-99999999)&(c=99999999)while(c!=0)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报