基于51单片机的简易计算器设计_第1页
基于51单片机的简易计算器设计_第2页
基于51单片机的简易计算器设计_第3页
基于51单片机的简易计算器设计_第4页
基于51单片机的简易计算器设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、电子技术综合设计设计报告设计题目: 基于MCS-51单片机的简易计算器设计 组长姓名: 陈万涛 学 号: 专业与班级: 电气13-10班 姓 名: 赵伟成 学 号: 专业与班级: 电气13-10班 姓 名: 姚光远 学 号: 专业与班级: 电气13-10班 时 间: 2015 2016 学年第(1)学期 指导教师: 牛小玲 成 绩: 日 期: 2015.12. 目录1.设计方案21.1基本设计原理21.2方案选择21.3元件选择31.4系统框图42.硬件设计42.1硬件设计方案42.2供电电路设计6 2.3键盘电路设计6 2.4液晶显示电路设计72.5主电路73.软件设计8 3.1软件设计方案

2、8 3.2系统程序设计流程图94.系统的安装调试10 4.1安装顺序10 4.2故障原因及排除方法11 4.3调试结果125.设计总结126.参考文献127.附录13 7.1附录一 图片13 7.2附录二 Proteus仿真图13 7.3附录三 系统程序141.设计方案1.1基本设计原理本设计是以单片机为核心的简易计算器系统设计,输入采用常见的4*4矩阵键盘,该设计作品可以进行加、减、乘、除以及带符号数字运算(七位整数、六位小数),同时可以通过LCD1602静态显示操作过程及结果。根据功能和设计要求,本系统选用以MCS-51单片机为主控机,通过扩展必要的外围接口电路,包括键盘电路、电源供电电路

3、、显示电路等主要模块电路,实现对计算器的设计,设计思路采用模块化设计思路,即分别设计各模块电路,然后进行总体连接,即可实现设计目的。本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。通过本设计的学习,进一步掌握单片机程序设计和微机接口应用的基本方法,并能综合运用现阶段所学软、硬件知识分析实际问题,提高解决实际问题的能力。1.2方案选择针对该简易计算器的设计,有以下几种方案可供选择。方案一利用单片机为主要控制电路,外加部分辅助电路来实现设计功能。单片机作为主要控制器,数码管作为显示电路,外部输入电路采用简单键盘输入,即利用单片机的简单I/O口作为

4、输入电路。即系统主要由三部分组成:单片机核心控制模块、数码管动态显示模块以及简单键盘输入模块。键盘读入采用单片机查询方式,即让16个按键的信息输入端从单片机P3、P2口输入,通过查询指令,判断输入的是哪一个键盘,然后做出相应的处理,最后通过数码管电路动态显示运算结果。该方案的不足之处是显示电路中对于数码管的驱动需要外加电路,使得电路成本增加且电路显得更加复杂。同时,当显示多位时,数码管的个数也会相应增加,成本也相应增加。另外,对于外部输入电路,该方案采用简单键盘电路设计结构,显然这不是最佳方案。因为简单键盘电路占用了过多的I/O口,而单片机简单I/O口数目有限,在资源由有限的情况下,采用该设计

5、方案显然存在不合理之处。方案二方案二主要控制电路仍然是以单片机为核心,外加辅助电路来实现设计目标。与方案一不同的地方是显示电路和输入电路。方案二为LED点阵显示屏,能够实现动态显示;输入电路采用矩阵键盘输入。供电电路与外部输入电路与方案一相同,采用USB供电模式。与方案一相比,LED点阵显示可以满足显示位数要求,而且显示清晰,观察方便,但与数码管显示相比,LED显示屏所占体积较大,功耗也较大,相对于简易计算器的要求而言,会使设计成本增加许多,而且功耗增加也是不符合要求的。另外,对于输入电路来说,采用矩阵键盘输入能够大幅度减少I/O口的使用,而且电路建构也相对集中。总体上来说方案二基本可以满足设

6、计要求,想比较方案一而言,能够作为备选设计方案。方案三相对于方案一,方案三与方案一的主要区别在于以下两点:一是键盘电路的设计,二是显示电路的设计。键盘电路与方案一相同,采用矩阵键盘输入,其优点在方案二中已详细说明;显示电路用集成显示屏LCD1602芯片作为显示主要电路,通过LCD1602能够使得系统程序指令简单,而且LCD1602体积小、功耗小,能够满足小功率系统的设计。相对于方案二。方案三与方案二的主要区别在于显示电路的不同,LCD显示电路相对LED点阵显示电路,其主要优势在于能够减小功耗,减小系统体积,提高系统的稳定性,而且可以降低成本。综上所述,为了满足简易计算器的设计目标,通过对比以上

