课程设计报告
设计名称: 简易计算器
班 级:15 q通信2班
学 号:201524440213
姓 名:xxx
指导教师: 邢*
基于单片机的简易计算器设计
1设计目的
我所设计的基于ATMEL公司AT89C52单片机的简易计算器,是利用该51单片机和数码管显示设计的简易计算器。
本设计满足计算器的基本要求,可以基本的运算(加减乘除),数据归零,利用51系列单片机设计符合功能的计算器,并用LED码管显示数据,4*4的矩阵键盘实现数据输入,同时,可以在流水灯处显示出相应数字。在进行运算时,按等号键能将最后结果输送给数码管并显示出来。设计仿真和调试要用到Protues、Keil等软件。
通过对简易计算器的设计制作与调试,学习掌握
- 单片机系统的整体设计流程;
- 单片机系统的硬件、软件调试方法及相关工具的使用;
- Protues绘制电路原理图的方法
- 各种常见元器件的选择及使用。
2 设计方案
本设计采用以AT89C52单片机为核心的低成本、高精度、微型化数字显示简易计算器的硬件电路和软件设计方法。整个电路采用模块化设计,由主程序、按键子程序、延时子程序、显示子程序等模块组成。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块,利用软件方面使用C语言编程,并用Protues仿真。
(1)硬件设计:
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
通常,单片机由单个集成电路芯片构成,内部包含有计算机的基本功能部件,中央处理器,存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的计算器。
1.系统模块图为:
简易计算器按模块可化分为:
·1 单片机主控芯片
·2 矩阵键键
·3 数码管显示
·4 点亮发光二极管
2.引脚图:
3.最小系统原理图:
最小系统由复位电路、输入输出设备、电源和单片机芯片组成。
4.共阴极数码管引脚接线:
5.数码管显示部分的实现:
数码管通过PO口输入高低电平控制每个LED灯的亮灭,公共端接地线P0口接1K的上拉电阻。由于并未用到小数点显示,所以DP引脚悬空。

6.计算器用到的数字0-9的共阴极字形代码:
7.数码管与单片机连接图:
(2)软件设计
显示程序
初始化-->写命令-->写数据
*将各类函数声明都写到同一个头文件中,方便查看各个函数的参数以及功能
主控芯片如图

4.软件程序

5调试结果及说明
(1)键盘对应有效值表
(2)使用说明
键盘分布如上图所示,该计算器可以计算简单的256以内的加减乘除运算,右侧复位键为“清零”。
- 上电后,屏幕初始化。
- 计算。按下数字键,屏幕显示要运算的第一个数字,再按下符号键,然后再按下 数字键,屏幕显示要运算的第二个数字,最后按下“﹦”号键,屏幕上显示出计算结果。
如果要再次计算,可以按下“ON/C”键清零,或者按下单片机的复位键,重新初始化。
(3)实物图
例如11*11=121

最大的数字到

|
通过这次单片机课程设计,不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。设计结果能够符合题意,成功完成了此次课程设计要求,不只在乎这一结果,更加在乎的,是这个过程。这个过程中,花费了大量的时间和精力。在老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域这对我今后进一步学习及工作有极大的帮助。 然而我们也有许多不足之处。在软件编程时一定要考虑周到,要有耐心要仔细。还要与硬件相联系起来,脱离了实物一切都是假的。在理论上往往是可行的,然而当把程序烧入芯片,进行调试时就会遇到这样那样的的问题。最糟的是当我们辛苦把实物完成,而那电路有完全没反应,与我们的设想完全不同,而我们又不知道是软件问题还是硬件问题时,就要静下心来,一步一步来,从硬件的芯片开始检查是否短路等等,而软件又要不断地进行仿真调试。然而我们遇到的问题除了焊接时可能导致的短路外,还应电压不稳定或过大而导致芯片被烧毁,总而言之,我们还是缺少对芯片和各种器件的了解,无法准确的判断出什么样的现象将是由原因引起的。 以后还是要努力学习基础知识,把基础知识理解透彻,去更好的应用和实践。 |
代码:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- sbit beep=P2^3;
- uchar qian,hou;
- uchar a0=16,b0=16,c0=16,d0=16,e0=16,f0=16,wei,temp,key,i,j,k;
- uchar jia,jian,cheng,chu,dengyu,jia0,jian0,cheng0,chu0,qingling;
- uchar s0,s1,s2,s3,s4,s5;
- void delay(uchar xms);
- void display();
- void keyscan();
- void display0();
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x00};
- void delay(uchar xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
- {
- dula=0;
- P0=table[a];
- dula=1;
- dula=0;
-
- wela=0;
- P0=0xfe;
- wela=1;
- wela=0;
- delay(5);
-
- P0=table[b];
- dula=1;
- dula=0;
-
- P0=0xfd;
- wela=1;
- wela=0;
- delay(5);
-
- P0=table[c];
- dula=1;
- dula=0;
-
- P0=0xfb;
- wela=1;
- wela=0;
- delay(5);
-
- P0=table[d];
- dula=1;
- dula=0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
完整的Word格式文档51黑下载地址: