计算器模拟系统Word格式.docx

上传人:b****6 文档编号:8583551 上传时间:2023-05-11 格式:DOCX 页数:31 大小:239.46KB
下载 相关 举报
计算器模拟系统Word格式.docx_第1页
第1页 / 共31页
计算器模拟系统Word格式.docx_第2页
第2页 / 共31页
计算器模拟系统Word格式.docx_第3页
第3页 / 共31页
计算器模拟系统Word格式.docx_第4页
第4页 / 共31页
计算器模拟系统Word格式.docx_第5页
第5页 / 共31页
计算器模拟系统Word格式.docx_第6页
第6页 / 共31页
计算器模拟系统Word格式.docx_第7页
第7页 / 共31页
计算器模拟系统Word格式.docx_第8页
第8页 / 共31页
计算器模拟系统Word格式.docx_第9页
第9页 / 共31页
计算器模拟系统Word格式.docx_第10页
第10页 / 共31页
计算器模拟系统Word格式.docx_第11页
第11页 / 共31页
计算器模拟系统Word格式.docx_第12页
第12页 / 共31页
计算器模拟系统Word格式.docx_第13页
第13页 / 共31页
计算器模拟系统Word格式.docx_第14页
第14页 / 共31页
计算器模拟系统Word格式.docx_第15页
第15页 / 共31页
计算器模拟系统Word格式.docx_第16页
第16页 / 共31页
计算器模拟系统Word格式.docx_第17页
第17页 / 共31页
计算器模拟系统Word格式.docx_第18页
第18页 / 共31页
计算器模拟系统Word格式.docx_第19页
第19页 / 共31页
计算器模拟系统Word格式.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算器模拟系统Word格式.docx

《计算器模拟系统Word格式.docx》由会员分享,可在线阅读,更多相关《计算器模拟系统Word格式.docx(31页珍藏版)》请在冰点文库上搜索。

计算器模拟系统Word格式.docx

在一块芯片上集成了CPU,存储器RAM,ROM以及输入与输出接口电路,这种芯片习惯上被称为单片微型计算机,简称单片机。

MCS-51单片机是INTEL公司在1980年推出的高档8位单片机。

它的典型产品有:

8051,8031,8751,80C51,80C31,87C51。

"

图1AT89C51管脚示意图

AT89C51单片机由CPU,振荡器与时序电路,4个8位的I/O端口(P0,P1,P2,P3),串行口等组成。

P0口有三个功能:

1、外部扩展存储器时,当做数据总线(如图中的D0~D7为数据总线接口)

2、外部扩展存储器时,当作地址总线(如图中的A0~A7为地址总线接口)

3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:

其内部有上拉电阻。

P2口有两个功能:

1、扩展外部存储器时,当作地址总线使用

2、做一般I/O口使用,其内部有上拉电阻;

P3口有两个功能:

除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由寄存器来设置,

ALE地址锁存控制信号

PSEN外部程序存储器读选通信号

EA/VPP访问和序存储器控制信号

RST复位信号XTAL1和XTAL2外接晶振引脚VCC:

电源+5V输入VSS:

GND接地。

2.2矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键。

键盘程序流程图:

图2键盘流程图

确定矩阵式键盘上何键被按下,用“行扫描法”。

行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.判断键盘中有无键按下:

将全部行线置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交*的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

判断闭合键所在的位置:

在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:

依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交*处的按键就是闭合的按键。

把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个位,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。

图3.4×

4键盘示意图

2.3LED显示原理

LED点阵显示器亦称LED矩阵板,具有亮度高、发光均匀、可靠性好、接线简单、拼装方便等优点,能构成各种尺寸的大屏幕显示器。

因此,它被广泛应用于大型LED智能显示屏、智能仪器仪表和机电一体化设备的显示单元中,取得了较好的效果。

由于它经济、小型的显示系统,同时要求使用方便灵活,方便地组成了由多块大屏幕LED显示器构成的显示系统,该系统可广泛用于商场、车站、码头及其它公共场合。

LED显示屏由ED点阵显示器(常见型号为P2158A)构成。

它是以发光二极管为像素,按照行与列的顺序排列而成的显示器件,采用逐行(或逐列)扫描方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的脉冲信号,反复循环以上操作,就可显示各种图形或文字信息