7、三种方案的优缺点,最终确定本次设计采用方案三。1.3元件选择根据上述选择的方案,在整个电路的设计上,接下来的工作就是元器件的选择。对于元器件的选择,需要考虑到实际的应用场合,根据设计要求及实际情况,确定元件清单如下。表1名称容量数量电容10uF1电容20pF2液晶LCD16021电源接口Header 21电阻2.7K1电阻10K1独立按键SW-PB18电源开关sw-灰色1单片机STC89C51U11晶振12M11.4系统框图根据方案选择结果,整个系统的基本结构框图如下。矩阵键盘输入电路作为数字信息输入,供电电路采用USB供电方式,控制处理中心有单片机组成,与键盘输入电路采用相同电源供电;信息经

8、过单片机处理之后能够有效驱动LCD1602显示模块显示运算结果,便于读取记录。图 1 系统结构设计框图2.硬件设计硬件电路的设计是整个设计过程的一个关键地方,根据设计方案的选择结果以及系统设计结构框图来设计整个硬件电路。2.1硬件设计方案根据设计方案可知,单片机工作电源为5V,所以本系统采用USB供电,通过USB数据线一端与计算机USB口相连,另一端与供电电路接口相连,这样即可解决供电问题。当然,供电方式也可采用5V电池供电,但是电池供电的缺点就是不能连续供电,而且电池供电成本较高,供电电压也不稳定,相对于USB供电方式而言,电池供电方案不可取。键盘电路采用按键开关来实现,即通过开关来实现键盘

9、的作用。控制器部分的核心是单片机,对于外部各电路与单片机的连接设计如下:表2 单片机与键盘电路结构对应关系MCS-51单片机键盘电路 P3.0键盘行线P3.1键盘行线P3.2键盘行线P3.3键盘行线P3.4键盘列线P3.5键盘列线P3.6键盘列线P3.7键盘列线表2 LCD1602显示屏与MCS-51接口对应关系MCS-51单片机LCD1602显示屏P1.0D0P1.1D1P1.2D2P1.3D3P1.4D4P1.5D5P1.6D6P1.7D7P2.0RWP2.3ENP2.4RS2.2供电电路设计根据以上设计方案,可设计供电电路如下,该部分主要器件包括USB数据线1根,电源接口1个,总控制开关

10、1个。通过查阅相关资料可得实物图如下: 图 2 电源总开关图 3 USB供电线输出端接口图 4 USB供电线根据设计原则,供电开关控制电路设计如下图 5 电源供电电路2.3键盘电路设计键盘是与单片机进行人机交互的最基本的途径,其以按键的形式来设置控制功能或输入数据,按键的输入状态本质上是一个开关量。对于简单的开关量的输入可以采用独立式按键,这种方法接口简单,但占用单片机I/O端口资源较多。对于输入参数较多、功能复杂的系统,需要采用矩阵式键盘进行输入控制。本系统采用4*4矩阵式键盘。键盘电路设计采用按键开关来实现键盘按键的功能,查阅相关资料选取如下开关类型作为按键。本部分电路包括按键开关18个,

11、分别包括数字键0-9,小数点键1个,运算符号键+、*、/、=共5个,清零、删除键2个。电路图如下图:图 6 键盘电路图2.4液晶显示电路设计液晶显示电路部分包括LCD1602显示屏1块,以及LCD1602工作辅助电路。液晶显示器(LCD)是一种功耗很低的显示器,它的使用非常广泛,比如电子表、计算器、数码相机、计算机的显示器和液晶电视等。电子密码锁中需要显示的信息比较多,为了能直观的看到结果,并且为了设计显的美观,使用总线和排阻进行简化连接方式,本设计采用液晶显示屏LCD进行显示,具体连接方式如图所示:图 7 显示电路2.5主电路控制电路即单片机电路,主要由MCS-51单片机组成,单片机运行系统

12、程序,结合外部输入来控制显示电路,显示相应运算结果。结合键盘电路、显示电路,主电路设计如下:图 8 系统主电路3.软件设计3.1软件设计方案软件的设计是关乎整个系统能否达到设计目标的关键因素,软件设计需要注意的地方很多,其中首先要考虑的就是设计语言的选择,编程语言的难易程度也是设计软件的因素,有的程序设计语言会占用过多的存储空间,而且执行速度也会大大受影响;其次就是对于编程者而言,根据实际应用系统选择设计语言是最重要的,对于本系统,程序执行速度没有太高的要求,但考虑到单片机实际内存,所以语言的选择很重要。C语言是适合于单片机运行的一种面向对象的语言,其优点是语句简单,程序设计采用结构化,执行时

