c51的简易计算器-单片机课程设计.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c51的简易计算器-单片机课程设计

单片机课程设计 题目名称基于51单片机的简易计算器 学生学院____ 信息工程学院_______ 专业班级信息工程(应用电子方向)12(2)班 姓 名______虞君权__________ 学 号 3112002559 指导教师_ _____李优新 ___ 2015年1月15 一、课程设计的内容 本次课程设计的内容从下面两个方面任选一个:一是在学院的单片机实验平台上进行,开发一个基于单片机与PWM技术的灯光调节系统,主要开发内容为按键定义、输入与防抖动技术、PWM调节技术以及显示技术等程序设计。二是利用51系列单片机及必要的外围芯片、输入输出等接口电路设计开发一个简易的单片机系统,在此基础上,自行设计一个单片机应用程序来实现一些实用的功能。 通过这些内容的设计、开发、安装、调试等一系列工作,熟练掌握单片机系统的开发流程与工作机理,加深对所学课程知识的理解与把握,为将来相关的研究开发工作打下坚实的基础。 二、设计内容 本次实验的任务就是要以51系列单片机为核心实现一个简易计算器计算器,它的结构非常简单,外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成,通过软件编程可实现简单加减乘除。 三、方案论证 经分析,计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。具体如下: LCD显示电路 LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合LCD本身的时序图来完善初始化程序。又以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点3 种方法读取键值。一种是中断式,外两种是扫描法和反转法。 中断式:在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地 址读取数据线上的状态,判断哪个案件被按下。本实验采用中断式实现用户键盘接口。 扫描法:对键盘上的某一行送低电平,其他行为高电平,然后读取列值。若列值中有一 位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。 反转法:先将所有行扫描线输出低电平,读列值。若列值有一位是低,则表明有键按下, 读列值;然后所有列扫描线输出低电平,再读行值。根据读到的值组合就可以查表1 得到的 键码。 这个就仁者见仁智者见智了,不过如果熟悉了扫描式,建议果断升级自己的硬件(很简单加个74LS08与门),故采用节省CPU的中断式扫描电路。 ⒊) 单片机微控制电路 微控制电路就是以AT89C51为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。 四、硬件电路的设计 2.1 硬件设计电路框图 2.2 硬件设计电路的元件清单 器件名称 将直接接在P2口上 五、软件设计及描述 六、硬软件的调试及方法 我个人遇到的主要问题出现在LCD1602上,要不是我自己买了块新的LCD恐怕我的结论,就只能在软件仿真实现了。 硬件上:在不加芯片调试时,LCD1602只显示一排全黑,一般说明该元件是好的。(但也不一定,我那时就一直认为我的元件没坏);给15,16管脚分别接上+5v和0v,测试背光是否完好;给VEE接上电位器,检查对比度是否可调; 七、实验结果与性能达标 我的计算器能准确进行包括整数及小数的加减乘除四则运算。 八、实验改进与心得体会 这个实验给我的感觉,硬件和软件上都不是很难。在将烧写进单片机芯片之前,进行所以觉得特别#includereg51.h #include intrins.h #includestdio.h #includestdlib.h #includemath.h sbit RS = P1^2; sbit RW = P1^1; sbit E = P1^0; //定义lcd端口,RS:数据、命令选择端,RW:读、写选择端 sbit H1=P2^4; sbit H2=P2^5; sbit H3=P2^6; sbit H4=P2^7; char input,flag,f,i; //定义每次的输入input,和对输入的分类标志flag char buf[16]=,num1[10]=,num2[10]=,result[16]=,sign; float temp; void delay(unsigned char x) //延时函数 { unsigned char y; for(;x0;x--) for(y=0;y=110;y++) ; } void delay_4nop() //延时函数 { _nop_(); _nop_(); _nop_(); _nop_(

您可能关注的文档

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档