专业综合应用与工程能力实践训练课程设计电子计算器设计.doc

上传人:仙人指路1688 文档编号:2606582 上传时间:2023-02-20 格式:DOC 页数:40 大小:787.50KB
返回 下载 相关 举报
专业综合应用与工程能力实践训练课程设计电子计算器设计.doc_第1页
第1页 / 共40页
专业综合应用与工程能力实践训练课程设计电子计算器设计.doc_第2页
第2页 / 共40页
专业综合应用与工程能力实践训练课程设计电子计算器设计.doc_第3页
第3页 / 共40页
专业综合应用与工程能力实践训练课程设计电子计算器设计.doc_第4页
第4页 / 共40页
专业综合应用与工程能力实践训练课程设计电子计算器设计.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《专业综合应用与工程能力实践训练课程设计电子计算器设计.doc》由会员分享,可在线阅读,更多相关《专业综合应用与工程能力实践训练课程设计电子计算器设计.doc(40页珍藏版)》请在三一办公上搜索。

1、 专业综合应用与工程能力实践训练 课程设计 电 子 计 算 器 院 部: 电气与信息工程学院 学生姓名: 李 旭 指导教师: 戴佳阳 职称 讲师 专 业: 自动化 班 级: 自本1001 完成时间: 2013年12月 摘 要在我们的学习生活中,常会遇到一些繁杂的计算,耗费我们的时间,而且,有些计算过程复杂,通过笔算,难以得到正确的答案,比如说ln、sin、cos、tan等,就此我们设计了一款科学计算器,便于我们平时的计算使用。我们设计的这款计算器,是具有多功能的,它除了包括了四则运算、三角函数运算、开根号、ln、阶乘、求幂、十进制与八进制转换、十进制与十六进制转换外,还添加了温度计功能,实现了

2、多功能合与一体的设计。伴随电子行业的发展,单片机在我们的生活中占有举重轻重的地位,而这个计算器正是基于单片机来设计的,所以这次的设计真正的达到了学以致用效果,也很具有现实意义。关键字:计算器;温度计;单片机ABSTRACTWe always meet some multifarious computation in our school life which take lots of our time. Whats more, some calculation process, such as ln, sin, cos, tan and so on, is so complicated tha

3、t through the manual computation, we get low efficiency and probability. Thus, we design a calculator to facilitate our usual calculation. The calculator is of multiple function and realizes Multi function in one, which adds the thermometer function, as well as the stopwatch function, except for the

4、 four operations, the operation of trigonometric function, open radical sign, LN, factorial, exponentiation, decimal and octal, decimal and hexadecimal conversion. With the development of electronics industry, single chip computer (SCM) plays a more and more important role in our life. The design of

5、 this calculator is based on SCM. That is to say, this design put what we learn into practice, and also it has practical significance. Key words: calculator;thermometer;single chip computer目 录1 计算器任务、功能要求说明及总体方案介绍1 1.1 计算器任务1 1.2 功能要求说明1 1.3 计算器设计总体方案介绍及工作原理说明12 计算器硬件系统的设计2 2.1 计算器硬件系统各模块的简要介绍2 2.1.

6、1 计算器键盘输入模块2 2.1.2 计算器LCD1602显示输出模块2 2.1.3 温度计模块3 2.1.4 AT89S52单片机模块42.2 电路原理图、PCB图、元器件布局图42.3 设计课题元器件清单53 计算器软件系统的设计6 3.1 计算器使用单片机资源的情况6 3.2 设计课题软件系统各模块功能简要介绍6 3.3 流程框图7 3.4 程序清单74 仿真结果、设计结论84.1 计算器模块的仿真8 4.1.1 按键输入并计算计算器基本运算加减乘除:8 4.1.2 按键输入并计算基本运算三角函数sin,cos,tan:8 4.1.3 按键输入并计算基本运算开根号9 4.1.4 按键输入

7、并转化八进制,十六进制94.2 温度计模块的仿真94.3 计算器的使用说明94.4 设计心得10结束语11致 谢12参考文献13附录A 电路原理图14附录B PCB图15附录C 元器件布局图16附录E 程序清单18附录F 实物图34附录G protues仿真图341 计算器任务、功能要求说明及总体方案介绍1.1 计算器任务 设计一个具有特定功能的计算器。该计算器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。能实现(1)基本的加、减、乘、除、平方、开方;(2)三角函数运算;(3)十进制、十六进制转换运算;(4)温度计1.2 功能要求说明能够正确无误的进行基本的四则运算、平方、开

