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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机课程设计报告简易计算器含源程序.docx

1、单片机课程设计报告简易计算器含源程序*大学单片机课程设计报告题 目 班 级 姓 名 学 号 指导老师 设计时间 1 方案设计与论证 本设计可以采用两种方案,一种是以FPGA为核心处理芯片,配备相应的外设;另外一种是以AT89S51处理器,配备相应的外设。 方案一:采用FPGA控制FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中

2、独占鳌头。但是而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外部存储器芯片 ,且使用方法复杂 ,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,成本太高。 方案二:采用AT89S51单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89

3、S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。 通过以上两种方案论证和比较,从设计的实用性,方便性和成本出发,选择了以AT89S52单片机作为中央处理单元进行计算器的设计,这样设计能够实现对四位加减乘除和除法四位小点数的运算。 本设计需要使用LCD液晶显示屏和编码键盘。故选择静态显示和用编码键盘。使用LCD液晶显示屏显示运算结果。 2 硬件设计2.1硬件资源分配 主要用到的硬件:AT89S52 LCD液晶显示屏 编码键盘 硬件分配: 1、P1、P3口:做为输出口,控制LCD液晶显示屏显示数据的结果。 2、P2口:做为输入口,与键盘连接,实现数据的输入。3、LCD液晶显

4、示屏显示输出。图2-1 系统结构框图前面叙述了该系统的设计说明,系统采用了比较简单的设计方案,所以该系统的硬件设计的总外围电路不会产生过多的干扰。在下面的阐述中,对系统的外围电路分别予以介绍。键盘部分采用编码键盘,显示部分采用LCD液晶显示屏完全能够很好的实现显示方面的要求。2.2系统电路设计2.2.1键盘电路 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可

5、以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。非编码键盘成本低廉。从成本角度出发,本设计选用的是非编码键盘。如图2-2-1图2-2-1 扫描键盘电路2.2.2 显示电路 当系统需要显示少量数据时,采用LCD液晶显示屏进行显示是一种经济实用的方法。P0口作为液晶显示的数据端口,P3.5-P3.7口作为其控制端口,控制LCD液晶显示屏显示输出数据。最终电路如图2-2-2所示:图2-2-2 LCD液晶显示屏显示3 软件设计3.1 主程序主程序主要是用来对LCD液晶显示屏进行初始化的。对

6、输入按键判断,然后进行加减乘除,最后计算出结果,显示出计算结果。流程图如图3-1所示:3.2 子程序3.2.1键盘扫描子程序 键盘扫描子程序,首先读出P1的低四位,然后读出P1口的高四位。然后键值并显示缓存。然后将键如的值转换为ASCII码然后就可以软件来设置硬件按键各个键代表的内容。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。 数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。3.2.2 显示模块子程序 显示模块程序首先要对显示模块进

7、行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。4 安装与调试将所有的元器件摆放在好,首先焊接51单片机的底座,确定简易计算器的键盘和液晶显示的排练位置,先将51单片机的底座焊接四周的四个点固定就好,之后再随需要焊接必要的底座引脚,接着焊接比较复杂的矩阵按键,各个按键之间的连接,使用细导线。在使用细导线焊接两个焊点时,先将两个焊点焊上焊锡。之后加热焊锡再将细导线接入,使之固定。之后再将单片机的晶振和复位电路焊入单片机的地座上。确定最小单片机系统焊接完整后再将按键扫描接在单片机的P1口,后将各个细导线按顺序分别

8、焊到单片机的P1端口的引脚处。再将1602液晶显示的底座焊接在电路板上的相应位置上,从单片机和电源处将细导线按顺序分别焊接到液晶显示的底座上。将51单片机烧入C语言程序,插入电路板上,再检查电路的接线和焊点处是否有焊错和虚焊,最重要的是要检查电路是否短路。诺是没有错误则可以通电进行测试。首先接上电源,打开开关,在液晶显示屏上显示出“0”则表示液晶显示是正常的,如果没有显示字符等,则可以查看电路中在液晶显示的第三个引脚上的接线是否正确,可改变其电压,使1602液晶显示的字符的亮度改变。如显示正常则可测试矩阵按键,逐个按下没个按键,观察每个按键的功能是否正确。如果正确则调试结束。图4-1实物图(正

9、面)图4-2实物图(反面)5 性能测试与结果分析将已经焊接好的简易计算器通电后,测试计算器的最大计算值与最小计算值。经过测试计算器的最大运算值可以是9999*9999,最小的运算值可以是0。经过接不同的电源测试,51单片机的工作电压范围为3V5.5V。实物效果图如图5-1所示:图5-1 实物效果图6 心得体会 在硬件的制作过程中我走了好多的弯路,主要是在系统还没有设计很有把握就开始动手制作了。后来发现与设计的要求还有偏差,反复的改过了几次,浪费了大量的时间和体力。感受到设计人员要有耐心,要认真的从要求开始研究。软件的编写过程中费了很大的力气,因为软件的编写要求很高,要很细心,一不小心就会调用错

10、误,很深刻的体会到作为软件编程人员是绝不能粗心大意的。一个程序的完成的速度和质量高低与细心与否有着很大联系。编程时,我充分使用了结构化的思想。这样因为语句较少,程序调试比较方便,功能模块可以逐一的调试,充分体现了结构化编程的优势。当每个模块都完成时,将其功能加到一起就完成了整体的设计。参考文献:1谭浩强. C语言程序设计M.北京:清华大学出版社,20002靳达.求是科技.单片机应用系统开发实例导航M.:人民邮电出版社,20063刘守义. 单片机应用技术M.:西安电子科技大学出版社,20014林志琦.基于PROTEUS的单片机可视化软硬件仿真M.北京:北京航空航天大学出版社,20065胡汉才.单

11、片机原理及接口技术.清华大学出版社,19966徐江海.单片机实用教程M.北京:机械工业出版社,20077张磊. C语言程序设计M.北京:高等教育出版社,2005附录:1 电路图2 实物图(正反面)实物图(正面)实物图(反面)3 源程序/*接盘按键说明:- | 1 | 2 | 3 | + | - - - - - - - - - - - - - | 4 | 5 | 6 | - | - - - - - - - - - - - - - | 7 | 8 | 9 | * | - - - - - - - - - - - - - | C | 0 | = | / | -*/操作简介/ 按第一个数,再按+-*/,

12、再按=显示出结果,然后按C清屏/ 加最大9999+9999=19998/ 减最大9999-0 =9999/ 乘最大9999*9999=99980001/ 除 1/9=0.1111 保留小数点后4位#include#define uint unsigned int#define uchar unsigned char/-LCD1602-/P00-07= D0-7sbit rs=P27; /指令or数据sbit wela=P26; /读or写sbit lcden=P25; /使能信号/-LCD1602-/-KEY-/P1口/-KEY-uchar code table= ;long int data

13、_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+dispaly3); /显示千位 if(data_a99) write_date(0+

14、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) write_date(0+dispaly3); /显示千位 if(data_b9

15、9) 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/1000000; /百万 dispaly5=data_c%1000000/100000;

16、/十万 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_date(0+dispaly7); /千万 if(data_c999999) writ

17、e_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+dispaly8); /显示万万 if(data_c9999999) write_date

18、(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_c

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1