单片机计算器2.docx

上传人:b****7 文档编号:10147100 上传时间:2023-02-08 格式:DOCX 页数:25 大小:239.33KB
下载 相关 举报
单片机计算器2.docx_第1页
第1页 / 共25页
单片机计算器2.docx_第2页
第2页 / 共25页
单片机计算器2.docx_第3页
第3页 / 共25页
单片机计算器2.docx_第4页
第4页 / 共25页
单片机计算器2.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机计算器2.docx

《单片机计算器2.docx》由会员分享,可在线阅读,更多相关《单片机计算器2.docx(25页珍藏版)》请在冰豆网上搜索。

单片机计算器2.docx

单片机计算器2

单片机原理及应用

课程设计报告

 

课题:

计算器

指导老师:

班级:

学号:

姓名:

设计时间:

2008.9.17~10.10

目录

第一章摘要…………..……………………………………………………..2

第二章设计原理及思路…………………………………………………...4

2.1实验器材………………………………………………………………4

2.2实验思路………………………………………………………………4

2.3实验程序………………………………………………………………5

2.3.1主程序…………………………………………………………5

2.3.2按键程序….……………………………………………………6

2.3.3显示程序…………………………………………………….8

2.3.4计算程序……………………………………….…………..9

第三章器件介绍………………………………….……………………10

.3.1AT89C51简介……………………………….………………………10

3.28155简介…………………………………………………………11

3.3LED显示器简介………………………………………………………13

第四章实验电路图………………………………………………………11

4.1总电路图………………………………………………………….15

4.2AT89C51单片机原理图……………………………………………….15

4.38155原理图……………………………………………………….16

4.4数码管电路图……………………………………………………….16

4.5晶振电路图……………………………………………………..…..17

4.6复位电路图……………………………………………………..…..17

心得与体会……………………………………………………………….17

附录……………………………………………………………………….18

第一章摘要

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:

一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可。

用它来做一些控制电器一类不是很复杂的工作足矣了。

我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!

......它主要是作为控制部分的核心部件。

它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。

单片机是靠程序的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。

一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!

但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!

只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!

   由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要用呢?

很多高级的语言已经达到了可视化编程的水平为什么不用呢?

原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。

一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!

对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。

单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。

一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。

不过,这种电脑,通常是指个人计算机,简称PC机。

它由主机、键盘、显示器等组成。

还有一类计算机,大多数人却不怎么熟悉。

这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。

顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。

因为它体积小,通常都藏在被控机械的“肚子”里。

它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。

究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。

第二章设计原理及思路

2.1实验器材

AT89C51、8155H、八位一体数码管7SEG-MPX4-CC.驱动74LS240四片、电阻电感若干。

2.2实验思路

以单片机的P1口为输入口,再由P0口经8155扩展输出口,在74LS240芯片的驱动下,由数码管显示出数据。

该过程的顺利进行,是依靠在单片机内部编写的控制程序来实现的。

在此实验设计中,主程序是由3个小程序组成,分别是显示程序、计算程序和键盘扫描程序。

程序开始运行时,进入最初状态。

数码管显示为0。

当有键按下时,系统通过一个延迟程序检测是否真的有键按下,如若的确有键按下,则开始运行键盘扫描程序,通过对键盘行列高低电平的检测,判断出是哪个键按下,然后通过单片机控制,在数码管上显示出该输入的数。

在其间根据需要,分别调用显示程序和计算程序。

下图为AT89C51单片机的引脚图:

图1AT89C51的引脚图

2.3实验程序

2.3.1主程序

#include

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharsymbol=0;

longxx,yy;

longflag;

inttemp=0;

longchange();/*将数组转换为数*/

voidmain()

{

ucharb,i;

while

(1)

{

display();//调用显示程序//

P1=0xf0;

if((P1&0xf0)!

=0xf0);//判断是否有按键//

{

delay10ms();

if((P1&0xf0)!

=0xf0)

{

b=gotkey();

if(b>=0&&b<=9)

{

if(temp!

=0)

{

del();

temp=0;

}

for(i=8;i>0;i--)

huantab[i]=huantab[i-1];

huantab[0]=b;

}

else

if(b==0xff)

{

del();

xx=0;

yy=0;

}

elseif(b=='=')

{

yy=change();

flag=compute(xx,yy,symbol);

huantab[0]=flag%10;;

huantab[1]=flag%100/10;

huantab[2]=flag%1000/100;

huantab[3]=flag%10000/1000;

huantab[4]=flag%100000/10000;

symbol=0;

}

else{

symbol=b;

temp=b;

xx=change();

}

while(P1&0xf0!

=0xf0);

}

}

}

}