13、间短,容易掌握其编程技巧,而且对于大规模程序而言,C语言能够明显减少程序语句,使得程序不过于繁琐。汇编语言是面向硬件的设计语言,汇编语言的优点是基于硬件基础,能够有效使用硬件资源,程序效率较高;但对于一般编程人员而言,要充分掌握硬件资源后才能展开编程,而且当实现功能过于复杂时会使得成语句过多,运行时间变长。通过对比以上两种编程语言后,根据实际设计目标,选择C语言作为软件设计语言。3.2系统程序设计流程图根据设计方案及实际功能,程序设计采用结构化设计方法,分为主程序和运算程序两部分,主程序设计流程图如下:图 9 主程序设计流程图单片机是一块芯片中集成了CPU、RAM、ROM、定时器、计数器、和多

14、功能I/O等一台计算器所需要的基本功能部分。如果按功能划分,它由如下功能部分组成,即微处理器(CPU)、数据处理器(RAM)、程序处理器(ROM/CPROM)、并行I/O口、串行口、定时器、计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊一些功能,通过使用单片机编写的程序可以凸显高智能、高效率以及高可靠性,可以很快实现运算功能。运算程序设计主要实现运算功能,运算结果通过显示电路显示,流程图如下:图 10 运算程序设计流程图4.系统的安装调试4.1安装顺序1.检查元件的好坏按照元件选择清单买好元件后,首先要做的工作就是检查买

15、回元件的好坏,各元件的检测方法各异,应当细心操作,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。2.放置、焊接各元件按照电路设计原理图的位置放置各元件,在放置过程中要先放置、焊接位置形状较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,另外要特别注意芯片的安装方向。下面是安装实际效果图:图 11 实际安装效果图4.2故障原因及排除方法1.在焊接时,因为对于原件结构没有了解清楚,导致在焊接好之后才发现开关位置放错针对这个故障,我们的解决方法是卸载重新安

16、装,因为焊锡与万用板结合之后不容易去掉,因此。我们借助吸锡器来帮助去掉残留在万用板上的焊锡,通过一系列工作,最终重新安装上开关按键。2.安装时发现LCD1602因为体积稍微偏大,如果贴板安装就会使得单片机安装变得困难针对这个问题,我们的解决方法是让LCD1602一边固定,一边不固定,这样LCD1602就不能妨碍单片机的安装。3.在焊接时,发现使用的导线数量不够针对这个问题,我们才要美好量体裁衣的方法来解决,对于每一段导线都尽量使它紧贴万用板面,这样不仅能够节省线的长度,还可以使得结构更美观,便于查错。4.3调试结果在安装成功之后,通过加载程序进行调式,能够满足设计要求。5.设计总结课程设计是培

17、养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过此次课程设计,让我们了解到学习不仅仅是理论,更多的是理论联系实际,通过各种课程设计将自己学到的理论知识运用到实践中,一方面可以很好地理解理论知识,另一方面可以更好地锻炼自己的动手能力。作为工科学生,尤其需要掌握这种能力。回顾起此次单片机课程设计,从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西。通过这次课程设计使我门懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社

18、会服务,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计使我门得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。通过此次课程设计,是的我们对单片机的相关知识有了更为全面的理解与掌握。6.参考文献1 陈桂友. 单片机应用技术基础. 机械工业出版社, 20152 魏二

19、友. 单片机应用系统设计与实现教程. 清华大学出版社, 20143 邓世建. 微机原理与应用. 中国矿业大学出版社, 20124 周立功. 项目驱动:单片机应用设计基础. 北京航空航天大学出版社, 20115 陈萌. C语言编程思维. 清华大学出版社, 20147.附录7.1 附录一 图片 7.2 附录二 Proteus仿真电路图7.3 附录三 系统程序部分设计程序#include#include#include#include#include#define uint unsigned int#define uchar unsigned charsbit batt = P35;float nu

20、m1; / 保存第一个数float num2; / 保存第二个数uchar jjcc; / 加减乘除标志变量uchar idata Lcd_Str17; / 显示区缓存uchar idata Num_str17; uchar Lcd_num2_add = 0;/ 第二个数据开始位的增量uchar Lcd_dis1_i = 0; / 记录显示第一行字符uchar Lcd_num1_i = 0; / 记录num1 是几位数uchar Lcd_num2_i = 0; / 记录num2 是几位数uchar Dian_i = 0; / 小数点位数/函数名称:delayms;函数功能:延时z毫秒;形 参:

21、z (延时时间参数)void delayms(uchar z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);uchar Key_io; / 暂存IO值uchar Key_jl; / 松手检测自锁变量uchar Key_value; / 返回键值uchar Key_D_bit;uchar saom(void) Key_value=18; P2=0xf0; / 拉低第四位 Key_io=P2; if(Key_io!=0xf0) / 查看搞四位是否有低电平 Key_io|=0x0f; / 保持高四位出现低电平的管脚,拉高第四位 P2=Key_io; / 重新复