此设计中LED数码管的显示为动态显示。

各数码管在显示过程中轮流得到送显信号,与各数码管接口的I/O口线是共用的。

动态显示优点是用元器件少,占I/O线少。

但缺点是有闪烁,必须扫描,花费CPU时间,编程复杂。

LED多数情况用于显示十进制数字,要将0~9的数字用7段显示,必须将数字转换为LED对应七段码的信息,比如,要显示“0”,就是让a、b、c、d、e和f段发光,显示“1”,让b和c段发光,等等如表所示。

然后根据LED是共阴极还是共阳极接法确定LED各输入端应接逻辑1还是逻辑0,我选用的是共阴接法,要显示“0”时,a、b、c、d、e和f段就要输入逻辑1,即其段码为3F, 

将待显示内容“翻译”为LED段码的过程,可以由软件查表方法实现译码。

2.4晶体振荡电路

MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。

这里,我们选用51单片机12MHZ的内部振荡方式,电路如下:

电容器C1,C2起稳定振荡频率,快速起振的作用,C1和C2可在20-100PF之间取,这里取30P,接线时要使晶体振荡器X1尽可能接近单片机。

图4.晶体振荡电路

3软件设计

3.1Protues仿真电路图设计

在Protues仿真中我用P1的八个管角接键盘的行和列,通过与键盘扫描程序的结合来实现其功能。

P0口通过8个上拉电阻接数码管的位选信号,P2口接数码管的片选信号。

P3口接一喇叭,当数码管显示8位数之后通过程序使其置位发出声音。

3.2软件主要程序设计

键盘扫描程序

charscankey()

