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

下载本文档

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

文档简介

1、基于AT89C51单片机简易计算器的设计一、设计目的2二、总体设计及功能介绍2三、硬件设计3四、软件设计4五、设计总结17参考文献:19一、设计目的单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位无符号数范围内的基本加减运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUES仿真,通过硬件实现功能。二、总体设计及功能介绍根据功能和指标要求,本系统选用MCS-51系列单片机为主控机

2、,实现对计算器的设计。具体设计及功能如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED 显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-、)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。三、硬件设计本设计选用AT89C51单片机为主控单元。显示部分:采用LED动态显示。按键部分:采用4*4集成计算

3、键盘;总电路图:实物图:四、软件设计现实生活中人们熟知的计算器,其功能主要如下:1、 键盘输入;2、 数值显示;3、 加、减、乘、除四则运算;针对上述功能,计算器软件程序要完成以下程序的设计:1、 键盘输入检测程序2、 LED显示程序3、 算术运算程序1、程序流程图2、程序清单/* 实验名称 :六位无符号数加减法简易计算器* 连接方式 : P0口-段选* 138译码器的A、B、C-P2.2、P2.3、P2.4* P1口-矩阵键盘* 键盘 :7 8 9 + * 4 5 6 - * 1 2 3 * CLR 0 = */#include/宏定义类型#define uchar unsigned cha

4、r#define uint unsigned int/-定义使用的IO口-/#define DUAN P0#define KEY P1sbit WEIA = P22;sbit WEIB = P23;sbit WEIC = P24;/段码表uchar code DUANMA10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0-9/显示的八位数据uchar xianshi8 = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/第一个数据,第二个数据,得到的数据,符号long num4 = 0, 0, 0,

5、0;/* 函数名称:Delay* 作 用:毫秒延时* 参 数:延时毫秒*/ void Delay(uint x)uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);/* 函数名称:Kbscan* 作 用:矩阵键盘扫描* 返回值 :按键行列数对应的十六进制数据*/uchar Kbscan( void )uchar sccode,recode; KEY = 0xf0; Delay(1); if(KEY != 0xf0) Delay(2); if(KEY != 0xf0) sccode = KEY & 0xf0; KEY = 0x0f; Delay(1); recode

6、= (KEY & 0x0f) | sccode; KEY = 0x0f; Delay(1);while(KEY != 0x0f); return recode;return 0;/* 函数名称:Keyval* 作 用:键值解码* 返回值 :按键对应功能值*10表示+,11表示-,12表示*,13表示/,14表示CLR,15表示=*/uchar Keyval( void )uchar key;uchar keyval = 16;/无按键 key = Kbscan();switch(key)case 0xee:keyval=7;break;case 0xde:keyval=8;break;case

7、 0xbe:keyval=9;break;case 0x7e:keyval=10;break;/ +case 0xed:keyval=4;break;case 0xdd:keyval=5;break;case 0xbd:keyval=6;break;case 0x7d:keyval=11;break;/ -case 0xeb:keyval=1;break;case 0xdb:keyval=2;break;case 0xbb:keyval=3;break;case 0x7b:keyval=12;break;/ *case 0xe7:keyval=14;break;/ CLRcase 0xd7:k

8、eyval=0;break;case 0xb7:keyval=15;break;/ = case 0x77:keyval=13;break;/ / default:break;return keyval;/* 函数名称:Ewu* 作 用:计算功能实现*/void Ewu( void )uchar getkey,i;getkey = Keyval();if(getkey 10)/按下的是数字if(num3 = 0)/没有符号,表示输入第一个数 if(num0 100000)/五位数时还可以再输入一位 num0=num0*10+getkey; if(num3 != 0)/有符号,输入第二个数 if

9、(num1 9 & getkey 16)/特殊按键按下 if(getkey = 10)/ +num3 = 1; for(i=0;i8;i+) xianshii = 0x00; if(getkey = 11)/ -num3 = 2; for(i=0;i8;i+) xianshii = 0x00; if(getkey = 12)/ *num3 = 3; for(i=0;i8;i+) xianshii = 0x00; if(getkey = 13)/ /num3 = 4; for(i=0;i8;i+) xianshii = 0x00; if(getkey = 14)/ CLR for(i=0;i4;

10、i+) numi=0;/清除数据 for(i=0;i 0) for(i=8;i0;i-) if(DIS 0) xianshii-1 = DUANMA(uchar)(DIS%10); DIS = DIS / 10; xianshi0 = 0x00; if(DIS 0;i-) if(DIS 0) xianshii-1 = DUANMA(uchar)(DIS%10); DIS = DIS / 10; xianshi0 = 0x40;/显示负号 for(i=0;i8;i+)switch(i) case 0:WEIA = 0;WEIB = 0; WEIC = 0;break; case 1:WEIA =

11、 1;WEIB = 0; WEIC = 0;break; case 2:WEIA = 0;WEIB = 1; WEIC = 0;break; case 3:WEIA = 1;WEIB = 1; WEIC = 0;break; case 4:WEIA = 0;WEIB = 0; WEIC = 1;break; case 5:WEIA = 1;WEIB = 0; WEIC = 1;break; case 6:WEIA = 0;WEIB = 1; WEIC = 1;break; case 7:WEIA = 1;WEIB = 1; WEIC = 1;break; /发送段码DUAN = xianshi

12、i; Delay(1);DUAN = 0x00; /消隐 void main( void ) while(1) Ewu(); Display(); 五、设计总结通过课程设计 ,我掌握了计算器的工作原理以及设计方法,我通过对计算器的几个模块的深入理解,我掌握了计算器的组成和制作过程,并通过自己的努力,制作出了自己的计算器,提高了我的动手能力和实践能力,同时我对单片机有了更深入的理解,也学会了使用单片机的方法,加深了对课本知识的进一步理解。加强了我思考和解决问题的能力,认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准!在设计过程中,经常会遇到一些问题,就是心里想老着这样的接法可

13、以行得通,但实际接上电路,总是实现不了。所以这几天不管是吃饭还是睡觉,脑子里总是想着如何解决这些问题,功夫不负有心人,我通过认真思考,请教同学,查找资料,最后终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。在寻找答案的过程中,我学到了很多平时缺少的东西,对于理论知识学习不够扎实的我深感“书到用时方恨少”!认真思考才能找到出路,当初没有思路,诚如举步维艰,茫茫大地,不见道路。在对理论知识梳理掌握之后,茅塞顿开,柳暗花明,思路如泉涌,高歌“条条大路通罗马”。顿悟,没有思考便无出路,雨后才能见彩虹。 失败是成功之母。不经历多次调试,

14、是不可能得到完好的程序的。至善至美,是人类永恒的追求。但是,不从忘却“金无足赤,人无完人”,我们换种思维方式,去恶亦是至善,改错亦为至美。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。实践课诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门思辨课,给了我许多道,给了我很多思,给了我莫大的空间。至于建议,一言以蔽之,大学教育当如此。我是一个急性子的人,看到那么复杂知识,我就不想做了,不过为了搞好课程设计,我硬是耐心完成每一个细节,我坚持一天呆在实验室10多个小时,虽然晚上眼睛比较酸痛,但是我感觉值。这么多天的努力没有白费,我最后很

温馨提示

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

评论

0/150

提交评论