新概念51单片机C语言-07 MCS-51 单片机的系统扩展_第1页
新概念51单片机C语言-07 MCS-51 单片机的系统扩展_第2页
新概念51单片机C语言-07 MCS-51 单片机的系统扩展_第3页
新概念51单片机C语言-07 MCS-51 单片机的系统扩展_第4页
新概念51单片机C语言-07 MCS-51 单片机的系统扩展_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章MCS-51单片机的系统扩展

本章主要介绍51系列单片机系统扩展问题,在本章中要研究较多的硬件方面及硬软结合方面的问题,本章与第一章关系密切,在学习本章内容之前,要先明确51系列单片机本身的系统资源,可先复习一下前面几章的有关单片机硬件组成方面的内容。

本章将介绍以下具体内容:

系统扩展的含义、单片机的地址总线和数据总线、常见系统扩展电路举例。§7.0前言1.系统扩展的含义单片机中虽然已经集成了CPU、I/O口、定时器、中断系统、存储器等计算机的基本部件(即系统资源),但是对一些较复杂应用系统来说有时感到以上资源中的一种或几种不够用,这就需要在单片机芯片外加相应的芯片、电路,使得有关功能得以扩充,我们称为系统扩展(即系统资源的扩充)。

2.系统扩展分类----单一功能的扩展综合功能的扩展3.系统扩展需要解决的问题----

单片机与相应芯片的接口电路连接(即地址总线、数据总线、控制总线的连接)与编程。

51系列单片机没有专用的对外地址总线和数据总线,其P0口和P2口既是通用I/O口,同时P0口还是分时复用的双向数据总线和低8位地址总线(一般需要加一级锁存器),而P2口则是高8位地址总线。4.单片机的地址总线和数据总线(1)单一功能的系统扩展

存储器的扩展(程序存储器、数据存储器、E2PROM)

外部中断源的扩展(简单门电路)

并行口的扩展(8155)(2)综合功能的扩展外部RAM、定时器、并行口扩展(8155)存储器、并行口、定时器扩展(多芯片)5.常见系统扩展电路

.程序存储器的作用----存放程序代码或常数表格

.扩展时所用芯片----一般用只读型存储器芯片(可以是EPROM、E2PROM、FLASH芯片等)。

.扩展电路连接

----用EPROM2764扩展程序存储器。

.存储器地址分析----究竟单片机输出什么地址值时,可以指向存储器中的某一单元。§7.1存储器的扩展7.1.1程序存储器的扩展2764----8KEPROM2764引脚功能A0~A12地址线CE选片OE读D0~D7数据线VPPA12A7A6A5A4A3A2A1A0D0D1D2GNDVccPGMN.CA8A9A11OEA10CED7D6D5D4D32764.扩展时所用芯片1编程脉冲输入PGM编程电源

VppD7D6D5D4D3D2D1D0G74LS373GND+5VEQ7Q6Q5Q4Q3Q2Q1Q0.扩展时所用芯片2

373引脚功能D0~D6数据输入E输出允许G数据输出Q0~Q7使能端当E=0,G=1时,

输出Q=输入D(透明);当E=0,G=0时,输出Q端不变(锁存)当E=0,输出高阻态.扩展电路连接图7-4扩展电路单片机

8031P2.0:.A8...ALEPSEN74LS373G2764A7..A0O0..O7P0.0

:P0.7OECEQ0..Q7D0..D7

8031

2764数据总线的连接:P0.0-P0.7(数据总线)--------------------------------------O0-O7地址总线的连接:P0.0-P0.7(地址总线低8位)--------------------------------

A0-A7P2.0-P2.4(地址总线高8位中的5位)-------------------------A8-A12控制总线的连接:PSEN(程序存储器允许,即读指令)--------------------------OEALE(地址锁存允许)--------------------------------接373的使能端G经过锁存器373

A12P2.4一个机器周期ALEPSENP2P0地址A8~A15地址A8~A15A0~A7A0~A7指令码指令码图7-2从外存取指令时序图一个机器周期ALEPSENP2P0地址A8~A15地址A8~A15A0~A7A0~A7指令码指令码单片机