8、方、三角函数、十进制、十六进制等运算,并且能够进行温度的测量。1.3 计算器设计总体方案介绍及工作原理说明 以单片机作为总体核心部件,以 LCD1602液晶显示屏为输出部分以及自行设计的2*14键盘、18B20为温度测试芯片等为外围电路为辅助部分进行本次课题的设计。 从键盘进行数据的编辑输入到单片机中,以设计好的软件进行相应的运算,然后再从单片机中输出到LCD1602液晶显示屏芯片中,运算结果进行显示;对于温度模块而言,以18B20芯片对环境温度进行测量,然后通过外围电路输送到单片机进行处理,再送给LCD1602液晶显示芯片进行输出。如下图所示: 18B20温度测量 键盘输入 AT89S52单

9、片机 1602输出 图1 原理框图2 计算器硬件系统的设计2.1 计算器硬件系统各模块的简要介绍2.1.1 计算器键盘输入模块由于计算器设计中计算器要实现sin,cos,tan等功能的计算,按传统4*4键盘按键不能达到本次的设计要求,所以利用8-3编码器74ls148来实现2*14键盘的应用。2.1.2 计算器LCD1602显示输出模块液晶屏LCD1602接线是利用10k排阻将D0D8脚与电源正极连接,在单片机p00p07口无输出时将无输出的引脚电频置“1”,以实现LCD的显示功能。LCD1602共有16个引脚,其功能如表1所示。图2 LCD1602显示屏表1 LCD1602引脚功能表2.1.

10、3 温度计模块温度计模块用的是温度传感器DS18B20利用温度传感器温度感知送入单片机AT89S52的P3.7口(第17引脚),通过编程把结果输出到显示屏LCD1602中。如下图所示图3 DS18B202.1.4 AT89S52单片机模块 AT89S52单片机工作原理与引脚与我们所学的AT89C51基本相同,只是AT89S52的存储空间比AT89C51大了一倍,变成了8K。其引脚图如下所示:图4 AT89S52引脚图2.2 电路原理图、PCB图、元器件布局图 原理图见附录A、PCB图见附录B、元器件布局图见附录C2.3 设计课题元器件清单表2 元件清单AT89S52芯片1个DS18B20传感器

11、1个LCD1602液晶显示屏1个按键开关29个74LS00芯片3个10K电阻14个排阻1个200欧电阻1个74LS148芯片2个20uf极性电容1个22pf电容2个晶振片1个3 计算器软件系统的设计3.1 计算器使用单片机资源的情况本次计算器的设计中,单片机的P1口和P2.0口以及P2.1口被用作了键盘的扫描和输入所占用。P0口和P2.5、P2.6以及P2.7口连接LCD1602作为信息的输出,P3.2口用作外部中断信号的输入,XTAL1与XTAL2接外部晶振电路,RST接复位电路。3.2 设计课题软件系统各模块功能简要介绍 (1)void DelayMs(uint n) ,为毫秒延时子程序,

12、可以达到延时的功能,其中的uint n,为延时所设定的延时时间,单位为MS。 (2)void DelayUs(uchar us) 、void tmpDelay(int u),为微秒延时子程序,可以达到延时的功能,其中的uint us,为延时所设定的延时时间,单位为US。 (3)uchar Read_LCD_State(),为读LCD的子程序,将单片机的信息通过LCD1602显示输出。 (4)Void LCD_Busy_Wait(),为LCD1602的等待子程序。 (5)void Write_LCD_Data(uchar dat),为LCD1602写的子程序,将单片机的输出信息,写入到LCD的寄

