单片机实训课设论文计算器Word格式文档下载.docx
- 文档编号:21727894
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:226.64KB
单片机实训课设论文计算器Word格式文档下载.docx
《单片机实训课设论文计算器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机实训课设论文计算器Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
1.2计算器的分类
软件形式的计算一般可分为三类:
常见计算器,专用计算器,综合功能计算器。
(1)常见的计算器又有四类:
①算术型计算器——可进行加、减、乘、除等简单的四则运算,又称简单计算器。
②科学型计算器——可进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。
③程序员计算器——专门为程序员设计的计算器,主要特点是支持And,Or,Not,Xor:
最基本的与或非和异或操作,移位操作Lsh,Rsh:
全称是LeftShift和RightShift,也就是左移和右移操作,你需要输入你要移动的位数(不能大于最大位数)RoL,RoR:
全称是RotateLeft和RotateRight,对于RoL来讲,就是向左移动一位,并将移出的那位补到最右边那位上,RoR类似。
④统计计算器--为有统计要求的人员设计的设计的计算器,可以是软件,也可以是实物。
(2)专业计算器:
除常用计算器外,还有专用计算器,专用计算器就特别多了,如个人所得税计算器,房贷计算器,油耗计算器等。
一般以软件的形式存在。
(3)综合功能计算器:
此类计算器一般都是以软件的形式存,它除了具有常用计算器的功能外,还可以由使用者自已编写程序或公式,把较复杂的运算步骤或者公式贮存起来,以后可以调用,进行多次重复的运算,甚至能打印计算过程与结果。
大多数的专用计算器的能功能它都可实现,如个人所得税计算,单位换算等都可以由使用者自行编程计算。
使用者也可到网上下载别人制作好的公式文件进行计算。
1.3课题研究的目的和意义
单片机课程设计是基本编程课程学习后的一个重要的实践,也是对我们进行的一次较为全面的程序设计编程方面的训练。
其基本目的是:
(1)培养我们理论联系实际的设计思想,训练综合运用所学的基础理论知识,培养实际分析和解决程序设计中的能力,从而使基础理论知识得到巩固和加深。
(2)通过编程实践学习掌握一般性的小型软件的开发步骤。
(3)初步理解面向对象编程的特点及分析方法。
(4)有利于逻辑思维的锻炼。
(5)有利于自学能力的培养。
2系统总体方案
2.1系统总体规划
本次实训总系统确定设计要求如下:
(1)以STC89S52为此系统的主控。
(2)用两个四位共阳数码管实时显示。
(3)以4X4键盘和4个独立按键作为输入键。
(4)用蜂鸣器作为报警器件。
总体规划流程如下图所示:
图1总体规划流程图
2.2器件介绍
2.2.1单片机STC89S52
主要性能:
51系列单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!
因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。
STC89S52系列引脚如下图所示:
图2STC89S52引脚图
芯片管脚介绍:
(1)电源引脚:
Vcc 40脚 正电源脚,工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。
GND 20脚 接地端。
(2)Pin19:
时钟XTAL1脚,Pin18:
时钟XTAL2脚,XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
图3外接晶振图
(3)复位脚:
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的0000H处开始运行程序。
(4)输入输出(I/O)引脚:
Pin39-Pin32为P0.0-P0.7输入输出脚,称为P0口,是一个8位漏极开路型双向I/O口。
内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个TTL负载电路。
通常在使用时外接上拉电阻,用来驱动多个数码管。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。
Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。
P1口能驱动4个LSTTL负载。
通常在使用时外不需要外接上拉电阻,就可以直接驱动发光二极管。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口,是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。
P1-P3端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
除此之外P3端口还用于一些专门功能,具体如下表:
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
(5)其它的控制或复用引脚:
①ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。
在访问外部数据存储器时,出现一个ALE脉冲。
对Flash存储器编程时,这个引脚用于输入编程脉冲PROG
②PSEN29该引是外部程序存储器的选通信号输出端。
当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。
但访问外部数据存储器时,将不会有脉冲输出。
③EA/Vpp31外部访问允许端。
当该引脚访问外部程序存储器时,应输入低电平。
要使AT89S51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。
对Flash存储器编程时,用于施加Vpp编程电压。
2.2.2四位数码管介绍
数码管是一种半导体发光器件,其基本单元是发光二极管。
数码管的分类:
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:
图4LED断码
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
3硬件设计
本系统设计的硬件电路主要包括主控电路、键盘输入电路、显示输出电路及报警模块。
3.1主控电路
主控电路就是STC89S52单片机的最小系统。
单片机最小系统或者称为最小应用系统,素质用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般应该包括:
单片机、复位电路、晶振电路。
复位电路:
本系统复位电路采用上电复位和手动复位两种方式,所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态,晶振电路用30PF的电容和12M晶体振荡器组成为整个电路提供时钟频率。
晶振电路:
8051单片机的时钟信号通常用两种电路形式电路得到:
内部震荡方式和外部中断方式。
在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路的起振电容值一般在5~30pf,晶振频率的典型值为12MHz,采用6MHz的情况也比较多。
内部振荡方式所得的时钟信号比较稳定,实用电路实用较多。
图5主控电路原理图
3.2输入电路
输入电路接在单片机的P1口,由4X4键盘的和4个独立按键组成。
其中4X4有0~9数字、“+”、“-”、“X”、“/”、“=”及清除“D”;
另外4个独立按键分别是平方、开方、阶乘和X的n次方特殊运算符;
可以完成整数的加、减、乘、除和平方、开方、阶乘及X的n次方等运行。
图6键盘输入电路
3.3显示电路
显示电路是用两个四位共阳数码管组成8位来动态显示,接在P0口和P2口,其中P0口是接数码管的段,P2口是接数码管的位。
驱动数码管用的是两个上拉电阻来驱动,一个10K的上拉在段选处,一个511的上拉在位选处。
通过控制这两个I/O口就可以驱动着8位数码管显示。
图7显示电路
3.4总体电路
总体电路如下:
图8总体电路图
4系统软件设计
该系统程序主要由输入模块、运算模块和显示模块组成。
编程是分模块来调试,这样方便调试方面修改,最后把各个模块集合起来联调。
这也是编程调试中最重要的一个环节也是最耗时的。
4.1系统主程序
系统主程序主要处理各模块程序,其流程图如下:
图9主程序流程图
4.2输入模块
输入模块有4X4键盘和4个独立按键组成,其流程图如下:
图10输入子程序流程图
4.3运算模块
运算模块是根据你输入的运算符来运算你输入数据的结果。
此系统有三个运算符(平方、开方和阶乘)只要就按下运算符就直接得到运算结果,剩下的运算都是等“=”按下之后才显示出结果。
其中开方和X的n次方是调用了集成环境的math函数。
此系统的运算只在整数的基础上运算。
流程图如下:
图11运算子程序流程图
4.4显示模块
显示模块是两个四位的共阳数码管动态显示,起流程图如下:
图12显示子程序流程图
5系统的仿真与调试
本设计采用单片机STC89S52做为控制器,通过编译软件KEILC51对源程序进行编译以生成HEX,并与仿真软件Proteus联调,让单片机程序控制协调各个功能模块工作。
5.1硬件调试
仿真完全实现其所需的功能以后,并在接入电源之前,用万用表对整个电路进行检查,查看是否在联线过程中是否出现问题。
检查硬件电路内容入下所示:
检查线路的焊接问题。
检查电路是否有没接的线路。
各种外围器件有没接错。
在接上电源以后看芯片是否都是在正常工作电压下工作,其它器件是否正常工作等。
6心得体会
通过这次单片机课程设计实训,让我更加深刻掌握了51单片机的原理和做实物PCB板的过程,同时也让我学习了做一个完整的项目所需要的知识与技能。
本次实训我选择的是计算器项目。
刚拿到这项目时我还没有太多的想法,后来查阅了一下相关资料及请教了一下老师,就慢慢地有自己的思路和想法。
后来就开始着手于这次的课设。
为了提高效率和成功率了,先通过软件来仿真调试电路及软件。
在软件上就比较容易完成电路的连接和调试,编写的程序也可以在仿真电路上调试,方便快捷。
有了调好的仿真图及程序,再做PCB板来,根据实物再调试。
这样会有事半功倍的效果。
此项目的程序让我最费时的是变化的显示位数,即根据你输入数的位数或运算出来的结果判定其数的位数来动态扫描显示。
经过反复的调试,最后发现问题出在两行程序的位置处,只更换这两行的位置就有不一样的效果。
所以,有些时候不单看程序的逻辑、指令等,也要换一下思维,从别的方面考虑考虑,要各方面都要想好,要严谨行事。
调好了软件就开始做硬件了,由于之前有过做硬件的检验,所以做起硬件来就很娴熟。
最后就是实物的调试了。
有个很现实的问题,就是软件仿真的板子不能完成仿真出实物的情况。
所以最后面还是要结合实物来调一下程序。
这次课设我真地学到了很多知识,也更清楚地知道实践要有扎实的理论基础,这样才能引导实践,更快地完成项目。
谢辞
两周的实训就这样匆匆而过,被时间刻印下来的除了昨日历历在目的实训情景还有我的无限感恩。
要感激在平时学习中给我提供帮助的老师、学长及其他的同学,感激他们在我困惑时的指点迷津。
此外,感谢我们学院为我们提供这次机会。
感谢我的同学在实训与调试过程中给予的帮助,有了他们的帮助,我少走了很多的弯路。
同时也要感谢科协、感谢实验室,感谢它们在我们实训过程中为我们提供的动手的场地与器材,是它们让我们有了更多的条件去学习,让我们有了更多锻炼自己的机会,让我们学到了很多很多。
学校开展实训这样的课题,使我受益匪浅,从中使我在很短的时间里学到了很多很书本上没有的知识,而且让我对以前学过的知识有了更深刻的印象,同时也发现了自己知识的一些缺陷,因而我还要感谢学校,感谢学校安排实训这个课程,感谢学校为了让每个同学在实训中能够学有所成学有所得而做出的努力。
参考文献
[1]李群芳.单片微型计算机与接口技术(第四版).电子工业出版社2013.5
[2]杨拴科.模拟电子技术基础(第二版).高等教育出版社2010.4
[3]谭浩强.C语言程序设计.清华大学出版社2008.3
仿真图
PCB图
附录一
程序:
/**************************************/
/***********计算器程序*************/
#include<
reg51.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voidkey();
//按键判断(读键值)
voiddelay(uchartime);
//延时
voidjudge_num(ulongnum);
//数字位数判断
voidoper();
//运算operation
voiddisplay();
//输入w位LED显示
uintnum_k=10,sym_k=0,sym_tab,sym_k_num=0;
//0~9数字标记&
符号symbol标记&
运算符号标记&
运算符号按下次数标记
ulongw,b;
//num的位w标记&
倍数b标记
ulongsave_num=0,save_num_1=0;
//存当前输入的数&
存第一次输入的数(待运算的数)
uintsave_h[8];
//从左边开始保存(即每次的最高位)
uintsave[8];
//保存拆分后的各位数(左高右底)
sbitbeep=P3^7;
sbitsq=P3^3;
//平方square运算
sbitkf=P3^4;
//开方运算
sbitjc=P3^5;
//阶乘运算
sbitsq_n=P3^6;
//n次方运算
ucharcodetable_d[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//0~9字模(共阳)
ucharcodetable_w[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//选位代码表
/*********************************/
/***********主程序************/
voidmain()
{
beep=1;
//P3.0接蜂鸣器,拉高电平
sq=1;
//平方square运算
sq_n=1;
//n次方运算
jc=1;
//阶乘运算
kf=1;
//开方运算
while
(1)
{
key();
//按键扫描(读键值)
oper();
//运算operation
judge_num(save_num);
//数字位数判断
display();
}
}
/**********运算子程序************/
voidoper()
if(num_k!
=10)//判断数字键按下
{
save_num=save_num*10+num_k;
num_k=10;
if(sym_k>
10&
&
sym_k<
15||sym_k>
20&
24)//判断运算符号按下
sym_k_num++;
if(sym_k_num==2)//运算符号连续按下两次就报警
{
beep=0;
}
sym_tab=sym_k;
save_num_1=save_num;
save_num=0;
sym_k=0;
if(sym_k==15)//判断Delete键按下
save_num_1=0;
sym_tab=0;
save[8]=0;
sym_k_num=0;
beep=1;
}
if(sym_k==16)//判断=号按下
switch(sym_tab)
case11:
save_num=save_num_1+save_num;
break;
//加法运算
case12:
save_num=save_num_1-save_num;
//减法运算
case13:
save_num=save_num_1*save_num;
break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实训课设 论文 计算器