longchange()

{

uintresult;

result=huantab[0]+huantab[1]*10+huantab[2]*100+huantab[3]*1000+huantab[4]*10000;

returnresult;

}

2.3.2按键程序

#include

#defineucharunsignedchar

voiddelay10ms(void)

{

uchari,j;

for(i=20;i>0;i--)

for(j=250;j>0;j--);

}

ucharkeyscan(void)//读键值程序//

{

ucharsccode,recode,keytemp=0;

P1=0xf0;

sccode=0xfe;

while(sccode!

=0xef)

{

P1=sccode;

if((P1&0xf0)!

=0xf0)

{

recode=P1&0xf0|0x0f;

keytemp|=(~sccode)+(~recode);

}

else

sccode=(sccode<<1)|0x01;

}

return(keytemp);

}

uchargotkey()//读键值//

{

ucharkey1,key;

key=keyscan();

switch(key)

{

case0x11:

key1=7;

break;

case0x21:

key1=8;

break;

case0x41:

key1=9;

break;

case0x81:

key1='/';

break;

case0x12:

key1=4;

break;

case0x22:

key1=5;

break;

case0x42:

key1=6;

break;

case0x82:

key1='*';

break;

case0x14:

key1=1;

break;

case0x24:

key1=2;

break;

case0x44:

key1=3;

break;

case0x84:

key1='-';

break;

case0x18:

key1=0xff;

break;

case0x28:

key1=0;

break;

case0x48:

key1='=';

break;

case0x88:

key1='+';

break;

}

return(key1);

}

2.3.3显示程序

/*显示程序,P2做LED的片选*/

#include

#include

#defineCON8155XBYTE[0x0100]

#definePA8155XBYTE[0x0101]

#definePB8155XBYTE[0x0102]

#defineucharunsignedchar

#defineuintunsignedint

ucharhuantab[]={0,0,0,0,0,0,0,0,};//显示的缓冲区//

ucharcodekeytab[10]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

voiddel()

{

uinta;

for(a=0;a<9;a++)

{

huantab[a]=0;

}

}

voiddisplay()//显示程序//

{

uchari,j,k,n;

ucharw,r;

CON8155=0x03;

n=0x7f;

for(i=0;i<8;i++)

{

PA8155=0x00;/*不加显示有重叠cathode为0X00,anthode为0XFF*/

if(i!

=0&&huantab[i]==0)

{

for(r=i;r<8;r++)

w+=huantab[r];

if(w==0)break;

elsePA8155=keytab[huantab[i]];

}

elsePA8155=keytab[huantab[i]];

PB8155=n;

for(j=10;j>0;j--)

for(k=50;k>0;k--);

n=(n>>1)|0x80;

w=0;

}

}

2.3.4计算程序

longcompute(longa1,longb1,charc)

{

longresult;

switch(c)

{

case'+':

result=a1+b1;

break;

case'-':

result=a1-b1;

break;

case'*':

result=a1*b1;

break;

case'/':

result=a1/b1;

break;

}

returnresult;

}

标题:

小键盘的输入函数

版本:

1.0

Target:

89S51

函数描述:

chargotkey(void)

从4ⅹ4小键盘输入数据,返回0 15

小键盘的连接方式:

1P10-----7----8----9----'/'

||||

2P11-----4----5----6----'*'

||||

3P12-----1----2----3----'-'

||||

4P13---0xff---0---'='---'+'

||||

5P14----||||

||||

6P15----------||

||

7P16---------------|

|

8P17--------------------

图2键盘指示图

第三章器件介绍

3.1AT89C51简介

AT89C51引脚说明:

VCC:

供电电压。

GND:

接地。

  P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

  P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

  P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

  RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

  /PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

  /EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

3.28155简介

8155各引脚功能说明如下:

RST:

