并行输入与输出实验Word文档格式.docx

上传人:b****4 文档编号:17552901 上传时间:2022-12-07 格式:DOCX 页数:18 大小:250.55KB
下载 相关 举报
并行输入与输出实验Word文档格式.docx_第1页
第1页 / 共18页
并行输入与输出实验Word文档格式.docx_第2页
第2页 / 共18页
并行输入与输出实验Word文档格式.docx_第3页
第3页 / 共18页
并行输入与输出实验Word文档格式.docx_第4页
第4页 / 共18页
并行输入与输出实验Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

并行输入与输出实验Word文档格式.docx

《并行输入与输出实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《并行输入与输出实验Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

并行输入与输出实验Word文档格式.docx

图4.4(a)是一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接AT89S52的I/O口。

从图中可以看出,独立式键盘每一按键都需要一根I/O线,占用AT89S52的硬件资源较多。

图4.4独立式键盘和矩阵式键盘

②矩阵式键盘

也称行列式键盘,因为键的数目较多,所以按键按行列组成矩阵。

图7.4(b)是由4根行线和4根列线组成的16个按键的键盘。

与独立式键盘相比,16个按键只占用了8个I/O口线,因此适用于按键较多的场合。

矩阵式键盘接口处理的内容:

A.键扫描

键盘上的键按行列组成矩阵,在行列的交点上都对应有一个键。

为判定有无键被按下(闭合健)以及被按键的位置,可使用扫描法说明查找闭合健的方法。

首先是判定有没有键被按下。

如图4.5所示,键盘的行线一端经电阻接+5V电源,另一端接单片机的输入口线。

各列线的一端接单片机的输出口线,另一端悬空。

为判定有没有键被按下,可先经输出口向所有列线输出低电平,然后再输入各行线状态。

若行线状态皆为高电平,则表明无健按下;

若行线状态中有低电平,则表明有健被按下。

图4.5键扫描示意图

然后再判定被按键的位置。

判定键位置的扫描是这样进行的:

先使输出口输出0FEH,即Y0为低电平“0”,其它列线为高电平“1”,然后输入行线状态,测试行线状态中是否有低电平的。

如果没有低电平,再使输出口输出0FDH,即Y1为“0”,其它列线为“1”,再测试行线状态。

以次类推,直检测到行线中有低电平,则闭合健找到,通过此次扫描的列线值和行线值就可以知道闭合健的位置。

B.去抖动

判断有键按下后,延时一段时间,再判断键盘状态,如果仍为有键按下状态,则认为有键按下,否则按抖动处理。

C.确定按键的键值

如图4.6所示,以键的排列顺序安排健号,则键值的计算公式为:

键值=行首号+列号

图4.6键值表

D.判断闭合键是否释放

计算键值之后,等待键释放是为了保证键的一次闭合仅进行一次处理。

二、键盘接口的控制方式

在单片机的运行过程中,扫描键盘只是CPU的工作任务之一,何时执行键盘扫描和处理,可以有两种方式:

程序扫描方式和中断扫描方式。

程序扫描是指CPU空闲时执行键盘扫描,或每隔一定时间执行一次键盘扫描,定时可由单片机的定时器完成。

中断扫描是指,当有键闭合时才向CPU发出中断请求,中断响应后执行键盘扫描程序。

三、

89S52

应用举例

图4.7硬件连接示意图

【例4.1】硬件连接如图4.7所示,编程完成如下功能:

按键按下后,对应的小灯亮,再按下,对应的小灯灭。

编程如下:

KEY:

MOVP1,#0FFH;

灯全灭

MOVP2,#0FFH;

P2口为输入状态

MOVA,P2;

读键值,键按下相应位为0

CPLA;

取反,键按下相应位为1

ANLA,#0FH;

屏蔽高4位,保留低4位

JZLRET;

全零,无键按下,返回

LCALLDEL20;

非全零,有键按下,延时,软件去抖

重读键值

CPLA

ANLA,#0FH

JBACC.0,K0;

K0按下,转K0程序

JBACC.1,K1;

K1按下,转K1程序

JBACC.2,K2;

K2按下,转K2程序

JBACC.3,K3;

K3按下,转K3程序

SJMPLRET

K0:

CPLP1.0;