8031P2.0:.A8...ALEPSEN74LS373G2764A7..A0O0..O7P0.0

:P0.7OECEQ0..Q7D0..D7A12P2.4.存储器地址分析----究竟单片机输出什么地址值时,可以指向存储器中的某一单元。

8031

P2.4…………P2.0P0.7…P0.0

选中单元(2732

A12A11A10A9A8A7A6A5A4A3A2A1A0)

0000000000000(0000H)00000000000001(0001H)10000000000010(0002H)20000000000011(0003H)30000000000100(0004H)4...

1111111111111(1FFFH)8K-1

可见,当单片机输出地址0000H~1FFFH时,选中2764的0~8K-1号单元,即按照上面电路扩展的4K存储器的地址范围是0000H~1FFFH(共8K字节)。

请思考:请同学们结合图7.2来分析图7.4中373的作用,并说明没有它行不行?为什么?.扩展时所用芯片.程序存储器的作用.扩展电路连接.存储器地址分析程序存储器的扩展7.1.2数据存储器的扩展.数据存储器的作用----存放数据,可改写.扩展时所用芯片----一般用静态读写型存储器芯片SRAM,也可以用E2PROM、FLASH芯片等.扩展电路连接

----用SRAM6264扩展程序存储器。.存储器地址分析----究竟单片机输出什么地址值时,可以指向存储器中的某一单元。.扩展时所用芯片6264----8KSRAM6264引脚功能A0~A12地址线CE选片OE读D0~D7数据线N.CA12A7A6A5A4A3A2A1A0D0D1D2GNDVccWECSA8A9A11OEA10CED7D6D5D4D36264写WE.扩展电路连接图7-9扩展电路数据总线的连接:P0.0~P0.7(数据总线)---------------------D0~D7

地址总线的连接:P0.0~P0.7(地址总线低8位)---------------

A0~A7P2.0~P2.4(地址总线高8位中的5位)-------A8~A12控制总线的连接:RD(读外部数据)-------------------------OEWR(写外部数据)-------------------------WEALE(地址锁存允许)--------------接373的使能端G

经过373

A86264WE单片机

8031P2.0:.A8..ALERD74LS373GA7..A0P0.0

:P0.7OECEQ0..Q7D0..D7A12P2.4WR80316264一个机器周期ALEPSENP2P0地址A8~A15A0~A7三态数据D0~D7入图7-6读外部数据RAM时序图RD一个机器周期ALEPSENP2P0地址A8~A15A0~A7数据D0~D7出图7-7写外部数据RAM时序图WR一个机器周期ALEPSENP2P0地址A8~A15A0~A7三态数据D0~D7入RD图4.4读外部数据RAM时序图单片机

8031P2.0P2.1P2.2A8A9A10ALERD74LS373G6264A7A6A5A4A3A2A1A0O0O1O2O3O4O5O6O7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7OECEQ0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7WEWRP2.7P2.3P2.4A11A12.存储器地址分析----究竟单片机输出什么地址值时,可以指向存储器中的某一单元。

8031

P2.7…P2.4…P2.0

P0.7…P0.0

选中单元(6264CEA12A11……A8A7A6A5A4A3A2A1A0)

0XX0000000000000(0000H)00XX0000000000001(0001H)10XX0000000000010(0002H)20XX0000000000011(0003H)30XX0000000000100(0004H)4...0XX1111111111111(1FFFH)8K-1

可见,当单片机输出地址0000H~1FFFH时,选中6264的0~8K-1号单元,即按照上面电路扩展的4K存储器的地址范围是0000H~1FFFH(共8K字节)。