复位信号输入端,高电平有效。

复位后,3个I/O口均为输入方式。

AD0~AD7:

三态的地址/数据总线。

与单片机的低8位地址/数据总线(P0口)相连。

单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。

读选通信号,控制对8155的读操作,低电平有效。

写选通信号,控制对8155的写操作,低电平有效。

片选信号线,低电平有效。

IO/

8155的RAM存储器或I/O口选择线。

当IO/

=0时,则选择8155的片内RAM,AD0~AD7上地址为8155中RAM单元的地址(00H~FFH);当IO/

=1时,选择8155的I/O口,AD0~AD7上的地址为8155I/O口的地址。

ALE:

地址锁存信号。

8155内部设有地址锁存器,在ALE的下降沿将单片机P0口输出的低8位地址信息及

,IO/

的状态都锁存到8155内部锁存器。

因此,P0口输出的低8位地址信号不需外接锁存器。

PA0~PA7:

8位通用I/O口,其输入、输出的流向可由程序控制。

PB0~PB7:

8位通用I/O口,功能同A口。

PC0~PC5:

有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。

TIMERIN:

定时/计数器脉冲输入端。

TIMEROUT:

定时/计数器输出端。

VCC:

+5V电源。

2、8155的地址编码及工作方式

在单片机应用系统中,8155是按外部数据存储器统一编址的,为16位地址,其高8位由片选线

提供,

=0,选中该片。

=0,IO/

=0时,选中8155片内RAM,这时8155只能作片外RAM使用,其RAM的低8位编址为00H~FFH;当

=0,IO/

=1时,选中8155的I/O口,其端口地址的低8位由AD7~AD0确定,如表6-6所示。

这时,A、B、C口的口地址低8位分别为01H、02H、03H(设地址无关位为0)。

表6-68155芯片的I/O口地址

AD7~AD0

选择I/O口

A7

A6

A5

A4

A3

A2

A1

A0

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

0

0

0

0

1

1

0

0

1

1

0

0

0

1

0

1

0

1

命令/状态寄存器

A口

B口

C口

定时器低8位

定时器高6位及方式

8155的A口、B口可工作于基本I/O方式或选通I/O方式。

C口可工作于基本I/O方式,也可作为A口、B口在选通工作方式时的状态控制信号线。

当C口作为状态控制信号时,其每位线的作用如下:

PC0:

AINTR(A口中断请求线)

PC1:

ABF(A口缓冲器满信号)PC2:

(A口选通信号)

PC3:

BINTR(B口中断请求线)PC4:

BBF(B口缓冲器满信号)

PC5:

(B口选通信号)

8155的I/O工作方式选择是通过对8155内部命令寄存器设定控制字实现的。

命令寄存器只能写入,不能读出,命令寄存器的格式如图6-16所示。

在ALT1~ALT4的不同方式下,A口、B口及C口的各位工作方式如下:

ALT1:

A口,B口为基本输入/输出,C口为输入方式。

ALT2:

A口,B口为基本输入/输出,C口为输出方式。

ALT3:

A口为选通输入/输出,B口为基本输入/输出。

PC0为AINTR,PC1为ABF,PC2为

,PC3~PC5为输出。

ALT4:

A口、B口为选通输入/输出。

PC0为AINTR,PC1为ABF,PC2为

,PC3为BINTR,PC4为BBF,PC5为

3.3LED显示器简介

数码管有共阴共阳之分,本系统采用8段共阴型LED,其原理图如下图所示,每位数码管内部有8个发光二极管,公共端由8个发光二极管的阴极并接而成,正常显示时公共端接低电平(GND),各发光二极管是否点亮取决于a-dp各引脚上是否是高电平。

LED数码管的外形结构如图a,外部有10个引脚,其中3,8脚为公共端也称位选端,其余8个引脚称为段选端,当要使某一位数码管显示某一数字((0-9中的一个)必须在这个数码管的段选端加上与数字显示数字对应的8位段选码(也称字形码),在位选端加上低电平即可。

由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。

LED有共阴极和共阳极两种。

如图b、c所示。

二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。

一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。

当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。

为了保护各段LED不被损坏,需外加限流电阻。

a.符号和引脚b.共阴极c.共阳极

图3

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1