ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:651.06KB ,
资源ID:706645      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-706645.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的计算器论文.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的计算器论文.docx

1、基于51单片机的计算器论文摘 要近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。计算器是日常生活中比较的常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢。本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用44矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,并在LCD1602上显示操作过程。科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有

2、指数、对数、三角函数、反三角函数及存储等计算功能。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器,使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。关键词:计算器;LCD1602;89c51单片机第一章 设计要求与方案论证1.1 设计要求:1.显示上,相加结果显示要考虑进位的输出显示;输入加数和被加数(减数和被减数、乘数和被乘数、除数和被除数)时,显示器上显示的数字要像平时用的计算器输入一样。2.注意对“0”-“9”、“+”、“-”、“*”、“/”、“=”以外按键输入的处理。1.2 系统基本方案选择和

3、论证1.2.1 单片机芯片的选择方案和论证采用STC89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于拔插会对芯片造成一定的损坏。片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有STC89C51的功能,且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用S

4、TC89C51作为主控制系统。1.2.2 显示模块选择方案和论证采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,与普通数码管相比功耗较小,硬件连接简单。所以显示部分采用1602液晶显示。1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用STC89C51作为主控制系统;LCD1602液晶作为显示第二章 系统的硬件设计与实现2.1 电路设计流程图图2-1电路设计流程图2.2 系统硬件概述本电路是由STC89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个

5、字节的时钟信号或RAM数据;显示部分由1602构成。其实排阻就是由8个电阻组成的,其中一端全部接在一起,103为8个10K电阻,102为8个1K电阻,他们在电路中起到“上拉”的作用,又称上拉电阻。上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,下拉同理.上拉是对器件注入电流,下拉是输出电流,弱强只是上拉电阻的阻值不同,没有什么严格区分,对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。2.3 主要单元电路的设计2.3.1 单片机主控制模块的设计STC89C51单片机为40引脚双列直插芯片

6、,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如图2-2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路, 如图2-2图2-2主控制系统2.3.2 显示模块的设计1. 1602介绍字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40

7、*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图2-3:图2-3 1602字符型液晶显示器实物图2. 1602LCD的基本参数及引脚功能1602LCD分为背光和不带背光两种,基控制大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2-1所示:表2-1引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D

8、5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据

9、。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置3.LCD1602液晶原理 如图2-4所示:图2-4 LCD液晶原理图2.3.3 按键模块的设计根据设计要求需要选择

10、四个独立按键分别为选择、加、减、确定,按键模块如图2-5所示:图2-5按键模块设计2.3.4 上拉电阻内容 1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。 2、OC门电路必须加上拉电阻,才能使用。 3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。 4、在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供泄荷通路。 5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。 6、提高总线

11、的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰。 7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。图2-6 上拉电阻原理图2.3.5自锁开关应用图2-7 自锁开关硬件图图2-8 自锁开关原理图第三章 系统的软件设计3.1主程序:#include#define uint unsigned int#define uchar unsigned char/-LCD1602-/P10-17= D0-7sbit rs=P30; /指令or数据sbit wela=P31; /读or写sbit lcden=P32; /使能信号/-LCD1602-/-KEY-/

12、P2口/-KEY-uchar code table= ;long int data_a,data_b; /第一个数和第二个数long int data_c; /计算结果uchar dispaly10; /显示缓冲/*/ 描述: 延时t us函数/*/void LCD_Delay_us(unsigned int t) while(t-); /t=0,退出/*/ 描述: 延时t ms函数/*/void LCD_Delay_ms(unsigned int t) unsigned int i,j; for(i=0;it;i+) /执行t次循环 for(j=0;j999) write_date(0+di

13、spaly3); /显示千位 if(data_a99) write_date(0+dispaly2); /显示百位 if(data_a9) write_date(0+dispaly1); /显示十位 write_date(0+dispaly0); /显示个位void display_b() /显示数据b write_com(0x80+7); /第一行 dispaly3=data_b%10000/1000; /千 dispaly2=data_b%1000/100; /百 dispaly1=data_b%100/10; /十 dispaly0=data_b%10; /个 if(data_b999)

14、 write_date(0+dispaly3); /显示千位 if(data_b99) write_date(0+dispaly2); /显示百位 if(data_b9) write_date(0+dispaly1); /显示十位 write_date(0+dispaly0); /显示个位/计算结果void display_c(x) if(data_c-1)/溢出时显示错误 dispaly8=data_c%1000000000/100000000; /万万 dispaly7=data_c%100000000/10000000; /千万 dispaly6=data_c%10000000/1000

15、000; /百万 dispaly5=data_c%1000000/100000; /十万 dispaly4=data_c%100000/10000; /万 dispaly3=data_c%10000/1000; /千 dispaly2=data_c%1000/100; /百 dispaly1=data_c%100/10; /十 dispaly0=data_c%10; /个 write_com(0x80+6+0x40); /第一行 if(x=4) if(data_c99999999) write_date(0+dispaly8); /显示万万 if(data_c9999999) write_da

16、te(0+dispaly7); /千万 if(data_c999999) write_date(0+dispaly6); /百万 if(data_c99999) write_date(0+dispaly5); /十万 write_date(0+dispaly4); /万 write_date(.); write_date(0+dispaly3); /千 write_date(0+dispaly2); /百 write_date(0+dispaly1); /十 write_date(0+dispaly0); /个 else if(data_c99999999) write_date(0+disp

17、aly8); /显示万万 if(data_c9999999) write_date(0+dispaly7); /千万 if(data_c999999) write_date(0+dispaly6); /百万 if(data_c99999) write_date(0+dispaly5); /十万 if(data_c9999) write_date(0+dispaly4); /万 if(data_c999) write_date(0+dispaly3); /千 if(data_c99) write_date(0+dispaly2); /百 if(data_c9) write_date(0+dispaly1); /十 write_date(0+dispaly0); /个 else /溢出时显示错误 write_com(0x80+11+0x40); /第一行 write_date(E); /显示 E write_date(r); /显示R write_date(r); /显示R write_date(o); /显示O write_date(r); /显示E void eql(uchar x)/加减乘除运算 switch(x) /*功能键选择*/ case 1:data_c=data_a+data_b;break; /加 /* + S=1 */ /* 数值转换函数 */ c

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2