54
第 10 第 第第第第第第 第第第第第第第 10.1 键键键键键键 10.2 键键键LED 键键键 10.3 键键键键LCD 键键键键 10.4 键键ADC 键键键 )、( DAC 键键 键键 10.5 键键键键键键键键键键键键键键

第 10 章 基于单片机的 嵌入式接口设计

Embed Size (px)

DESCRIPTION

第 10 章 基于单片机的 嵌入式接口设计. 10.1 键盘接口设计 10.2 数码管( LED )显示器 10.3 液晶显示( LCD )接口设计 10.4 模数( ADC )、数模( DAC )接口设计 10.5 单片机常用总线接口设计及实例. 10.1 键盘接口设计. 键盘接口电路是嵌入式系统设计非常重要的一环,是人机交互的重要界面。键盘能实现向单片机输入命令等功能. 10.1.1 键盘的工作原理. - PowerPoint PPT Presentation

Citation preview

第 10 章 基于单片机的嵌入式接口设计

10.1 键盘接口设计10.2 数码管( LED )显示器10.3 液晶显示( LCD )接口设计10.4 模数( ADC )、数模( DAC )接口设

计10.5 单片机常用总线接口设计及实例

10.1 键盘接口设计

键盘接口电路是嵌入式系统设计非常重要的一环,是人机交互的重要界面。键盘能实现向单片机输入命令等功能

10.1.1 键盘的工作原理 键盘由一组常开的按键开关组成。每个按键都被赋予一个代码,称为键码。常用的键盘按译码方法分为两种类型:编码式键盘和非编码式键盘。由于编码键盘硬件电路复杂,目前小型的嵌入式系统常采用非编码键盘。对非编码式键盘按连接方式分为独立式和矩阵式两种

按键抖动 目前,按键绝大部分是利用了机械触点的合、断作用。机械触点由于机械弹性作用的影响在闭合和断开瞬间均有抖动过程,而使电压信号出现抖动,如图 10-1 所示。抖动时间的长短与开关的机械特性有关,一般为 5ms~10 ms

在扫描键盘过程中,必须想办法消除按键抖动,否则将会引起按键被误读。消除抖动一般有硬件和软件两种方法

硬件去抖动

RC 去抖动电路

硬件去抖动

双稳电路去抖动

Vcc

Vcc

软件去抖动 如果按键较多,则常用软件方法去抖动,即检测到有键按下时,则调用一个 5ms~10ms 的延迟子程序,然后再次判断按键是否被按下,若此时判断键盘仍被按下,则认为键盘真正被按下,若此时判断键盘没有被按下,说明为键盘抖动或干扰

10.1.2 独立式按键

10.1.3 矩阵式按键 矩阵式键盘适用于按键数量较多的场合,它由行线和列线组成,按键位于行列交叉点上,由于 51 单片机输入输出口( P0 ~ P3 )都是 8 根引脚,一般情况下,单片机键盘接口电路都是利用其中一个输入输出口,故大多数情况下都是按照 4×4 构成一个 16 个按键的矩阵键盘电路。

矩阵式键盘矩阵式按键表 以 4×4 矩阵键盘为例详细说明矩阵式键盘的设计方法和技巧,在实际应用中, 4×4 键盘主要由数字 0 ~ 9 和功能键组成。这里给出一个比较常用的键盘排列方式,如下表所示。

按键表

矩阵式键盘接口电路

如何判断按键的是否被按下

采用非编码键盘, 51 单片机的 CPU 必须对所有按键进行监视,一旦发现按键按下, CPU 应通过程序加以识别,并转入相应键的处理程序,实现该键功能。 矩阵键盘按键的识别方法:让所有列线均置为低电平,检查各行电平是否有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下

如何判断具体那个键被按下

识别具体按键的方法时:逐列置低电平,其余各列置高电平,检查各行电平的变化,如果某行电平由高电平变为低电平,则可以确定此行此列交叉点的按键被按下。

键盘的编码

获得行信号JugeKeyPressed:

CLR AMOV P1,#0FFH

ANL P1,#00001111B MOV A,P1 ORL A,#11110000B CPL A RET ;A 为 0, 表明没有按键

检测有无按键JugeKeyBoard:

LCALL JugeKeyPressedJZ JugeKeyEnd

LCALL Delay10ms LCALL JugeKeyPressed JZ JugeKeyEnd SETB KeyPressed; 按键标志位JugeKeyEnd: RET

按键识别 , 获得键盘码JugeWhichKey:

MOV ScanTimes,#4MOV A,#11101111B

ScanLoop: ORL P1,#11111111BANL P1,AMOV WhichCol, A; WhichCol 高四位放列信号MOV A,P1MOV InputKey, A; InputKey 低四位放行信号 , 高四位保

留 ;锁存器内容 ,还是原来的列信号

ORL A,#11110000BCPL AJZ ScanNextRowLJMP FindKey

ScanNextRow:MOV A, WhichColRL AMOV WhichCol, ADJNZ ScanTimes,ScanLoopCLR KeyPressedLJMP JugeKeyOver

10.2 数码管( LED )显示器

( a ) 数码管外形图( b )共阴数码管 ( c )共阳数码管

静态显示电路

图 10-6 四位静态显示电路

动态显示电路

图 10-7 四位动态显示的电路

10.2.2 LED 显示驱动技术 LED 的驱动问题其实是一个非常重要的问题,如果驱动器驱动能力差,显示亮度就降低。而且动态和静态显示方式对驱动电路要求是不一样的。 如果是静态显示,不需要考虑 LED驱动,一般情况下只要将单片机 I/O 口与数码管的段代码连接,如图 10-6 所示电路即可。 但是动态显示就需要考虑 LED驱动,因为动态显示是由段和位选信号共同配合完成的,因此必须同时考虑段和位的驱动能力,并且段的驱动能力决定位的驱动能力。 常用的驱动电路有两种,采用集成电路芯片如 SN7407或采用简单的三极管放大电路

三极管放大驱动电路

1 2 3 4 5 6

A

B

C

D

654321

D

C

B

A

Title

Number RevisionSize

B

Date: 2-Jan-2006 Sheet of File: E:\ÕÅËÉ·¢±íÎÄÕÂ\Êé¸å\ǶÈëʽÉè¼ÆÊé¸å\ÕÅËÉÊé¸å\example.ddbDrawn By:

a

bf

c

g

de

dp

a

bf

c

g

de

dp

a

bf

c

g

de

dp

a

bf

c

g

de

dpCR1CR2CR3CR4

abcdefgdp

SQ29015

SQ19015

SQ39015

SQ49015

4.7K

4.7K4.7K

4.7K

CR

1

CR

2

CR

3

CR

4

CR

1C

R2

CR

3

CR

4

P10

P11

P12

P13

P14

P15

P16

P17

P20

P21P22

P23

非门驱动电路

1 2 3 4 5 6

A

B

C

D

654321

D

C

B

A

Title

Number RevisionSize

B

Date: 2-Jan-2006 Sheet of File: E:\ÕÅËÉ·¢±íÎÄÕÂ\Êé¸å\ǶÈëʽÉè¼ÆÊé¸å\ÕÅËÉÊé¸å\example.ddbDrawn By:

a

bf

c

g

de

dp

a

bf

c

g

de

dp

a

bf

c

g

de

dp

a

bf

c

g

de

dpCR1CR2CR3CR4

abcdefgdp

P1

0

P11

P1

2

P1

3

P1

4

P1

5

P1

6

P1

7

P2

0

P2

1

P2

2

P2

3

10.3 液晶显示( LCD )接口设计 10.3.1 点阵式液晶显示器的基本原理10.3.2 液晶显示器引脚10.3.3 时序波形10.3.4 显示模块控制字10.3.5 单片机和液晶模块硬件接口设计10.3.6 单片机和液晶模块的软件设计

10.3.1 点阵式液晶显示器的基本原理

图 10-11 “ 单”的点阵显示软件界面

10.3.2 液晶显示器引脚

图 10-12 液晶显示器的外围引脚图

10.3.3 时序波形

E

R/W

DB0~DB7

图 10-13 写操作时序

10.3.3 时序波形

E

R/W

DB0~DB7

图 10-14 读操作时序

10.3.4 显示模块控制字显示开 / 关指令

当 DB0=1 时, LCD 显示 RAM 中的内容; DB0=0 时关闭显示

显示起始行( ROW )设置指令

页( PAGE )设置指令

10.3.4 显示模块控制字列地址( Y Address )设置指令

读状态指令

该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:BUSY : 1-内部在工作 0- 正常状态ON/OFF : 1-显示关闭 0-显示打开RESET : 1- 复位状态 0- 正常状态 在 BUSY 和 RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。在对液晶显示模块操作之前要查询 BUSY状态,以确定是否可以对液晶显示模块进行操作

10.3.4 显示模块控制字写数据指令

读数据指令

读、写数据指令每执行一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空操作,紧接着再读才会读出所要读的单元中的数据

10.3.5 单片机和液晶模块硬件接口设计

通过单片机对 LCD显示器的显示 RAM 进行写操作就可以在液晶模块上显示相应的字符,单片机对液晶显示可以采用两种不同的访问方式,直接访问和间接访问两种,针对不同的访问方式有不同电路设计和软件设计,现分别介绍

直接访问方式

图 10-15 直接访问方式

间接访问方式

图 10-16 间接访问方式

10.4 模数( ADC )、数模( DAC )接口设计

10.4.1 ADC0809芯片结构

10.4.2 ADC0809 的工作原理

10.4.3 A/D 转换器的接口设计实例

10.4.4 D/A 转换器 DAC0832结构

10.4.5 D/A 转换器 DAC0832 与单片机的接口技术

10.4.1 ADC0809 芯片结构

图 10-17   ADC0809 的引脚图

10.4.2 ADC0809 的工作原理

CLOCK

START

ALE

ADDRESS

OUTPUTENABLE

EOC

OUTPUT

图 10-18   ADC0809 工作时序图

10.4.3 A/D 转换器的接口设计实例 由于 ADC0809 片内无时钟信号,时钟信号由 CLOCK端送入,最佳的时钟频率为 640KHZ ,在 ADC0809 与单片机的接口中,时钟信号通常由单片机的 ALE 信号 4分频得到,由于单片机的 ALE 是晶振频率的 6 分频,若单片机的晶振频率为 12MHz ,则 ALE 的 4 分频为 500KHz左右,满足 ADC0809 的 CLOCK端的频率要求,一般采用两级 D 触发器来完成,如使用芯片 74LS74 实现四分频电路。 ADC0809 与单片机的接口电路有三种形式:查询方式、中断方式和等待延时方式。这三种方式各有千秋,用户可以根据实际需要来选择

查询方式和中断方式电路ALE

START

Vref0-

Vref0+

或非门

或非门 OE

WR

RD

P2.3

VCC

CLOCK四分频ALE

D0~D7

A、B、C

P0

P2.0~2.2

IN0

IN1

IN2

IN3

IN4

IN5

IN6

IN7

非门P3.3 EOC

图 10-19   ADC0809 与单片机地连接图

等待延时方式ALE

START

Vref0-

Vref0+

或非门

或非门 OE

WR

RD

P2.3

VCC

CLOCK四分频ALE

D0~D7

A、B、C

P0

P2.0~2.2

IN0

IN1

IN2

IN3

IN4

IN5

IN6

IN7

图 10-20  等待延时方式 A/D 转换原理图

10.4.4 D/A 转换器 DAC0832 结构

图 10-21   DAC0832 的引脚图

10.4.5 D/A 转换器 DAC0832 与单片机的接口技术

常用 DAC0832 与单片机有三种基本的接口方法:即直通方式、单级缓冲器连接方式和双级缓冲器连接方式

直通方式

图 10-23  直通方式接口电路

单缓冲器连接方式

图 10-24 DAC0832 单级缓冲器方式

双级缓冲器连接方式

图 10-25  双级缓冲器连接方式

10.5 单片机常用总线接口设计及实例

10.5.1 概述

10.5.2 I2C总线的基本特征

10.5.3 I2C总线的数据传输格式

10.5.4 单片机模拟 I2C总线

10.5.5 I2C总线接口设计实例

10.5.6 单片机对 24LC256 的写操作

10.5.1 概述 在单片机应用中,单片机中的数据需要与外部器件进行通信,即单片机对外部器件进行读写操作。对外部器件读写操作一定要按照一定的数据传输接口规范来进行,数据传输接口是数据传输的硬件基础,也是数据通信、计算机网络的重要组成部分。目前的数据通信方式主要有并行和串行两种方式,并行通信基本上是按照三总线(地址总线、数据总线、控制总线)方式去实现,串行方式目前有很多种,主要有 232串行接口、SPI 接口、 I2C总线接口、 USB 接口等。 MCS-51 单片机片内集成了 4 个并行 I/O 口和一个串口,随着电子技术的快速发展,新的数据传输接口标准和协议不断涌现, 51 单片机片内并没有集成这些接口,而面临的现实问题是必须完成与这些新的接口芯片进行数据传输。为了解决这个问题必须对单片机的数据传输接口进行扩展。

10.5.2 I2C 总线的基本特征

AD、DA MCU LCD EEPROM

SCL

SDA

图 10-26   I2C 总线结构图

I2C总线是由 Philips公司开发的一种简单、双向、二线制、同步串行总线。它只需两根信号线(串行数据线和串行时钟线)来实现连接于总线上的器件之间的通信。由于 I2C总线连线少、结构简单。因此被广泛应用于消费类电子产品、通信产品、仪器仪表及工业控制系统中

◆ 仅需两根信号线:串行数据线 SDA 和串行时钟线 SCL 。◆ 每个连接到总线的器件都对应一个特定的地址,采用软件寻址方式,同时总线上的每个器件确定主从关系。主控制器可用作主控发送器或主控接收器。

◆ I2C总线是一种真正的多主机总线,含有错误检测和总线仲裁功能 , 可以防止 2 个或更多主控制器同时启动数据传输而造成数据被破坏。◆ 串行 8 位双向数据传输的数据传送速率可由标准 I2C 模式下的 100Kbit/s ,快速模式下的 400Kbit/s ,直至高速模式可高达 3.4Mbit/s 。◆ 片上的滤波器可滤除总线数据线上的毛刺,保证数据可靠传输。◆ 连接到同一总线上的 IC 数目只受到总线的最大电容 400PF限制

I2C 总线特性

10.5.3 I2C 总线的数据传输格式

图 10-29   I2C 的四个阶段

10.5.5 I2C 总线接口设计实例 I2C总线实际上已经成为一个国际标准 , 在超过 100 种不同的 IC 上实现,而且得到超过 50家公司的许可。如今利用 I2C总线接口的芯片很多,例如时钟芯片、 EEPROM芯片, IC卡等。对于所有采用 I2C总线接口的芯片其使用基本类似,基本思路都是对具有 I2C总线的芯片进行读写操作。本节以 24C256芯片为例,详细介绍 51 单片机如何实现对 I2C总线接口芯片的读写操作。

I2C总线接口芯片 24LC256

图 10-30  芯片引脚图

10.5.6 单片机对 24LC256 的读写操作

图 10-31  写操作时序

10.5.6 单片机对 24LC256 的读写操作

图 10-32  随机读操作