13、存器中。 (6)void LCD_Init(),为LCD的初始化子程序,用于开机及复位LCD的初始化。 (7)void SET_LCD_POS(uchar p),为LCD的位置设置子程序。 (8)void LCD_string(uchar p,uchar *s),为LCD的写程序自程序。 (9)void initial()、void inter0() interrupt 0为开中断子程序。 (10)uint keyscan(),为键盘扫描子程序,对键盘进行数据的输入。 (11)void ABC(uint t),为操作子线程。 (12)void JSQ_init(),为计算器初始化子程序。 (1

14、3)void out(),为计算器输出子程序。 (14)void Init_DS18B20(),为18B20的初始化子程序。 (15)void Readtemp(),为温度读取子程序。 (16)void TEM_BCD(),为温度转换BCD子程序。 (17)void use(),为功能选择子程序。 (18)void main(),为主程序。3.3 流程框图 见附录D所示。3.4 程序清单见附录E所示。4 仿真结果、设计结论4.1 计算器模块的仿真在打开计算器之后或按功能复位键后将直接进入功能选则提示0or1,待提示信息消失,按键“0”+“=”进入计算器功能。4.1.1 按键输入并计算计算器基本

15、运算加减乘除: 图5 (注:+加法;-:减法;*:乘法;/:除法)4.1.2 按键输入并计算基本运算三角函数sin,cos,tan: 图6 (s:sin函数;c:con函数;t:tan函数)4.1.3 按键输入并计算基本运算开根号,阶乘,X的Y次方,Ln等运图7 (注:屏幕上显示#:开根号;$:阶乘;y:x的y次方;k:以e为底的对数;)4.1.4 按键输入并转化八进制,十六进制图8 (x:八进制转换;X:十六进制转换)4.2 温度计模块的仿真在打开计算器之后火按功能复位后将直接进入功能选择提示0or1,按键“1”+“=”进入计算器功能。如下图所示:图9 温度模块4.3 计算器的使用说明首先,

16、将电源的总开关打开,然后显示屏就会有如下图所示: 图10 然后就会显示功能选择提示,如下图所示:图110 是计算器模块,1是温度计模块,等到清屏后,由用户自己选择输入0或者1,以“=”为确认建,如下图所示:图12就分别进入了相对应的功能模块中去了,然后便可以进行相应的运算或温度检测了。4.4 设计心得通过本次课程设计,我们懂得了要完成一个电路的设计,理论基础是根基,实践操作是完成事物的重要部分,而创新能力则决定了一个电路的价值,因为设计一个电路,绝不是简单的按课本的电路图进行焊接成型,我们要进行电路各个元件参数的计算,这个涉及我们所掌握的理论知识,元件的计算是设计中较为重要的一部分,计算准了,

17、则设计出来的电路误差不大,否则,设计出来的电路性能指标根要求相差甚远。最困难的是当电路出现问题时如何检测出错误之处,如何排除错误,它考验了我们如何运用理论知识和实际的调试的能力,另外,通过这次课程设计,我掌握了常用元件的识别和测试,熟悉了常用的仪器,了解了电路的连接,焊接方法,巩固了基础,提高了实际操作技能,并养成注重设计,追求创新的思维习惯。总而言之,这次课程设计极大的提高我们在电子电路方面的各项能力。 结束语 课程设计结束了,但是从中学到的知识会让我终身受益。设计过程,好比是我们人类成长的历程,常有一些不如意,能免回遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识

18、理解得不够深刻,掌握的不够廖谷。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到是在搞不明白的问题就会及时请教老师,了解自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困后,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想着将对我以后的学习产生积极的影响。通过这次课程设计,我也懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心、和努力,这将为自己今后的学习和工作做出了最好的榜样。致 谢 大学两年半,这次课程设计是我们这大学期间干的最有意义的事之一。从最初的选题,到写课程设计直到完成课程设计。其间,查找资料,

19、老师指导,与同学交流,反复修改设计,每一个过程都是对自己能力的一次检验获很多,比如学会了查找相关资料相关标准,分析数据,提高了自己的制作能力。开始着手计算器设计的制作,一步一步的做下来。等做好设计的时候才发现这是个美好的过程,也不枉费我们对这次设计花的时间和精力。其实这么一次的锻炼可以学到书本里许多学不到的知识,坚韧、独立、思考等。 但是课程设计也暴露出我专业基础的很多不足之处。比如缺乏综合应用专业知识的能力,对材料的不了解等等。这次实践是对单片机及数电,模电知识所学和充实。通过这次实践,我们了解了计算器工作原理,熟悉了计算器的设计步骤,锻炼了设计实践能力,培养了我的设计能力。此设计是对我们专

20、业知识和专业基础知识一次实际检验和巩固。 感谢所有支持和帮助过我的同学和老师!谢谢你们的关照与宽容,与你们一起走过的缤纷时代,将会是我一生最珍贵的回忆。 此外,我还要感谢在我们的课程设计中所有被援引过的文献的作者们,他们是我们的知识之源! 最后,再次向所有给予我们帮助和鼓励的同学和老师致以最诚挚的谢意!参考文献1马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计M.北京:北京航空航天大学出版社,2006Ma Zhongmei,J, Zhang Kai, MaYan. MCU C language program design M .beijing: Beijing aerospace un

21、iversity press, 20062李广弟,朱月秀,冷祖祁.单片机基础M.北京:北京航空航天大学出版社,2007 Li Guangdi, ZhuYuexiu, Leng Zuqi. Microcontroller M .beijing: Beijing university of aeronautics and press, 2007 3李光飞.单片机课程设计实例指导M.北京:北京航空航天大学出版社,2004.9 Li Guangfei. This course design example guide M .beijing: Beijing university of aeronaut

22、ics and press, 2004.9 4邢增平.Protel 99 SE设计专家指导M.北京:中国铁道出版社,2004 Xing Zengping. Protel 99 SE design expert guidance M .beijing:China railway publishing house, 2004 附录A 电路原理图附录B PCB图图14 PCB顶层图15 PCB底层附录C 元器件布局图图16 PCB顶层丝印层附录D 程序流程框图 开始 附录E 程序清单#include #include #include #include #define _Nop() _nop_()

23、/定义空指令#define uchar unsigned char /宏定义无符号型字符变量#define uint unsigned int /宏定义无符号整形变量sbit DQ =P37; /DS18B20温度sbit RS =P26; /1602寄存器sbit RW =P25; /1602读/写Sbit EN =P27; /1602使能sbit SPK=P24; /蜂鸣器sbit FF=P20; Sbit GG=P21;code uchar mayuan28=1,2,3,c,4,5,6,s,7,8,9,t,n,0,.,=,+,-,*,/,#,y,x,X,%,!,$,k;uchar cod

24、e keycode28=0x78,0xB8,0x47,0x87,0x70,0xB0,0x46,0x86,0x68,0xA8,0x45,0x85,0x60,0xA0,0x44,0x84,0x58,0x98,0x43,0x83,0x50,0x90,0x42,0x82,0x48,0x88,0x81,0x41;/ /键盘编码值()uchar code MCUEXP= 51_MCU EXP ;uchar code welcome= Welcome! ;/*定义全局变量*/bit flag;int j,t,zz=0;float c=0;char m,g=0,f=0,i,e=0,d=0,k=0,z=0;ch

25、ar date115; /要操作的数 /计算器输出值的各位/* 延时函数*/void DelayMs(uint n) /毫秒延时子函数 uint i=0,j=0; /付循环初始值 for (i=n;i0;i-) /循环嵌套延时 for (j=246;j0;j-); void DelayUs(uchar us) /微秒延时子函数while(us-); /*/* LCD1602程序模块 */*/uchar Read_LCD_State() /读LCD状态uchar state; RS=0; /关闭1602的寄存器 RW=1; /将1602的读/写端置1,进行读操作EN=1; /打开1602的使能端

26、DelayMs(1); /延时1毫秒state=P0; /将P0口的状态输入到LCDEN=0; /关闭1602的使能DelayMs(1); /延时1毫秒return state;void LCD_Busy_Wait() /忙则等待while(Read_LCD_State()&0x80)=0x80); /判断是否忙DelayMs(5); /延时5毫秒void Write_LCD_Data(uchar dat) /LCD写数据子函数LCD_Busy_Wait(); /判断LCD是否忙,忙则等RS=1; /打开1602的寄存器 RW=0; /打开1602的写 EN=0; /关闭使能端 P0=dat;

27、 /将数据写出EN=1; /开使能端DelayMs(1); /延时1毫秒EN=0; /关使能端void Write_LCD_com(uchar i) /LCD写指令LCD_Busy_Wait(); /判断LCD是否忙,忙则等RS=0; /关闭1602寄存器RW=0; /打开1602的写EN=0; /关闭使能端P0=i; /将数据输出EN=1; /打开使能端DelayMs(1); /延时1毫秒EN=0; /关闭使能端 void LCD_Init() /LCD初始化 Write_LCD_com(0x38); /显示模式设置 DelayMs(1); /延时1毫秒 Write_LCD_com(0x38

28、); /显示模式设置 DelayMs(1); /延时1毫秒 Write_LCD_com(0x08); /显示关闭 DelayMs(1); /延时1毫秒 Write_LCD_com(0x01); /显示清屏 DelayMs(1); /延时1毫秒 Write_LCD_com(0x06); /显示光标移动设置 DelayMs(1); /延时1毫秒 Write_LCD_com(0x0C); /显示开及光标设置void SET_LCD_POS(uchar p) /*设置LCD位置*/Write_LCD_com(p|0x80); /清屏void LCD_string(uchar p,uchar *s) /

29、*LCD写程序*/uchar i; SET_LCD_POS(p); /*设置LCD位置*/for(i=0;i16;i+) /循环写入数据Write_LCD_Data(si);DelayMs(5); /延时5毫秒void initial() /*开中断*/EA=1; /总开关 EX0=1; /中断方式0开启IT0=0; / /设置中段方式为电平触发方式uint keyscan() uint i;uchar temp;FF=1;GG=0;DelayMs(10); /延时if(P1!=0x40) /有键按下temp=P1; /保存键盘此刻的键植DelayMs(10); /延时while(P1!=0x

30、40); /松手检测FF=0;GG=1;DelayMs(10); /延时if(P1!=0x80) /有键按下temp=P1;DelayMs(5); /延时5毫秒while(P1!=0x80); /松手检测 for(i=0;i0)Write_LCD_com(0x10); /屏幕后退一位 z-; /数组减一位if(mayuant!=n&mayuant!=&mayuant!=%&mayuant!=!)date1z+=mayuant; /把输入的数放在数组中Write_LCD_Data(mayuant); /把输入的数显示在LCD上if(z14)LCD_string(0x40,error); /提示输