请注意,与扩展程序存储器相比较,有以下不同点:ⅰ.存储器芯片为可读可写的静态RAM芯片,有读写控制引脚OE和WE。ⅱ.单片机输出的对数据存储器的读写控制信号分别是RD(而不再是读程序存储器时的PSEN)和WR。.扩展时所用芯片.数据存储器的作用.扩展电路连接.存储器地址分析数据存储器的扩展2864----8KE2PROM2864引脚功能A0~A12地址线CE选片OE读D0~D7数据线N.CA12A7A6A5A4A3A2A1A0D0D1D2GNDVccWEN.CA8A9A11OEA10CED7D6D5D4D32864.扩展时所用芯片写WE7.1.3E2PROM的扩展单片机

8031P2.4P2.0A8A12ALERD74LS373G2864A7A6A5A4A3A2A1A0D0D1D2D3D4D5D6D7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7OECEQ0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7WEWRP2.7PSEN&图7-92864扩展电路图

★请思考:什么情况下图7-9中的与门输出低电平,使E2PRAM的内容可以被读出,读出的是什么方面的内容?图中扩展的E2PRAM是外部数据存储器?外部程序存储器?两者都扩展了?§7.2并行口的扩展7.2.1并行口的简单扩展输出口----利用锁存器扩展并行口扩展的分类利用锁存器、缓冲器进行并行口简单扩展用可编程并行接口芯片进行扩展输入口----利用缓冲器扩展8031

1

1WRRDP2.7GQ0..Q7P0.0..P0.7D0..D7Q0..Q7D0..D7CLK图7-10并行口的简单扩展2732447.2.2可编程并行接口芯片8155的扩展一、8155的结构及引脚8155的结构8155256字节RAM三个可编程并行口PA口,8位PB口,8位PC口,6位14位二进制减法计数器8155芯片的内部结构256B静态RAM

A

定时器B

C

口APA0~PA7口BPB0~PB7PC0~PC5口CIO/MAD0~AD7CEALERDWRRESET定时器输入定时器输出接单片机接外设接外设接外设图7.11b8155引脚功能PC3PC4

PC5

IO/MCERDWRALEAD0AD1AD2AD3AD4AD5AD6AD7VssVccPC2PC1PC0PB7PB6PB5PB4PB3PB2PB1PB0PA7PA6PA5PA4PA3PA2PA1PA08155TIMERINRESETTIMEROUTAD0-AD7三态地址/数据线IO/M端口/存储器选择RD读ALE地址锁存允许写WR选片CE定时器输入TIMERIN定时器输出TIMEROUTPA0-PA7A口端口线PB0-PB7B口端口线PC0-PC5C口端口线图7.11aCECEPA0-PA7端口A的I/O线(8位,接外设)PB0-PB7端口B的I/O线(8位,接外设)PC0-PC5端口C的I/O线(6位,接外设)AD0-AD7三态地址/数据复用线(8位,一般接单片机P0口,CPU与8155之间的地址、数据、命令、状态等信号都通过它来传送)端口/存储器选择控制“0”选择片内RAM“1”选择片内I/O口TIMERIN8155片内定时器/计数器的计数脉冲输入引脚TIMEROUT8155片内定时器/计数器的计满回零输出引脚分别是对8155片内的RAM或I/O口的的读、写控制信号ALE地址锁存引脚选片RESET复位引脚IO/MRD、WRCECEI/O口地址----当IO/M加高电平时1.8155的RAM和I/O口地址RAM地址----当IO/M加低电平时此时AD0-AD7上得到的地址值是指8155的某一RAM单元的地址,地址范围是

00000000--11111111分别指向8155RAM的256个存储单元。此时AD0-AD7(仅用到低三位AD2、AD1、AD0)上得到的地址值是指8155的某一I/O口的地址,具体端口地址分配是:二、8155的工作原理AD7AD6AD5AD4AD3AD2AD1AD0I/O端口╳╳╳╳╳000命令/状态口╳╳╳╳╳001A口╳╳╳╳╳010B口╳╳╳╳╳011C口╳╳╳╳╳100计数器低8位╳╳╳╳╳101计数器高6位8155的RAM和I/O口地址分配

2.8155的使用(分二种情况:片内RAM的使用各端口的使用)

8155内RAM的使用:与一般外部数据存储器的使用基本一样,唯一区别是事先要使IO/M为低电平。8155各端口(包括定时器)的使用:A、B、C各端口可工作于不同的工作方式,使用前要进行初始化(写命令字到命令口)。8155命令字含义

PAPBPC1PC2IEAIEBTM1TM2PB、PA—A口、B口数据传送方向0—输入1—输出00—C口输入,A、B口基本I/O方式11—C口输出,A、B口基本I/O方式01—PC3-PC5输出,A口选通方式,B口基本I/O方式10—A、B口选通方式PC2、PC1—C口数据传送方向及AB口工作方式IEA、IEB—A、B口中断允许控制0—禁止1—允许TM1、TM2—定时器/计数器控制00空操作01停止定时器10记满回零停止计数11启动8155内部有一个14位减法计数器,计数脉冲来自其引脚“TIMERIN”,使用定时器前要先装入“时间常数”----14位二进制数。其格式为:8155定时器/计数器

D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0M2M1T13T12T11T10T9T8T7T6T5T4T3T2T1T0高6位计数值低8位计数值定时器方式M2M100单方波01连续方波单脉冲连续脉冲三.扩展电路的连接举例----见图7-12,接口电路非常简单,基本上是相同信号对接。80318155RESETRDWRALEP2.0P2.7P0.0P0.1P0.2P.03P0.4P0.5P0.6P0.7RESETRDWRALEIO/MCEAD0AD1AD2AD3AD4AD5AD6AD7口APA0~PA7口BPB0~PB7PC0~PC5口C图7-12★请思考:对比图7-4(2764的扩展),为什么图7-12中扩展8155时,单片机P0口输出的地址信号没有经过373锁存而是直接接到8155的地址/数据复用线上了?四.应用举例----(见教材p139例)设8155与单片机连接电路如图7-12,现要求其A口为基本输入方式,B口为基本输出方式,定时器为方波发生器,对8031输入脉冲进行24分频,编制初始化程序段。解:首先分析各端口地址----见教材P138表7-9。命令状态口地址为7F00HA口地址为7F01HB口地址为7F02HC口地址为7F03H

定时器低8位地址7F04H

定时器高6位地址7F05H8155的控制字为0C2H:PAPBPC1PC2IEAIEBTM1TM2

11000010补充题1:

根据图7-12的电路,把8155的PB口设置成输入方式,PA口设置成输出方式,并把PB口输入的数据与8031P1口输入的数据相“异或”,结果从PA口输出。试写出满足此要求的程序。MOVDPTR,#7F00HMOVA,,#0C2HMOVX@DPTR,AMOVDPTR,#7F05H24分频即计数初值为24(0000000011000B=18H)加上定时计数控制01(连续方波),则送往定时计数器的时间常数及定时控制字应为

0100000000011000B=4018HMOVA,,#40HMOVX@DPTR,AMOVDPTR,#7F04HMOVA,#18HMOVDPTR,A

TM2TM1IEBIEAPC2PC1PBPA00000001即控制字为01H,(注:此处PC2PC1取11也可以)依图7-12电路,8155的六个端口地址分配如下P2.7……………P2.0P0.7………………P0.0

I/O端口

0XXXXXX1XXXXX000命令/状态口

0XXXXXX1XXXXX001

A口

0XXXXXX1XXXXX010

B口

0XXXXXX1XXXXX011

C口

0XXXXXX1XXXXX100计数器低8位

0XXXXXX1XXXXX101计数器高6位地址7F00H7F01H7F02H7F03H7F04H7F05H解:根据题目要求,要先初始化8155(设置其端口的输入输出方式----这里PB口输入,PA口输出),其控制字如下:SJMP$所以程序如下:MOVDPTR,#7F00H;选中8155命令口MOVA,#01H;控制字01HMOVX@DPTR,A;控制字01H送8155命令口MOVDPTR,#7F02H;选中8155PB口MOVXA,@DPTR;从PB口输入数据XRLA,P1;与8031P1口内容“异或”MOVDPTR,#7F01H;选中8155PA口MOVX@DPTR,A;从PA口输出数据补充题2:根据图7-12电路,设计一段程序把8155片内RAM全部填满FFH。解:根据图7-12的电路,8155片内RAM地址是0000H~00FFH,又由于是对8155片内RAM操作,不需要初始化芯片,P2.7……………P2.0P0.7………………P0.0

RAM单元

0XXXXXX000000000

0号地址0000H

0XXXXXX011111111

255号00FFH程序如下:SJMP$MOVR7,#00H;R7作计数器,从0开始共减256次再到0MOVA,#0FFH;准备送FFHMOVDPTR,#0000H;DPTR指向第一个单元LOOP:MOVX@DPTR,A;送数INCDPTR;调整指针,指向下一个单元DJNZR7,LOOP;循环控制1.综合功能的扩展:使用具有综合功能的芯片、使用多个芯片扩展。(1)综合功能芯片扩展----8155

使用具有综合功能的可编程芯片8155来同时扩展单片机的I/O口、定时器、外部数据存储器RAM。补充(2)多芯片扩展----使用多个芯片来进行综合功能扩展。8031

373G27166116(2)6116(1)8155P0P2.2--P2.0PSENALEWRRDABCG2AG2BG1P1.0A0~A7A8~A10D7~D0D7~D0D7~D0CECECSOEA0~A7A8~A10WEWEOEOEWERDALEAD0~AD7CEY2Y1Y0+5VIO/MPAPBPCP2.3P2.4P2.5P2.6P2.7需要弄清以下几个问题:ⅰ.选片问题----选片信号的功能是:当某个芯片的选片信号接低电平时,意味着该芯片被选中,而当其接高电平时,意味着该芯片没有被选中,此时就好象该芯片没有连接到电路中(实际上是其各引脚处于高阻态)。在这部分以前所有扩展电路中所用的芯片的选片信号引脚CE,都是直接接地或者接某一P2口线的。芯片138是3:8译码器,它在这里的作用是输出选片信号:其输出端Y0、Y1、Y2分别用来选择8155、6116(1)、6116(2)。138的引脚及功能见下表:ⅱ.译码器问题----控制引脚输入引脚输出引脚G1G2AG2BCBAY7Y6Y5Y4Y3Y2Y1Y01000001111111010000111111101100010111110111000111111011110010011101111100101110111111001101011111110011101111111

138功能表

★请思考:b.为什么图中

6116(1)的地址范围是

0800H-0FFFH?而

6116(2)的地址范围是

1000H-17FFH?a.为什么图中的8155的各端口地址分别是

0000H、0001H、……、0005H,而其内部RAM地址范围是

0000H--00FFH?a.由图可知图中8155的CE接138的Y0,138的G2B、G2A和CBA分别接到8031的P2.7-P2.3,所以要选中8155,即要CE=0,则必有Y0=0,由Y0=0得到必有G1=1,且G2A=G2B=0,CBA=000,

即8031的P2.7-P2.3=00000时,选中8155,在此前提下,当8031的P0口输出地址是

00000000-11111111,且IO/M=0时,选中8155的RAM单元,所以其内部RAM地址范围是

0000H--00FFH。当8031的P0口输出地址是XXXXX000-XXXXX101,且IO/M=1时,选中8155的各端口,即P2.7……………P2.0P0.7……………P0.0端口

0000000000000000(0000H)命令口

0000000000000001(0001H)PA口

0000000000000010(0002H)PB口

0000000000000011(0003H)PC口

00000

00000000100(0004H)计数器低

0000000000000101(0005H)计数器高所以8155的各端口地址分别是

0000H、0001H、……、0005H。b.同理可得6116(1)和6116(2)的地址范围分别是0800H-0FFFH和1000H-17FFH:ⅰ.图中6116(1)的CE接138的Y1,所以要选中6116(1),则必有Y1=0,由Y1=0得必有G1=1,且G2A=G2B=0,CBA=001,

即8031的P2.7-P2.3=00001时,选中6116(1),在此前提下,当8031的P2.2-P2.0,P0.7-P0.0输出地址

00000000000-11111111111时,选中6116(1)中的某一个单元,也即6116(1)

的地址范围是:

0000100000000000-000011111111

1111

0800H-0FFFH(共2K)。ⅱ同样分析可知6116(2)的地址范围是1000H-17FFH

7.4.1显示器及接口一、LED结构与原理DpgfedcbaD7D6D5D4D3D2D1D0+5VDpgfedcba共阳极如共阳极时,输出11111000

即F8H时,显示“7”。字型表见表5.9。Dpgfedcba共阴极abcdefg7.4键盘及显示接口(见教材p146~153)二、LED接口(分静态、动态)ⅰ.静态LED----亮度大,硬件、软件相对简单,可以用并行或串行方式。8031

WRP2.7P2.6aDp373P0aDp373≥11≥117-15并行输出的静态显示电路ⅱ.动态LED—分时使各数码管轮流点亮,硬件简单。8155同相驱动反向驱动C5C4C3C2C1C0PB0PB1....PB7PA0PA1..PA5图7-17扫描式显示电路共阴极数码管原理:

8155的PB口输出字型码到所有数码管的a~g各段(1—亮,0—暗),

PA口输出位选字,选中某一个数码管(因为加了一级反相器,所以1—亮,0—暗),使该数码管显示相应的字型,其余数码管不亮。轮流点亮每个数码管并不断扫描,最后各数码管得到稳定的字型显示。参考程序MOD:MOVR0,#CWR;指向8155命令口MOVA,#03H;设命令字,PA口、PB口输出MOVX@R0,A;初始化8155DIR:MOVR0,#DIS0;指向片内显示缓冲区首地址MOVR3,#01H;选中C0数码管00000001ACALLDL1;调延时子程序MOVA,R3;INCDPTR;指向8155的PB口LD0:MOVDPTR,#POA;指向8155的PA口MOVA,@R0;取要显示的数MOVCA,@A+PC;查表求得字型码MOVX@DPTR,A;送字型码(段值)MOVX@DPTR,A;送位扫描值ADDA,#0DH;加上偏移量INCR0;指向下一个要显示的数MOVA,R3JBACC.5,ELD1;判断扫描到C5数码管没有ELD1:RETMOVR3,ADSEG:DB3FH,06H,5BH,4FH,66H,6DH★请思考:LED静态、动态接口分别有什么特点?RLA;未扫描到C5,扫描码左移1位AJMPLD0DSEG1:DB7DH,07H,7FH,67H,77H,7CHDSEG2:DB39H,5EH,79H,71HELD1:MOVR7,#02H;延时子程序DL:MOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DLRET7.4.2.键盘及接口----扫描(判断哪个键按下)、去抖动、判断按键是否抬起(以防止重复进行键处理)。

前沿抖动后沿抖动键按下闭合稳定键释放

a.键盘接口要解决的问题一、键盘工作原理8031+5VI/OP1R╳8

b.独立式键盘工作原理★请思考:什么是键抖动?为什么键盘要考虑去抖动?一般常用哪两种去抖动的方法?原理----当任何一个键被按下时,与其相连的输入线被置成“0”,平时该线为“1”。键处理程序ORG2000HSTART:MOVA,#0FFH;先置P1口为“1”MOVP1,AMOVA,P1;输入键状态JNBACC.0,P0F;查询0号键JNBACC.1,P1F;查询1号键JNBACC.2,P2F;查询2号键JNBACC.3,P3F;查询3号键JNBACC.4,P4F;查询4号键JNBACC.5,P5F;查询5号键JNBACC.6,P6F;查询6号键JNBACC.7,P7F;查询7号键LJMPSTART键盘扫描P0F:LJMPPROM0;入口地址表P1F:LJMPPROM1P6F:LJMPPROM6P7F:LJMPPROM7……PROM0:…..;0号键功能程序PROM7:…..;7号键功能程序…..LJMPSTART;0号键处理完返回键盘扫描LJMPSTART;7号键处理完返回键盘扫描…......c.行列式键盘工作原理(见教材p150~151)+5V

I/O接口X3X2X1X0Y3Y2Y1Y05.1KΩ╳4特点:节省I/O口线过程:先判断有无键按下列线输出0000,然后输入行线状态,若没有键按下,则行线状态为全1(1111);若有任一键按下,则行线状态不为全(1111);再确认哪个键被按下列线逐行输出0(如1110),然后输入行线状态,若没有键按下,则行线状态为全1(1111);若有任一键按下,则行线状态不为全为1(如0111,说明右上角那个键被按下)确定每个键的键值负逻辑表示----行列线数据直接组合,上例中的各键值分别为:77H、7BH、7DH、7EH、B7H、BBH、BDH、BEH、D7H、DBH、DDH、DEH、E7H、EBH、EDH、EEH、负逻辑表示----行列线数据求反组合,上例中的各键值分别为:88H、84H、82H、81H、48H、44H、42H、41H、28H、24H、22H、21H、18H、14H、12H、11H、(2)键盘扫描的控制方式程序控制扫描方式----连续扫描定时控制扫描方式----定时扫描中断控制扫描方式----中断后扫描a.程序控制扫描方式—以8155扩展I/O口组成的行列式键盘为例+5V8155PA7PA6.....PA0PC0PC1PC2PC35.1KΩ╳4CEIO/MWRRDALEP0WRRDALEP2.7P2.080310123456789101112131415161718192021222324252627282930318155扩展I/O口组成的行列式键盘8155PA口地址7F01HPC口地址7F03H8155:PA口输出列扫描信号

PC口输入行状态信号ⅰ.判断有无键按下PA口输出00H

PC口输入行状态信号,若PC3~PC0≠1111,有键按下ⅱ.去抖动延时5~10ms后再判断有无键按下ⅲ.再确认哪个键被按下及其键号8155的PA口依次输出下列扫描字:PA7PA6PA5PA4PA3PA2PA1PA011111110FEH11111101FDH……011111117FH8155的PC口输入行状态,可能为下列之一:PC5PC4PC3PC2PC1PC0

1110╳EH

╳1101╳DH

1011╳BH

0111╳7H则每个键的键值(列行组合)FE╳E、FD╳E、FB╳E、F7╳E、EF╳E、DE╳E、BF╳E、7F╳EFE╳D、FD╳D、FB╳D、F7╳D、EF╳D、DE╳D、BF╳D、7F╳DFE╳B、FD╳B、FB╳B、F7╳B、EF╳B、DE╳B、BF╳B、7F╳BFE╳7、FD╳7、FB╳7、F7╳7、EF╳7、DE╳7、BF╳7、7F╳7每个键的键号(自己安排)N=行首键号+列号ⅳ.判断按键是否抬起(以防止重复进行键处理)等待键释放后再进行进一步处理。键扫描程序框图入口有键按下?延时12ms有键按下?①①NYNY键号入栈保存按键抬起?NY键号送A返回ORG1000HKEY1:ACALLKS1;调用判断有无键按下子程序JNZLK1;有键按下,转去抖动AJMPKEY1;无键按下,返回LK1:ACALLTM12S;延时12msACALLKS1;再查有无键按下JNZLK2;确实有键按下,逐行扫描,确定具体键AJMPKEY1;无键按下,返回LK2:MOVR2,#0FEH;首列扫描字送R2

MOVR4,#00H;首列号R4LK4:MOVDPTR,#7F01H;首列扫描字送8155的PA口MOVA,R2;第一列扫描MOVX@DPTR,A;使第i列为0(R2中Di位为0)INCDPTRINCDPTR;指向8155的PC口MOVXA,@DPTR;读入行状态JBACC.0,LONE;0行无键按下,转查1行LONE:JBACC.1,LTWO;1行无键按下,转查2行MOVA,#00H;0行有键按下,行首键号#00H送AAJMPLKP;求键号LTWO:JBACC.2,LTHR;2行无键按下,转查3行MOVA,#08H;1行有键按下,行首键号#08H送AAJMP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论