P1.0状态取反,小灯LED0亮变灭,灭变亮

SJMPLRET

K1:

CPLP1.1;

P1.1状态取反,小灯LED1亮变灭,灭变亮

K2:

CPLP1.2;

P1.2状态取反,小灯LED2亮变灭,灭变亮

K3:

CPLP1.3;

P1.3状态取反,小灯LED3亮变灭,灭变亮

LRET:

RET

DEL20:

MOVR7,#27H;

延时20ms左右

LOOP1:

MOVR6,#0FFH

LOOP2:

DJNZR6,LOOP1

DJNZR7,LOOP2

RET

第三部分项目实施

一、项目实施分析

(一)硬件电路

见图4.8。

是一4×

4矩阵键盘。

图中P1.4~P1.7用于控制行线,P1.0~P1.3用于控制列线。

行、列线通过上拉电阻接+5V,没有键按下时,被钳在高电平状态。

通过发送扫描字确定键码,具体方法如下:

(1)由列线输出0,然后读入P1口的值存入内部RAM30H单元。

(2)由行线输出0,然后读入P1口的值存入内部RAM31H单元。

(3)把30H的低4位与31H的高4位的值相加存入累加器A。

(4)最后判断累加器A的值,如果累加器A的数据全为1,说明无键按下,否则说明有键按下,且累加器A的数据就是被按下键的键值(程序中对累加器A取反,目的是用JNZ指令判断是否有键按下)。

图4.8矩阵键盘与AT89S52接口连接图

(二)参考程序

键盘扫描流程图见图4.9。

图4.9键盘扫描流程

键扫描程序如下:

BOAD:

LCALLBOADD

JNZBOAD1;

无键按下转BOAD

LCALLDELAY;

调延时子程序

AJMPBOAD;

继续扫描键盘

BOAD1:

LCALLDELAY;

消除键抖动(延时子程序略)

LCALLBOADD;

确认是否有键按下

JNZBOAD2

LCALLDELAY

SJMPBOAD;

转键扫描

BOAD2:

CPLA

MOV32H,A;

取键值

BOAD3:

LCALLDELAY

LCALLBOADD

JNZBOAD3;

等待键松开

B2:

RET;

返回

获取键值子程序

BOADD:

MOVP1,#0FH;

置行线为0

MOVA,P1

MOV30H,A

MOVP1,#0F0H;

置列线为0

MOVA,P1

MOV31H,A

ANL30H,#0FH;

取列值

MOVA,30H

ANL31H,#0F0H;

取行值

ADDA,31H;

行值加列值

CPLA;

A全0无键按下

RET

键盘扫描程序的运行结果是把闭合键的键码放在32单元中。

接下来的程序是根据键码进行程序转移,转去执行该键对应的操作。

二、项目实施要求

(一)项目设备要求

1.装有KeilC51μVision2集成开发环境、编程器软件、在线下载软件的计算机。

2.单片机最小系统开发平台。

3.通用编程器

(二)项目实施步骤

1.断电,连接计算机、实验板

2.给计算机、实验板通电。

3.打开计算机,进入KeilC51开发环境。

4.正确设置通信口,连接好开发环境和实验板。

5.新建一个项目,并将该项目建立在指定的文件下。

6.新建一个文件,存储器的路径与刚才建的项目相同。

7.将新建的文件添加到项目中,保存项目。

8.在编辑窗口输入程序,对程序进行汇编、生成和下载。

9.全速运行程序,观察内部RAM32H单元的键值数据。

10.随机按下任一按键,观察RAM32单元的情况。

三、成绩评定

1.熟悉用户板,电路如图4.8所示。

10分

2.在计算机中输入并调试程序,记录调试中出现的问题。

10分

3.使用编程器将程序文件传送到用户板中,运行程序,观察内部RAM32H单元的数据。

20分

4.随机按下任一按键,观察RAM32单元的情况,并与理论分析数据进行比较。

30分

5.若改为2×

4矩阵键盘,编写程序,运行并观察RAM32H单元的数据。

小题分值

(1)10分

(2)10分

(3)20分

(4)30分

(5)30分

总分

小题得分

项目二字符显示

设计一个八位显示电路,要求8只数码管从左到右顺序显示1、2、3、4、5、6、7、8共8个字符;

将内存10H、11H、12H、13H中存放的压缩BCD码显示出来。

在单片机系统中,常用的显示器有:

发光二极管显示器,简称LED(LightEmittingDiode);

液晶显示器,简称LCD(LiquidCrystalDisplay);

荧光管显示器。

三种显示器中,以荧光管显示器亮度最高,发光二极管次之,而液晶显示器最弱,为被动显示器,必须有外光源。

一、发光二极管及LED显示器

发光二极管是由半导体发光材料做成的PN结,只要在发光二极管两端通过正向电流5-20mA就能达到正常发光。

LED的发光颜色通常有红、绿、黄、白,其外形和电气图形符号如图4.10所示。

单个LED通常是通过亮、灭来指示系统运行状态和用快速闪烁来报警。

通常所说的LED显示器由7个发光二极管组成,因此也称之为七段LED显示器,其排列形状如图4.11(a)所示。

显示器中还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。

图4.10发光二极管

LED显示器中的发光二极管共有两种连接方法:

1.共阳极接法

把发光二极管的阳极连在一起构成公共阳极,图4.11(b)所示。

使用时公共阳极接+5V。

阴极端输入低电平的段发光二极管导通点亮,输入高电平的则不点亮。

2.共阴极接法

把发光二极管的阴极连在一起构成公共阴极,图4.11(c)所示。

使用时会共阴极接地,阳极端输入高电平的段发光二极管导通点亮,输入低电平的则不点亮。

图4.11七段LED显示器

用LED显示器显示十六进制数的字型代码如表4.1所示:

表4.1十六进制数的字型代码

字型

共阳极代码

共阴极代码

C0H

3FH

9

90H

6FH

1

F9H

06H

A

88H

77H

2

A4H

5BH

B

83H

7CH

3

B0H

4FH

C

C6H

39H

4

99H

66H

D

A1H

5EH

5

92H

6DH

E

86H

79H

6

82H

7DH

F

8EH

71H

7

F8H

07H

FFH

00H

8

80H

7FH

二、七段LED显示器的工作原理

七段LED显示器需要由驱动电路驱动。

在七段LED显示器中,共阳极显示器,用低电平驱动;

共阴极显示器,用高电平驱动。

点亮显示器有静态和动态两种方式。

1.静态显示器

所谓静态显示,就是当显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。

图4.12为一个四位静态LED显示器电路。

该电路各位可独立显示,只要在该位的段选线上送相应的段码,该位就能保持响应的显示字符。

这种显示方法的每一位都需要有一个8位输出口控制。

静态显示器的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU才执行一次显示更新子程序,这样大大节省了CPU的时间,提高了CPU的工作效率;

缺点是位数较多时,所需的I/O口太多,硬件开销太大。

图4.12四位静态LED显示电路

例如在AT89S52的串行口上扩展多片串行输人并行输出的移位寄存器74LS164作为静态显示器接口,图4.13给出了8位共阳极静态显示器的逻辑接口。

设要显示的数据放在78H-7FH中。

图4.13串行扩展静态显示电路

静态显示程序如下:

DISPLAY:

MOVR7,#8;

8位显示计数器

MOVR0,#78H;

78H-7FH为显示器缓冲区

MOVDPTR,#TABLE;

显示字形码表首地址

LOOP1:

MOVA,@R0;

取出要显示的数据

INCR0;

指向缓冲区下一地址

MOVCA,@A+DPTR;

取出显示字形码

MOVSBUF,A;

送出该LED上的字形码

LOOP2:

JNBTI,LOOP2;

输出完否?

CLRTI;

完,清发送中断标志

DJNZR7,LOOP1;

8位显示未完,继续

TABLE:

DB0C0H,0F9H,0A4H,0BH,99H;

0,1,2,3,4

DB92H,82H,0FBH,80H,90H;

5,6,7,8,9

DB88H,83H,0C6H,0A1H,86H;

A,b,C,d,E

DB8EH,0FFH;

F,暗

2.动态显示器

图4.14四位动态LED显示电路

所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。

在同一时刻只有一位显示器在工作(点亮),利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。

显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。

调整电流和时间参数,可实现亮度较高较稳定的显示。

图4.14为一个4位动态LED显示器电路。

其中段选线占用一个I/O口,控制各位LED显示器所显示的字形(称为段码或字形口);

位选线需要一个I/O口,控制显示器公共极电位(称为位码或字位口)。

动态显示器的优点是节省硬件资源,成本较低。

但在控制系统运行过程中,要保证显示器正常显示,CPU必需每隔一段时间执行一次显示子程序,占用CPU大量时间,降低了CPU的工作效率,同时显示亮度较静态显示器低。

图4.15是一个动态扫描方式驱动的8只数码管显示电路,要求8只数码管从左到右顺序显示1、2、3、4、5、6、7、8共8个字符。

图4.15八位LED显示电路

反向驱动芯片ULN2803在“项目实训一”中已做详尽介绍。

电路选用共阴极数码管。

AT89S52的Pl口为位驱动口,当输出为“l”时对应的位被选中,显示字符。

Pl口的8个位中,任意时刻只能有一个输出为“l”,其他均为“0”。

P1口输出与对应显示位的关系见表4.2。

表4.2P1口输出与对应显示位的关系

端口

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

位码

01H

02H

04H

08H

10H

20H

40H

数码管

L1

L2

L3

L4

L5

L6

L7

L8

AT89S52的P2口为段驱动口,当输出为“l”时IC2的输出为“0”,对应的段“灭”;

当输出为“0”时,对应的段“亮”。

P2口与数码管笔画的对应关系见表4.3。

表4.3P2口与数码管笔画的对应关系

a

b

e

d

f

g

dp

P2.0

P2.1

P2.2

P2.3

P2.4

P2.5

P2.6

P2.7

(二)程序清单

程序清单如下:

DPLAY:

MOVR0,#78H;

显示数据缓冲区首地址送R0

MOVR3,#B;

使显示器最左边位亮

LPl:

MOVA,R3

MOVP1,A;

扫描值送P1口

MOVA,@R0;

取欲显示数据

ADDA,#0DH;

加上查表指令地址偏移量

MOVCA,@A+PC;

取出段码

MOVP2,A;

送出显示

ACALLDELAY;

调用延时子程序

INCR0;

指向下一个显示缓冲区地址

JBACC.0,LP2;

扫描到第八个显示器否?

RRA;

未到,扫描码右移1位

MOVR3,A

AJMPLPl

LP2:

TAB:

DB0C0H,0F9H,0A4H,0BOH,99H,92H;

0,1,2,3,4,5

DB82H,0F8,80H,90H,0C8H,83H;

6,7,8,9,A,B

DB0C6H,0A1H,86H,8EH;

C,D,E,F

DELAY:

MOVR7,#02H;

延时子程序

DL1:

MOVR6,#0FFH

DL2:

DJNZR6,DL2

DJNZR7,DLl

2.连接好下载线,接好电源。

3.进入Keil开发环境,在指定路径下建一个项目名称。

4.在指定的路径下建一个文件名。

5.将该文件添加到项目中,保存该项目。

6.在编辑窗口输入程序。

7.汇编、链接无误后将文件下载到目标电路。

8.设断点或全速运行程序,观察能否将存储器中的数据显示出来,否则检查程序或连线。

9.记录实验程序内容、调试过程。

10.改变延时程序的时间,观察延时时间对显示的亮度的影响,确定最佳延时时间。

11.根据参考程序,画出显示子程序的流程图。

12.修改程序,从右到左显示0—7。

13.将内存10H、11H、12H、13H中存放的压缩BCD码显示出来。

1.在计算机中输入并调试程序,记录调试中出现的问题。

2.使用编程器将程序文件传送到用户板中,运行程序,观察结果。

3.根据参考程序,画出显示子程序的流程图。

4.修改程序,从右到左显示0—7。

5.将内存10H、11H、12H、13H中存放的压缩BCD码显示出来。

(2)20分

(3)10分

讨论题4

年月日

小组负责人姓名

班级

成绩

小组成员姓名

讨论题

设计一个数码管显示电路,要求数码管以闪光方式轮流显示0~F共16个字符,闪光频率为2Hz,每个字符显示1s。

(要求显示时间用中断方式实现)

结论

创新点

参考

资料

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

当前位置:首页 > 总结汇报 > 实习总结

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

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