单片机的简易计算器毕业设计.doc
- 文档编号:4707785
- 上传时间:2023-05-07
- 格式:DOC
- 页数:35
- 大小:620KB
单片机的简易计算器毕业设计.doc
《单片机的简易计算器毕业设计.doc》由会员分享,可在线阅读,更多相关《单片机的简易计算器毕业设计.doc(35页珍藏版)》请在冰点文库上搜索。
第32页
目录
摘要 2
第一章绪论 3
第二章方案论证与设计 4
2.1设计目标和实现方法 4
2.2方案论证与设计 4
第三章硬件模块介绍 6
3.1运算模块 6
3.2单片机(AT89C51) 7
3.2.1单片机(AT89S51)的引脚功能 7
3.3.2引脚介绍 8
3.374ls245芯片 12
74ls245芯片如图3-7所示 12
3.4输入模块 12
3.4.1键盘介绍 13
3.5显示模块 14
3.5.1数码 15
3.5.2数码管的分类 15
第四章软件设计 17
4.1LED显示程序流程图设计 17
4.2读键输入程序流程图设计 17
4.3主程序流程图设计 18
第五章仿真及调试 20
总结 21
参考文献 23
附录1简易计算器源程序 24
附录2仿真电路设计图 35
摘要
计算器在人们的日常中是比较的常见的电子产品之一。
可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的八位计算器。
该设计系统是以AT89C51为单片机,用74LS245为显示位控制,P1口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,并外接驱动电路,系统采用LED数码管作为显示器,软件程序采用均采用C语言编写,便于移植与升级。
报告详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。
计算器将完成的功能有整数的加,减,乘,除等功能。
关键字计算器数码管74LS245
第一章绪论
随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。
电子产品的更新速度快就不足惊奇了,单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。
近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。
与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。
影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。
其中系统的抗干扰性能是系统可靠性的重要指标。
本设计采用80S51芯片,实现了利用单片机进行了一个简单计算器设计。
允许对输入数据进行加减乘除运算及LED显示。
如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。
另外,实例所设计的计算器是用LED数码管显示的,当然也可以用其他的器件显示,如LED显示屏,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。
设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。
第二章方案论证与设计
2.1设计目标和实现方法
为了满足计算器的基本要求,可以基本的运算(加减乘除),数据归零和出错警告提示,我们采用基于单片机设计计算器,并用LED数码管显示数据,4*4的矩阵键盘实现数据输入。
设计仿真和调试要用到Protues、Keil等软件。
2.2方案论证与设计
根据功能和指标要求,本系统选用MCS51单片机为主控机。
通过扩展必要的外围接口
电路,实现对计算器的设计。
具体设计考虑如下:
①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高故
我们采用可以进行四位数字的运算,选用8个LED数码管显示数据和结果。
②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16个按键即可。
系统模块图:
图2-1系统模块图
根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。
这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。
程序流程图如图2-2所示:
图2-2程序流程图
第三章硬件模块介绍
3.1运算模块
MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!
因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能,如图2-1所示:
图3-1单片机芯片
3.2单片机(AT89C51)
单片机是我们电子产品实现自动化、智能化必不可少的电子元器件,它的外观如图3-2所示:
图3-2单片机外观图
3.2.1单片机(AT89S51)的引脚功能
51系列单片机8031、8051及89c51/89s51均采用40Pin封装的双列直接DIP结构。
上图是它们的引脚配置:
40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用,如图3-3所示:
图3-3引脚图
3.3.2引脚介绍
3.3.2.1电源引脚
Vcc 40脚 正电源脚,工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。
GND 20脚 接地端。
3.3.2.2外接晶体引脚
外接晶体引脚如图3-4所示:
图3-4外接晶体管引脚
Pin19:
时钟XTAL1脚,Pin18:
时钟XTAL2脚,XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。
大家在购买和选用时要注意了。
如AT89C5124PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。
3.3.2.3复位
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的0000H处开始运行程序。
常用的复位电路如下图3-5所示。
图3-5复位电路图
复位操作不会对内部RAM有所影响。
当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
什么叫复位?
复位是单片机重新执行程序代码的意思。
8051的复位方式可以是自动复位,也可以是手动复位,如图3-6所示。
此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图3-6复位方式
3.3.2.4输入输出(I/O)引脚:
P39-P32为P0.0-P0.7输入输出脚,称为P0口,是一个8位漏极开路型双向I/O口。
内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。
通常在使用时外接上拉电阻,用来驱动多个数码管。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。
P1-P8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。
P1口能驱动4个LSTTL负载。
通常在使用时外不需要外接上拉电阻,就可以直接驱动发光二极管。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
P21-P28为P2.0-P2.7输入输出脚,称为P2口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
P10-P17为P3.0-P3.7输入输出脚,称为P3口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
P1-P3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
除此之外P3端口还用于一些专门功能,具体请看下表3-1:
P3引脚
兼用功能
P3.0
串行通讯输入(RXD)
P3.1
串行通讯输出(TXD)
P3.2
外部中断0(INT0)
P3.3
外部中断1(INT1)
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通WR
P3.7
外部数据存储器写选通RD
表3-1P3口功能表
3.3.2.5其它的控制或复用引脚
(1)ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。
在访问外部数据存储器时,出现一个ALE脉冲。
对Flash存储器编程时,这个引脚用于输入编程脉冲PROG
(2)PSEN29该引是外部程序存储器的选通信号输出端。
当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。
但访问外部数据存储器时,将不会有脉冲输出。
(3)EA/Vpp31外部访问允许端。
当该引脚访问外部程序存储器时,应输入低电平。
要使AT89S51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。
对Flash存储器编程时,用于施加Vpp编程电压。
3.374ls245芯片
74ls245芯片如图3-7所示:
图3-7驱动电路
74ls245是我们常见的芯片,在这里它用来驱动LED,它是8路同相三态双向总线收发器,可以双向传送数据。
74ls245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须介入74L245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)
*DIR=“1”,信号由A向B传输;(发送)当/CE为高电平时,A、B均为高阻态。
3.4输入模块
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式。
为此,我们引入了矩阵键盘的应用,采用四条I/O线作为行线,四条I/O线作为列线组成键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率,如图3-8所示:
图3-8键盘按键
3.4.1键盘介绍
每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么?
还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
当无按键闭合时,P10~P13与P14~P17之间开路;当有键闭合时,与闭合键相连的两条I/O口线之间短路。
判断有无按键按下的方法是:
第一步,置列线P14~P17为输入状态,从行线P10~P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。
第二步,行线轮流输出低电平,从列线P14~P17读入数据,若有某一列为低电平,则对应行线上有键按下。
综合一二两步的结果,可确定按键编号。
但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。
图3-9键盘电路
3.5显示模块
发光二极管LED是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。
因而作为典型的外围器件,LED显示单元是反映系统输出和操作输入的有效器件。
LED具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在单片机应用系统中获得了广泛的应用,所以在此设计中我首先选用了LED作为显示器件。
如图3-10所示:
图3-10数码显示管
3.5.1数码
数码管是一种半导体发光器件,其基本单元是发光二极管。
如图右所示:
3.5.2数码管的分类
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:
图3-11LED段码
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表3-1所示:
显示字型
g
f
e
d
c
B
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
表3-10~9七段数码管共阴级字形代码
第四章软件设计
4.1LED显示程序流程图设计
6位LED显示的程序框图如图4-1所示:
图4-1LED显示流程图
4.2读键输入程序流程图设计
为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
列扫描信号进行读入行的信号判断该列是否有列的输出——是则进行按照行列计算键盘的值,查表取得键码并返回——若否则进行再次扫描。
其程序框图如下:
图4-2程序框图
4.3主程序流程图设计
运算主程序设计
首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、清零键还是功能键(“+”“-”“*”“/”“=”),是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
运算主程序框图如3-4所示:
图4-4运算主程序框图
第五章仿真及调试
在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。
设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程和调试,然后组合起来。
这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。
根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。
这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。
功能和操作:
加减乘除运算和显示。
①上电后,屏幕初始化。
②计算。
按下数字键,屏幕显示要运算的第一个数字,再按下符号键,然后再按下
数字键,屏幕显示要运算的第二个数字,最后按下“﹦”号键,屏幕上显示出计算结果。
③如果要再次计算,可以按下“ON/C”键清零,或者按下单片机的复位键,重新初始化。
总结
经过近两个月的努力,终于顺利完成了毕业设计。
刚开始,我们头绪不是很清楚,不知道从哪里入手,但通过老师的耐心指导并和同学认真研究设计课题,跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,却积累了很多宝贵的经验。
在整个设计的过程中遇到的问题主要有以下三点,第一:
基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。
第二:
对一些常用的应用软件缺少应用,体现在画电路图和系统的仿真的时候,对这些软件的操作不熟练,浪费了很多时间。
第三:
相关知识掌握的不够全面,缺少系统设计的经验。
这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。
急于求成是不好的,我有所感受。
如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。
我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。
就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。
这一点,我坚信。
因为别人能做到的,我也一定能做到。
在此次的毕业设计中我最大的体会就是进一步认识到了理论联系实践的重要性。
一份耕耘,一份收获。
通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。
总而言之,此次毕业设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。
谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。
本次毕业设计让我学到了很多,也学会到了要怎么样去面对困难,不要对知识一知半截,要有的求实的能力,通过老师的帮助我学到了很多在平时的没有注意到的动东西及知识,更美没有深入的的去理解,通过这次我要更加的明确自己。
更要注重自己在各方面的锻炼能力,把握机会。
这次的设计非常的感谢老师们。
参考文献
[1]胡辉.单片机原理与应用.北京:
中国水利水电出版社,2007
[2]林志琦.单片机原理接口及应用(C语言版).北京:
中国水利水电出版社,2007
[3]赵克林.C语言实例教程.北京:
人民邮电出版社,2007
[4]姜承昊.最新LED驱动电路设计、应用与制造新技术新工艺实用手册.北京:
中国科学技术文献出版社,2008
[5]
[6]
附录1简易计算器源程序
//**<程序名>:
多功能计算器
//**<功能>:
可以进行6位数以内正整数的加减乘除运算,以及计时器和自定义倒计时功能。
1、Main.c
//* 头文件及宏定义
#include"includes.h"
#defineTIME0H0xFC
#defineTIME0L0x18 //定时器0溢出时间:
5ms
#defineTIME1H0x44
#defineTIME1L0x80 //定时器1溢出时间:
48ms
//*全局变量
//定时器0定时刷新LED计数
unsignedlongul_Number=0; //LED实时显示数字
unsignedcharuca_ShowCustom[6]={0x88,0x83,0xC6,0xA1,0x86,0x84};
//存放自定义显示字符
unsignedcharuc_DisCount=1; //LED时事刷新计数
bitb_ShowMode=0; //显示模式标志位
//0--数字模式,将要显示的数字赋给ul_Number便可时事显示数值
// 默认为数字模式
//1--自定义模式,该模式下自定义字符显示
//定时器1计数刷新定时(计时模式)
unsignedcharuc_TimeCount=1; //定时器1定时计数。
bitb_ClockStart=0; //定时器1显示计数标志位
externbitb_ClockOppose; //TimeOppose.c
externunsignedlongul_ClockOppose;
//防抖动标志
bitb_KeyShock=0; //键盘防抖动标志位。
//当按键中断产生时,首先判断此位 //0--执行键盘扫描及键码处理程序;1--不执行
bitb_KillShock=0; //防抖标志清除位:
0--不清除;1--清除
unsignedcharuc_KillCount=1; //抖动标志清除计数,使用定时器1
bitb_LCDClean=0; //通过设置b_LCDClean为1便可启动延时清空LED显示
unsignedcharuc_CleanCount=1; //延迟时间可在T1中断中设定
unsignedcharuc_ReportSymbol;
bitb_ReportFlash=0;
unsignedcharuca_FlashBlank[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
//* 主函数
voidmain()
{
P2=0x0F; //初始化键盘接口
TMOD=0x11; //定时器0:
模式一;定时器0:
模式一.
//定时器0,用于LCD刷新
TH0=TIME0H;
TL0=TIME0L;
TR0=1; //开启定时器0
ET
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 简易 计算器 毕业设计