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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

简易计算器设计.docx

1、简易计算器设计 广东海洋大学寸金学院单片机课程设计 论文题目: 简易计算器设计 系 别: 信息技术系 专 业: 电气工程及其自动化 班 级: 电气工程及其自动化4班 姓 名: 李泽辉 林卓环 学 号: 2012103120413 2012103120418 指导老师: 叶伟慧 职 称: 讲师 日 期: 2015年1月4日 广东海洋大学寸金学院教务处制1 设计任务1.1 设计目的和意义当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方

2、便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中。单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。本系统采用AT89C51设计计算器控制器,实现了能根据实际输入值显示,简单运算的功能。1.2设计任务与要求1、设计4*4的键盘,其中10个数字键09,其余6个键为“+”、“-”“*”、“/”、“=”和“C”键;2、设计2位L

3、ED接口电路;3、实现1位数的简单运算。2 系统设计2.1 总体方案设计 根据系统的要求,确定系统的总体方案如图1所示。图1 系统总体设计方案2.2 芯片选型与具体电路设计2.2.1 单片机的选型 系统采用AT89C51单片机,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,所以是一种高效微控制器。 主要有以下特性:1、与MCS-51 兼容 2、4K字节可编程FLASH存储器 3、全静态工作:0Hz-24MHz 4、1288位内部RAM 5、32可编程I/O线 6、两个16位定时器/计数器

4、7、5个中断源 8、片内振荡器和时钟电路 各管脚说明如下:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLA

5、SH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收

6、输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0

7、。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大

8、器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。2.2.2 振荡电路的设计 本系统采取12MHz晶振为振荡源,为单片机提供时钟信号,其电路如图2所示。图2 振荡电路设计2.2.3复位电路的设计系统复位电路设计如图3所示。图3 复位电路设计2.2.4 矩阵键盘电路与运算法则指示电路的设计系统采用了KEYPAD-SMALLCALC型4*4计算器专用键盘,包含行线和列线各4根,分别接于P1.0P1.3和P1.4P1.7。可输入数字09,进行“+”、“-”、“*”、“/”简单运算,并具有复位功能;运算法则指示电路采用了4只黄色LED-BIRY,并将其共地,另一端分别接至单片机的4

9、个管脚,当执行某种运算法则时,其对应的LED亮,运算完成后,LED灭。系统矩阵键盘电路与运算法则指示电路如图4所示。图4 矩阵键盘与运算法则指示电路设计2.2.5 LED显示电路的设计根据设计要求,系统采用了2个7SEG-COM-CATHODE型7位LED显示器,分别接于单片机P0口和P2口得低7位,并分别接上拉排阻RP1和RP2,显示输入数据和运算结果。当显示数据为一位数时,高位显示“0”,低位显示需要显示的数字。LED显示电路设计如图5所示。图5 LED显示电路设计2.3 系统总体电路系统总体上分为单片机、振荡电路、复位电路、LED显示电路、矩阵键盘电路、运算法则指示电路六个部分。单片机为

10、系统的中央处理器,完成数据的采集、运算、数据输出等功能;振荡电路采用12MHz的晶振,为单片机提供时钟信号;复位电路为单片机提供复位功能;LED显示电路采用2只7位LED显示器,实现2位输入输出数据的显示;运算法则指示电路通过4只LED显示系统当前的运算法则。系统总体电路如图6所示。图6 系统总体电路设计2.4 系统所用元器件 本系统所用的元器件清单如表1所示。表1 本系统所用的元器件元器件名称数量单片机AT89C5117位LED显示器7SEG-COM-CATHODE2电容CAP2极性电容CAP-ELEC1晶振CRYSTAL1计算器键盘KEYPAD-SMALLCALC1LED-BIRY4电阻R

11、ES1排阻RESPACK-82电源VCC1导线若干3. 软件系统设计3.1 软件系统总体设计方案 系统通过矩阵键盘输入数据,单片机对输入数据进行处理,将处理结果输出,通过LED显示电路和运算法则指示电路显示处理结果。软件系统总体设计方案如图7所示。图7 软件系统总体设计方案3.2 软件系统流程图3.2.1 主程序流程图主程序流程图如图8所示。图8 主程序流程图3.2.2 按键扫描子程序设计 (小四宋体加粗)由于矩阵键盘的行线和列线分别接于P1口得高4位和低4位,通过线反转法检测键盘按键状态,根据所得值向单片机反馈相应数据。按键扫描流程图如图9所示。图9 按键扫描流程图4 系统调试4.1系统初始

12、状态的调试 系统初始状态时,2个LED显示器显示“0”,运算法则指示灯全灭。调试结果如图10所示。图10 系统初始状态调试结果4.2键盘输入功能的调试通过键盘分别输入“8”、“*”、“9”,LED显示电路和运算法则指示电路分别显示相应的结果。调试结果如图11所示。(a)输入“8”(b)输入“*”(c)输入“9”图11 键盘输入功能调试结果4.3系统运算功能的调试当输入“8”、“*”、“9”后,点击“=”可得到运算结果“72”,并通过LED显示电路显示。调试结果如图12所示。图12 系统运算功能调试结果课程设计心得体会:通过这次单片机课程设计,我们深感自己动手操作的重要性。我们在课堂上接触到的多

13、半是苍白的理论,在实践层面上只有一定的指导作用。但是真正在实际运用过程中,我们如果缺乏必要的及时锻炼,那将会感觉到力不从心。工科本来就是一门集思维和动手能力于一体的学科,要想真正掌握好,思考、假设和实验验证都是必不可少的。在通过很多的理论学习之后,我们通过课程设计和相关的实验把书本上的理论知识在实际运用中加以利用,巩固了理论知识的同时也增强了我们的动手能力。通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈电子设计为我们的社会付出。我们学习理论知识的最终目的还是要走向实际运用,通过这种模拟式的学习,我们加深认识到理论与实践的差异。通过这个课程设计,我们大家把整个学习阶段的各

14、种学科知识窜联在一起,更好地认识到学习是一个系统工程。我们的每一个环节都是在为以后的实践环节做铺垫,我们的每一个环节都是要有所掌握才可以顺利完成任务。通过这样的实践活动,我们都深感动手起来遇到的各种问题都要亲自去解决是一件很不容易的事情,同时我们也在实践过程中修复了以往学习的很多漏洞。我们也得到了不同程度的完善和提升。希望以后能多举行多参与这类型的实践活动。把理论知识结合到实践层面去,理论结合实际学习才会更有声有色。要把我们学到理论知识的真正利用到生产实际中还需要大量的实践和运用。我们忘不了自己在这一过程中的努力与收获,我们也相信付出与收获成正比,我们付出的越多,相应地收获也就越多,学习的过程

15、中,我们要不断地改进和学习,多多交流才能更好更轻松地学习。这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师的辛勤指导下,终于顺利完成。同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 成绩: 评阅老师: 日期:附录:简易计算器设计的源程序清单#include #include #define uchar unsigned char#define uint unsigned intsbit Jia =P34; /加法标志sbit Jian =P35; /减法标志sbit Cheng=P36; /乘法

16、标志sbit Chu =P37; /除法标志int a=0,b=0,c=0;int flag=0; /输入数据标志位int flag1=0; /运算法则标志位uchar code KeyCodeTable= 0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88; /按键扫描码表unsigned char const table= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/

17、0-F /LED共阴极字码表 void Delay_ms(unsigned int t) /延时函数 unsigned int i; while(t-) for(i=0;i9) a=c/10; b=c%10; P0=tablea; P2=tableb; else P0=table0; P2=tablec; uchar Keys_Scan() /按键扫描函数 uchar sCode,kCode,k; P1 = 0xf0; if(P1&0xf0)!=0xf0) Delay_ms(30); if(P1&0xf0)!=0xf0) sCode = 0xfe; Delay_ms(20); for(k=0;

18、k4;k+) P1 = sCode; if(P1&0xf0)!=0xf0) kCode = P1; if(kCode = KeyCodeTable0) return 0; if(kCode = KeyCodeTable1) return 1; if(kCode = KeyCodeTable2) return 2; if(kCode = KeyCodeTable3) return 3; if(kCode = KeyCodeTable4) return 4; if(kCode = KeyCodeTable5) return 5; if(kCode = KeyCodeTable6) return 6

19、; if(kCode = KeyCodeTable7) return 7; if(kCode = KeyCodeTable8) return 8; if(kCode = KeyCodeTable9) return 9; if(kCode = KeyCodeTable10) return 10; if(kCode = KeyCodeTable11) return 11; if(kCode = KeyCodeTable12) return 12; if(kCode = KeyCodeTable13) return 13; if(kCode = KeyCodeTable14) return 14;

20、if(kCode = KeyCodeTable15) return 15; else sCode = _crol_(sCode,1); return -1;void main() /主函数 unsigned char key; P0=table0; P2=table0; flag1=0; Jia=0; Jian=0; Cheng=0; Chu=0; while (1) key = Keys_Scan(); /键盘扫描结果 switch(key) case 0: /第一行 if(flag=0) / c=a+b; c=a*b; c=a-b; c=a/b a=7; flag=1; else b=7;

21、 flag=0; P2 = tableb; break; case 1: if(flag=0) a=8; flag=1; else b=8; flag=0; P2 = table8; break; case 2: P2 = table9; if(flag=0) a=9; flag=1; else b=9; flag=0; break; case 3: flag1=3; Chu=1; break; case 4: P2 = table4; /第二行 if(flag=0) a=4; flag=1; else b=4; flag=0; break; case 5: P2 = table5; if(f

22、lag=0) a=5; flag=1; else b=5; flag=0; break; case 6: P2 = table6; if(flag=0) a=6; flag=1; else b=6; flag=0; break; case 7: flag1=2; Cheng=1; break; case 8: P2 = table1; /第三行 if(flag=0) a=1; flag=1; else b=1; flag=0; break; case 9: P2 = table2; if(flag=0) a=2; flag=1; else b=2; flag=0; break; case 10

23、: P2 = table3; if(flag=0) a=3; flag=1; else b=3; flag=0; break; case 11: flag1=1; Jian=1; break; case 12: P0=table0; /第四行 P2=table0; flag=0; flag1=0; a=0;b=0;c=0; break; case 13: P2 = table0; if(flag=0) a=0; flag=1; else b=0; flag=0; break; case 14: JiSuan(); break; case 15: flag1=0; Jia=1; break; default: break;

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

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