{

P1=0xff;

P1_4=0;

temp=P1;

temp=temp&

0x0f;

if(temp!

=0x0f)

{

delay(20);

switch(temp)

case0x0e:

return(15);

break;

case0x0d:

return(14);

break;

case0x0b:

return(13);

case0x07:

return(12);

}

/***************************************************************/

while(temp!

此程序为键盘扫描中第一次扫描所用的程序,这段程序的主要过程为:

初始化时,将P1.4置为低电平,通过与0x0f相与来判断所按下的键,此次为扫描位于P1.4那一行的键,若相与结果为0x0e时说明P1.0所检测出的为低电平,闭合的键应为P1.4行与P1.0列的交叉处的键。

若相与结果为0x0d则P1.1所检测为低电平,闭合的键应为P1.4行与P1.1列的交叉处的键。

若相与结果为0x0b则P1.2所检测为低电平,闭合的键应为P1.4行与P1.2列的交叉处的键。

若相与结果为0x07则P1.3所检测为低电平,闭合的键应为P1.4行与P1.3列的交叉处的键。

要把16个键盘全部扫描完需要进行4次这样的逐行扫描,所用方法相同程序类似分别另P1.5,P1.6,P1.7为低电平执行相同操作,具体程序如源程序所示。

显示程序

/*码制转换:

计算结果转换为显示码*/

voidcchange(uintcnum)

uchari,j,k;

ucharn;

uchardbuffer[8]={0};

for(i=0;

i<

8;

i++)

n=cnum%10;

cnum=cnum/10;

dbuffer[i]=n;

for(j=0;

j<

j++)

if(dbuffer[7-j]!

=0)

for(k=0;

k<

=7-j;

k++)

dd[k]=dbuffer[k];

}

/*显示数字*/

voiddisnum(ucharunum)

display(0xfe,disdata[2]);

if(counter<

8)

change(dd,counter);

if(dflag==0)

indata=indata*10+unum;

dd[0]=indata%10;

if(dflag==1)

nextdata=nextdata*10+unum;

dd[0]=nextdata%10;

else

{counter=8;

alarmflag=1;

counter++;

此程序为显示程序的一部分,其同源程序代码中的数据定义部分,显示驱动程序和码制转换程序一起来实现数据在数码管中的显示。

如当第一次输入为1,第二次输入为2时,则将1在数码管中向前移一位即第二位显示管上,将2放到第一位显示管上,在通过码制转换使其转换为12来执行运算,如果继续输入数字则它们将逐个的向前移动,直到输入8为后,报警提示已不能显示更多数字。

简单运算程序

voidoperator(ucharopch)

dflag=1;

dflag=0;

cbuffer();

op=opch;

/*等号处理程序*/

voidequal()

switch(op)

case1:

nextdata=nextdata+indata;

sum=nextdata;

indata=nextdata;

indata=indata+nextdata;

sum=indata;

nextdata=indata;

lsum=lsum+sum;

此设计能实现简单运算,此程序实现加法运算,则根据程序首先通过第一次键盘扫描确定出所按下的键对应的输出数据,然后通过显示程序经数码管显示出来,接着进行键盘扫描若确定出按下的键所对应的字符还为数据则把第一次显示的数字在数码管上左移一个管子,然后把第二次扫描的数据放入右边第一个管子中,继续扫描直到确定出按下的键为“+”则保存前面所扫描的数据到缓冲区,然后接着扫描键盘直到确定出加数,最后当扫描出所按下的键为“=”时,则保存数据到缓冲区,根据程序计算出其相加结果。

并通过程序及原理图显示出来。

通过这个程序还可实现连加功能。

整个源程序还可以实现加,减,乘,除四个基本运算,具体的减,乘,除运算程序在源程序中有详细显示。

当检测出所闭和的为这些按键时,通过程序将执行相似过程最后通过数码管显示出结果。

主程序

voidmain()

t=0;

EA=1;

ET0=1;

TMOD=1;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

sum=0;

lsum=0;

display(0xfe,disdata[0]);

while

(1)

t=scankey();

alarm();

if(t!

=16)

judgekey();

}

段程序为整个源程序的主程序,包括初始化程序,开机显示0,一个循环程序,各个子程序都围绕着这个主程序来实现其功能。

4Proteus软件仿真

4.1Proteus软件简介

Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。

Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。

用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。

Proteus软件提供了可仿真数字和模拟、交流和直流等数千种元器件达30多个元件库。

虚拟仪器仪表的数量、类型和质量,是衡量仿真软件实验室是否合格的一个关键因素。

在Proteus软件中,理论上同一种仪器可以在一个电路中随意的调用。

除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似但功能更多。

这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。

这些都尽可能减少了仪器对测量结果的影响。

Proteus提供了比较丰富的测试信号用于电路的测试。

这些测试信号包括模拟信号和数字信号。

4.2Proteus软件虚拟实验的构建

单片机的课程设计中,内容一般包括了四方面,即单片机系统资源;

硬件电路的设计、组装、调试;

应用软件的编制、调试;

总调,即应用软件的链接调试,程序固化,软、硬件结合的应用系统。

任何一种单片机均提供了一定的系统资源。

对于51系列单片机来讲,其所提供的资源是以寄存器和存储器的方式体现出来的。

对于寄存器内容的查看,可以采用多种可以模拟仿真51单片机的软件来实现。

对于Keil软件来讲,C51编译器可以实现对51系列单片机所有资源的操作。

4.2.1硬件电路的设计、组装、调试

硬件电路的设计包含两部分内容:

一是系统扩展,即单片机自身的功能单元如ROM、RAM、I/O口、定时器/计数器等容量不能满足应用系统的需要时,必须在片外进行扩展,选择适当的芯片,设计相应的电路;

二是系统配置,即按照系统的要求配置外围设备,如键盘、显示器、等,要设计合适的接口电路。

很多常用的硬件电路的设计可在Proteus软件中实现,通过Proteus软件的使用,不但可以实现教材上的大部分实验。

而且可以学到硬件电路设计的方法。

4.2.2应用软件的编制、调试

使用编译软件工具时,项目开发流程和其它软件开发项目的流程极其相似。

(1)、创建一个项目,从器件库中选择目标器件,配置工具设置。

(2)、用C语言创建源程序。

(3)、用项目管理器生成应用。

(4)、修改源程序中的错误。

(5)、测试,连接应用。

4.2.3总调

软硬件联合仿真系统由一个硬件执行环境和一个软件执行环境组成,通常软件环境和硬件环境都有自己的除错和控制界面,它们整合调试可以实现系统的总调。

本系统的软件系统较大,全部采用C语言编写,除语法与逻辑差错外,当确认程序没问题时,直接下载到单片机仿真调试。

采取自下到上的方法,单独调好每一个模块,最后完成一个完整的系统调试,使单片机能够正常的安装预定的程序运行。

4.3运行效果图

被加数

加数

和值

开机显零

显示8个数

其他简单的算术运算同样可以运行出结果。

其具体仿真情况可以从Proteus仿真软件中看到。

5课程设计体会

时光如水,生命如花。

转眼间已经到了大四,毕业已经接近尾声。

可是我的心情依然久久不能平静,我回顾着三年来的辛苦努力,胸中百感交集,感慨万分。

在这一周中,我学到了很多,对单片机电子这门课的认识也进一步加深了。

从一个刚入门的学习者,渐渐的爱上了这门技术,虽然说对于单片机技术方面的知识还有很多要学习和提高,但是在这一周中我还是感受到这门课程的魅力所在。

同时我也想到了明年的毕业,我考虑着未来自己的发展方向,我也在想作为一个人所应该具备的素质。

经过两周的努力,顺利的完成了单片机课设。

这是一个磨练意志的过程。

从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。

一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;

另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术,让自己能够更加熟练的运用这些重要的机械设计软件。

当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。

需要的是细心和耐心。

在很大程度上培养了我拼搏的工作精神。

使我受益匪浅,更加明确了自己专业的方向。

这两周的时间是短暂的,但这我想我们学到的应该不仅仅是专业技术等表面上的东西,更深一层的是对人生的感悟,对未来的想法,年轻人的桀骜不驯在此时已经不在有意义,取而代之的是理性的思维。

我们应该具备什么样的能力,我们适合什么样的人生,我们应该在怎样的岗位上实现自己的人生价值,我们又应该怎么做才能对得起父母,对得起自己,对得起朋友,对得起辛勤培育我们的老师。

总之,无论我们选择怎样的人生,我们都要争取做好摆在我们面前的每一件事情!

感谢在这次课程设计过程中给予我帮助和指导的各位老师,特别是胡治国老师,感谢您孜孜不倦的为我们授业解惑,帮助我们解决一个又一个难题,无私的为我们提供一页又一页的资料;

感谢与我一道进行设计的各位同学,是你们陪我走过了这一段难忘的旅程,在我最困难的时候给了我莫大的鼓励,在这里真诚的表示感谢。

通过本次课设,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。

其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。

与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。

课设是一个通过思考、发问、自己解惑并动手、提高的过程。

我会在以后的学习中不断学习,积累经验,完善自己。

此次课程设计的结束,又是一个新开始,希望我们大家在以后的学习之中充分展现自我,努力学习新的知识,当然最重要的还是牢固掌握本专业所学习的知识。

让我们坚信自己的理想,人生的道路四通八达,但我们不渝的方向只有一个,那就是前进,永不言弃,永不退缩!

我相信,用心一定能赢得精彩!

参考文献

[1]何立民.MCS-51系列单片机应用系统设计[M].北京:

北京行天航空工业大学出版社,1990,143.-160.

[2]李华.MCS-51系列单片机实用接口计数[M].北京:

北京行天航空工业大学出版社,1993,148-158.

[3]张毅刚、彭喜源、曲春波编著。

MCS-51单片机应用设计。

哈尔滨工业大学出版社,1994,88-122

[4]李广弟等编著.单片机基础.修订本.北京:

北京航空航天大学出版社,2001,55-82

[5]张凯,马忠梅编著.MCS-51单片机综合系统及设计开发.北京:

科学出版社,1996,98-122

附1源程序代码

#include"

reg51.h"

intrins.h"

#defineucharunsignedchar

#defineuintunsignedlongint

bitdflag;

bitalarmflag;

sbitP1_5=P1^5;

sbitP1_6=P1^6;

sbitP1_7=P1^7;

sbitP1_4=P1^4;

sbitp37=P3^7;

chart;

chartbit;

uintindata;

uintnextdata;

uintsum;

uintlsum;

ucharop;

uchartemp;

ucharcounter;

uchardd[8]={0,10,10,10,10,10,10,10};

uchardisdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//显示码

uchardisbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

voiddisnum(ucharunum);

voidclear();

voidequal();

voidoperator(ucharo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

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

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