31、入太多void inter0() interrupt 0 /*中断函数*/uint n;DelayMs(10); /延时if(INT0=0) /有键按下n=keyscan();FF=0; /中段前提条件GG=0;ABC(n); /调用操作子程序void JSQ_init() /*计算器初始化*/ uint s;EN=1; /开使能端LCD_Init(); /对LCD进行初始化 e=0; d=0; m=0;z=0;c=0; for(s=0;s15;s+) date1s=0;double fun3(int a) /*求阶层函数*/int sum=1,i;double dd;for(i=1;i=a;

32、i+)sum*=i;dd=(double)sum; /将snm转化成小数形式return (dd);void fun2(double p) /*16进制转换函数*/char a15,j;int i=0;long h;h=(long)p; /对p进行强制转化if(h=0) /判断要转换的数是否为0a0=0+48; /将0的BCD码存入数组SET_LCD_POS(0x40); /LCD屏幕的输出位置设置Write_LCD_Data(a0);/将数据(要输出的字符)写到LCD的寄存器中while(h!=0) /对不为0的转化j=h%16; /将被转化数,除以16取余h=h/16; /将被除数除以16

33、(短除法相同)if(j9) /判断转换后的数据是否大于10 ai=j+55; /将转化后的数据转换成字符型i+;SET_LCD_POS(0x40); /LCD输出位置设置while(i0) Write_LCD_Data(a-i); /将数据写入到LCD的寄存器中zz+;void fun1(double p) / *8进制转换函数*/char a15,i=0;long h;h=(long)p;if(h=0) /判断要转换的数据是否为0a0=0+48; /为0则,将0的字符型存入数组SET_LCD_POS(0x40); /LCD输出位置设置Write_LCD_Data(a0); /将数据写入到LCD的寄存器中 while(h!=0) /对不为0的转化ai=h%8+48; /将转化后的数据转换成字符型h=h/8; /将被除数除以8(和短除法相同)i+;SET_LCD_POS(0x40

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号