第10章 基于单片机的 嵌入式接口设计 10.1 键盘接口设计 10.2 数码管(LED)显示器 10.3 液晶显示(LCD)接口设计 第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 双稳电路去抖动
软件去抖动 如果按键较多,则常用软件方法去抖动,即检测到有键按下时,则调用一个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 A MOV P1,#0FFH ANL P1,#00001111B MOV A,P1 ORL A,#11110000B CPL A RET ;A为0,表明没有按键
检测有无按键 JugeKeyBoard: LCALL JugeKeyPressed JZ JugeKeyEnd LCALL Delay10ms SETB KeyPressed;按键标志位 JugeKeyEnd: RET
按键识别,获得键盘码 JugeWhichKey: MOV ScanTimes,#4 MOV A,#11101111B ScanLoop: ORL P1,#11111111B ANL P1,A MOV WhichCol, A; WhichCol高四位放列信号 MOV A,P1 MOV InputKey, A; InputKey低四位放行信号,高四位保留 ;锁存器内容,还是原来的列信号 ORL A,#11110000B CPL A JZ ScanNextRow LJMP FindKey ScanNextRow:MOV A, WhichCol RL A MOV WhichCol, A DJNZ ScanTimes,ScanLoop CLR KeyPressed LJMP JugeKeyOver
10.2 数码管(LED)显示器 (a) 数码管外形图(b)共阴数码管 (c)共阳数码管
静态显示电路 图10-6 四位静态显示电路
动态显示电路 图10-7 四位动态显示的电路
10.2.2 LED显示驱动技术 LED的驱动问题其实是一个非常重要的问题,如果驱动器驱动能力差,显示亮度就降低。而且动态和静态显示方式对驱动电路要求是不一样的。 如果是静态显示,不需要考虑LED驱动,一般情况下只要将单片机I/O口与数码管的段代码连接,如图10-6所示电路即可。 但是动态显示就需要考虑LED驱动,因为动态显示是由段和位选信号共同配合完成的,因此必须同时考虑段和位的驱动能力,并且段的驱动能力决定位的驱动能力。 常用的驱动电路有两种,采用集成电路芯片如SN7407或采用简单的三极管放大电路
三极管放大驱动电路
非门驱动电路
10.3 液晶显示(LCD)接口设计 10.3.1 点阵式液晶显示器的基本原理 10.3.2 液晶显示器引脚 10.3.3 时序波形 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 时序波形 图10-13 写操作时序
10.3.3 时序波形 图10-14 读操作时序
10.3.4 显示模块控制字 显示开/关指令 当DB0=1时,LCD显示RAM中的内容;DB0=0时关闭显示 显示起始行(ROW)设置指令 10.3.4 显示模块控制字 显示开/关指令 当DB0=1时,LCD显示RAM中的内容;DB0=0时关闭显示 显示起始行(ROW)设置指令 页(PAGE)设置指令
10.3.4 显示模块控制字 列地址(Y Address)设置指令 读状态指令 该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下: 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.4 D/A转换器DAC0832结构 10.4.5 D/A转换器DAC0832与单片机的接口技术
10.4.1 ADC0809芯片结构 图10-17 ADC0809的引脚图
10.4.2 ADC0809的工作原理 图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与单片机的接口电路有三种形式:查询方式、中断方式和等待延时方式。这三种方式各有千秋,用户可以根据实际需要来选择
查询方式和中断方式电路 图10-19 ADC0809与单片机地连接图
等待延时方式 图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 单片机常用总线接口设计及实例 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总线的基本特征 I2C总线是由Philips公司开发的一种简单、双向、二线制、同步串行总线。它只需两根信号线(串行数据线和串行时钟线)来实现连接于总线上的器件之间的通信。由于I2C总线连线少、结构简单。因此被广泛应用于消费类电子产品、通信产品、仪器仪表及工业控制系统中 图10-26 I2C总线结构图
I2C总线特性 ◆ 仅需两根信号线:串行数据线SDA 和串行时钟线SCL。 ◆ 每个连接到总线的器件都对应一个特定的地址,采用软件寻址方式,同时总线上的每个器件确定主从关系。主控制器可用作主控发送器或主控接收器。 ◆ I2C总线是一种真正的多主机总线,含有错误检测和总线仲裁功能,可以防止2个或更多主控制器同时启动数据传输而造成数据被破坏。 ◆ 串行8 位双向数据传输的数据传送速率可由标准I2C 模式下的100Kbit/s,快速模式下的400Kbit/s,直至高速模式可高达3.4Mbit/s。 ◆ 片上的滤波器可滤除总线数据线上的毛刺,保证数据可靠传输。 ◆ 连接到同一总线上的IC 数目只受到总线的最大电容400PF限制
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 随机读操作