22、制IO口 Key_io=P2; / 读取IO信息,确定键值 if(Key_jl=0) / 自锁变量,松手检测 Key_jl=1; switch(Key_io) case 0x7e: Key_value=1; break ; case 0x7d: Key_value=2; break ; case 0x7b: Key_value=3; break ; case 0x77: Key_value=12; break ; case 0xbe: Key_value=4; break ; case 0xbd: Key_value=5; break ; case 0xbb: Key_value=6; bre

23、ak ; case 0xb7: Key_value=13; break ; case 0xde: Key_value=7; break ; case 0xdd: Key_value=8; break ; case 0xdb: Key_value=9; break ; case 0xd7: Key_value=14; break ; case 0xee: Key_value=10; break ; case 0xed: Key_value=0; break ; case 0xeb: Key_value=11; break ; case 0xe7: Key_value=15; break ; el

24、se Key_jl=0; Key_io = P3; / 独立按键扫描 Key_io&=0xc0; if(Key_io!=0xc0) if(Key_D_bit=0) Key_D_bit = 1;switch(Key_io) case 0x80: Key_value = 16; break; case 0x40: Key_value = 17; break; else Key_D_bit = 0; return Key_value;uchar XS_JG(uchar add,float n) uchar len,p=0; memset(Lcd_Str,0,16) ; sprintf(Lcd_Str

25、,%e,n) ; while(Lcd_Strp!=e) p+; if(Lcd_Strp+2=0x30&Lcd_Strp+30x37) sprintf(Lcd_Str,%f,n); len = strlen(Lcd_Str) ; while(len) if(Lcd_Strlen-1=.) Lcd_Strlen-1 = 0; break; if(Lcd_Strlen-1=0) / 去除数据中多余的0与小数点 Lcd_Strlen-1 = 0; else break; len-; else while(p) if(Lcd_Strp-1=.) Lcd_Strp-1 = ; break; if(Lcd_

26、Strp-1=0) / 去除数据中多余的0与小数点 Lcd_Strp-1 = ; else break; p-; Dis_str(add, ); Dis_str(add,Lcd_Str); return len;void fuhao(uchar s) if(jjcc5) if(Num_str0!=A) if(Num_str0=0x30&jjcc != 2) num1=atof(Num_str); / 从数组中取第二个数字/ XS_JG(0x8a,num1); if(jjcc=0) Num_strLcd_dis1_i = s ; Lcd_dis1_i+;Lcd_num2_add = Lcd_di

27、s1_i ; else if(Num_strLcd_num2_add=0) Num_strLcd_dis1_i-1 = s ; Dis_str(0x80,Num_str); if(jjcc=5) Lcd_dis1_i = 4 ; Lcd_num2_i = 0 ; Lcd_num2_add = 4; memset(Num_str,0,16); Num_str0 = A; Num_str1 = n; Num_str2 = s; Num_str3 = s; Dis_str(0x80, ); Dis_str(0x80,Num_str); void main(void) uchar num_key1;

28、init_1602(); write_1602dat(0); memset(Num_str,0,16); while(1) num_key1=saom();/读按键值 delayms(10); if(num_key118)/是否有按键按下,小于16时有按键按下 batt = 0; delayms(30);batt = 1; switch(num_key1) case 11: if(Num_strLcd_num2_add=0x30) num2=atof(Num_str+Lcd_num2_add); / 从数组中取第二个数字 else break; Lcd_num2_i=0 ; XS_JG(0x8

29、a,num2); switch(jjcc) case 1: num1+=num2; / 加 break; case 2: num1-=num2; / 减 break; case 3: num1*=num2; / 乘 break; case 4: num1/=num2; / 除 break; XS_JG(0xc0,num1); Dis_str(0x80+Lcd_dis1_i,=); jjcc=5; / 等号标志 break;case 12: if(Num_str0=0|Lcd_num2_i0) break; fuhao(+); jjcc=1;Dian_i=0 ; break; / 按下加号键ca

30、se 13: if(Num_str0=0|Lcd_num2_i0) break; fuhao(-); jjcc=2;Dian_i=0 ; break; / 按下减号键case 14: if(Num_str0=0|Lcd_num2_i0) break; fuhao(*); jjcc=3;Dian_i=0 ; break; / 按下乘号键case 15: if(Num_str0=0|Lcd_num2_i0) break; fuhao(/); jjcc=4;Dian_i=0 ; break; / 按下除号键case 10: if(Dian_i=0&(Lcd_num1_i != 0|Lcd_num2_i != 0)/ 输入小数点时前面必须有数字 Dian_i+; / 小数点 Num_strLcd_dis1_i = .; Lcd_dis1_i+; Dis_str(0x80,Num_str); break; case 1

温馨提示

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

评论

0/150

提交评论