版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2,第11章 单片机常用接口,3,主要内容,11.1、单片机最小系统 11.2、数据存储器扩展 11.3、输入输出接口扩展 11.4、8255A可编程I/O接口扩展 11.5、单片机与外部A/D、D/A转换电路的接口 11.6、单片机与键盘的接口 11.7、单片机与LED显示器的接口 11.8、单片机与光电耦合器件的接口 11.9、单片机与继电器的接口 11.10、单片机与蜂鸣器的接口,4,11.1 单片机最小系统,概念:单片机最小系统是指能使单片机工作的、由最少器件构成的系统。 作用:作为核心模块使用在不同的设计中。针对设计的要求,在最小系统的基础上扩展多种功能单元就可以完成不同的设计。 构
2、成:一般应该包括单片机、时钟电路、复位电路。,5,使用STC12C5A60S2单片机构成的最小系统:,复位电路,晶振电路,6,最小系统作为应用的核心,可以为用户扩展提供三总线: 地址总线(AB):输出,传送单片机要访问的外设或者接口的地址信息,决定了单片机的最大寻址能力。 如果单片机提供16条地址总线,可以访问的地址空间为216,即64KB。 数据总线(DB):双向, 用来传送数据信息。通过数据总线,单片机可以和内存或其它总线器件之间传送数据。数据总线的宽度决定了一次可以操作的数据位数。 控制总线(CB):用来传送控制信号。每一个控制线上信号的传输方向是确定的、单向的,输入或者输出。,7,51
3、单片机的三总线分配:,地址总线: P2口作为高8位地址线, P0口作为低8位地址线,数据总线: P0口作为8位的数据总线,控制总线: ALE、/RD、/WR,8,11.2 数据存储器扩展,概念:数据存储器即随机访问存储器 (Random Access Memory,RAM) 特点:可以读出或写入数据,属于易失性存储器,断电后存储的数据丢失,经常用于存储程序运行过程中产生的临时数据。,动态RAM(Dynamic RAM,DRAM),静态RAM(Static RAM,SRAM),分类:,功耗低、价格相对便宜, 但是需要定时刷新才能维持信息不变,造价比DRAM高,但是不需要动态刷新, 信息一经写定就
4、不会变化,和单片机的连接简单, 无需添加辅助电路,比较常用,9,11.2.1 SRAM芯片,1存储器容量的描述方法: (1)如果数据线有8条,每个存储单元为8位,存储容量可用字节数表示。 存储容量为128KB:表示该芯片有8条数据线,128K个存储单元,每个存储单元可以存储8位二进制数据。 (2)存储容量=存储单元的个数每个存储单元存储的二进制数据位数=2MN,其中M表示该芯片的地址线条数,N表示数据线条数。 容量1K4 的存储器,有1K个存储单元,每个存储单元保存4位二进制数据,所以地址线条数为10条(210=1K),数据线有4条。,10,2SRAM芯片的引脚-IS62C256AL,(1)地
5、址线A0A14:15根地址线,标识为A0A14,也就是有32K(215=32K)个存储单元,即32KB。,(2)数据线D0D7。,(3)控制线:为输出使能引脚,和单片机的引脚相连; /WE是写使能,和单片机的/WR引脚相连; /CS片选引脚,用来选通该芯片工作。,(4)电源VCC和地GND,使用5V电源供电。,11,11.2.2 单片机和SRAM的接口,存储器的三总线分别与系统分离出的三总线对应相连。,74LS373是8位的锁存器芯片。 当LE引脚输入高电平时,D0D7的数据被传送到输出端Q0Q7; 当LE引脚引脚变为低电平,输出端的数据被锁存,输入端数据不影响输出。,引脚为三态输出使能端,低
6、电平有效。,12,【例111】在片外扩展SRAM IS62C256AL中,从713FH7148H地址连续存放一个长度为10字节的无符号数,假设该数据按照低字节存放在高地址单元、高字节存放在低地址单元的顺序存放,请编写程序,将该数据读出,对其加1后写回到原位置。,AUXR寄存器中EXTRAM位需要置1,使用片外扩展的SRAM。 该题目要完成的内容: 首先最低位单元内容加1。 如果有进位,并且10个字节没有处理结束,就要将地址减1,并将该地址单元的内容加1。 重复第2步。,13,汇编语言程序段: AUXR EQU8EH ORLAUXR,#00000010B;设置EXTRAM=1,使用片外RAM M
7、OVDPTR,#7148H ;最低字节地址7148H送DPTR寄存器 MOVXA,DPTR ;将最低字节内容读出 ADDA , #01 ;最低字节加1,并形成Cy标志位 MOVXDPTR ,A ;回写 MOVR2,#9 ;循环次数9次,将高的9个字节加进位位 DECDPL LOOP:MOVXA,DPTR ;将内容读出 ADDC A,#00H ;加进位位 MOVXDPTR,A ;将修改后的内容写回原地址 DECDPL ;修改地址指针 DJNZR2,LOOP ;判断循环是否结束,使用汇编语言编程时,低字节加1后可能会产生进位,影响Cy标志位,需要使用ADDC指令将Cy标志位加入到较高字节的求和运算
8、中。,14,C51程序: void main( ) unsigned char i,x; AUXR =AUXR | 0 x02; XBYTE0 x7148=XBYTE0 x7148+1; /将最低字节数据加1。 x=XBYTE0 x7148;/最低字节暂存至x,可以作为是否有进位的判断条件 for(i=0;i9;i+) if (x=0) /当x=0条件成立,一定有进位,否则,无进位。 XBYTE0 x7147-i=XBYTE0 x7147-i+1; / x=0成立,有进位,高字节加1 x= XBYTE0 x7147-i; /暂存该字节数据,作为下次判断进位的条件 else break;/ x=
9、0条件不成立,说明没有进位,退出循环。 while(1) ; ,而使用C51编写该程序时,首先将最低字节数据加1,之后对高的九个字节进行处理。如果较低字节的数值加1后变为0,那么一定会有进位,较高字节需要加1。如果较低字节的数值加1后不为0,较高字节不需要加1。,15,11.3 输入输出接口扩展,概念:I/O接口电路就是处在单片机I/O口和外部设备之间的电路。 作用:对单片机I/O口的信号和外部设备的信号进行协调,11.3.1 I/O接口电路的功能,实现通信速度的匹配。 实现电平匹配。 增强驱动能力。 进行数模转换、模数转换。 ,16,11.3.2 简单的I/O口扩展举例,常用的输入接口可以使
10、用三态缓冲器74LS244、74LS245,74LS245为双向、三态、8位数据缓冲器。DIR为方向控制端,当DIR为高电平时,A端输入的数据从B端输出。,74LS244为单向、三态的数据缓冲器,常用作总线驱动器。内部有8个三态驱动器,分成两组、4位,分别由 和 控制,输入为A端,输出为Y端。,17,常用的输出接口:锁存器74LS373、74LS273、74HC573,74LS373是一个带三态缓冲输出的8D触发器,也是常用的地址锁存器芯片。数据从D0D7引脚输入,从Q0-Q7引脚输出。,为输出使能信号,LE为锁存使能端,低电平锁存有效,74LS273是带有清零端的8D触发器,常用作8位地址锁
11、存器。当清零端 输入低电平时,输出端Q的数据清零。当 保持高电平时,正常工作,在CLK引脚信号的上升沿将输入端1D8D的数据传送并锁存至输出端1Q8Q。,18,【例112】使用74LS244作为输入缓冲接口,74LS273作为输出锁存接口,请编程实现:当按键KEY1按下,LED1灯点亮,其它灯熄灭,同理,当KEYi按键按下,LEDi灯点亮,其它灯熄灭。,单片机P2.0输出为低电平、/RD输出低电平,使得74LS244被选通工作,才能获取按键输入信号。所以输出地址FEFFH。,单片机P2.0输出为低电平、/WR输出低电平,使能74HC273送出LED驱动信号。地址FEFFH。,19,(1)汇编语
12、言程序段: AUXREQU 8EH ORLAUXR,#00000010B ;设置EXTRAM=1,使用片外RAM MOV DPTR,#0FEFFH ;地址送DPTR NEXT:MOVX A, DPTR ;读74LS244的数据 NOP ;延时,等待74LS244的输出恢复高阻态 NOP NOP NOP MOVX DPTR,A ;将读入的数据送出,驱动LED NOP NOP NOP NOP SJMPNEXT,该指令可以使/RD、P2.0引脚为低电平,该指令可以使/WR、P2.0引脚为低电平,20,(2)C51程序: void main( ) unsigned char temp=0; AUXR=
13、AUXR | 02 ; /设置EXTRAM=1,使用片外RAM while(1) temp=XBYTE0 xFEFF; /读入按键状态 _nop_( ); /延时,等待74LS244的输出恢复高阻状态 _nop_( ); _nop_( ); _nop_( ); XBYTE0 xFEFF= temp ; /送出数据驱动LED _nop_( ); /延时 _nop_( ); _nop_( ); _nop_( ); ,21,11.4、8255A可编程IO接口扩展,8255A: Intel公司的通用可编程并行接口芯片。这一类芯片在正常工作前需要通过编程来设置其工作方式,所以称为可编程芯片。 作用:单片
14、机的并行口数量比较少,但是需要并行口的外设比较多,所以经常需要扩展并行口供外设使用。而8255A可以提供3个并行口。,22,11.4.1 8255A内部结构和引脚功能,数据线D0D7,负责传输数据信息、状态信息和控制字,与单片机的P0.0P0.7引脚连接。 有三个8位并行I/O口,A口、B口、C口。分别对应引脚PA0PA7、PB0PB7、PC0PC7。这些引脚通常和外设相连。 3、 、 两个引脚和单片机的同名引脚相连,单片机通过这两个引脚控制数据从8255A中读取或写入8255A。 4、 是片选信号,低电平有效。只有当该引脚为低电平时,单片机与8255A之间才能通信。,RESET是复位信号输入
15、引脚,高电平有效。8255A在正常工作之前需要进行一次复位。 两位地址线A1、A0选择四个端口:A口、B口、C口、控制端口,23,8255A 的内部结构,外 设,微 处 理 器,24,8255A 端口地址表,25,11.4.2 8255A控制字,两个控制字:方式选择控制字(用来设置8255A的工作方式)和C口置位/复位控制字(设置C口某一位的状态 ) 。 两个控制字的区分标志:控制字的D7位。 当D7位为1,使用的是方式选择控制字; 当D7位为0,使用的是C口置位/复位控制字。 使用:都是写到控制字端口(A1A0=11),26,1方式选择控制字,27,2C口置位/复位控制字,28,11.4.3
16、 8255A的工作方式,8255A有三种工作方式,方式0、方式1、方式2,29,A端口有三种工作方式 方式0、方式1、方式2 B端口有二种工作方式 方式0、方式1 C端口无工作方式选择 工作于方式0,或作为A、B工作于方式1、2时的联络信号 注: 方式0(基本输入/输出):即无条件输入输出形式 方式1 (选通输入/输出):查询、单向输入输出方式 方式2(双向数据传送):查询、双向输入输出方式,30,单向无条件传送端口 A、B、C端口可单独工作于输入或输出 输出可以被锁存,但是输入不能被锁存。,一、方式0(基本输入/输出方式),31,二、方式 1(选通输入输出),功能:A、B端口作 8 位数据输
17、入或输出,C端口的特定位为A、B端口服务 应用:查询方式:C端口特定位传送状态 中断方式:C端口特定位发中断请求,32,A口方式1输入时相应的联络信号,B口方式1输入时相应的联络信号,方式1下输入端口的联络信号,对PC4置位, 会使A口的INTEA=1, 允许中断;对PC4复位, 使INTEA=0, 不允许中断,由外设发出,送给8255A 作用是将外设送来的数据锁存到8255A的输入端口,由STB信号置位,由读信号RD的上升沿复位,8255A 发出,用来向CPU发出中断申请,33,例:单片机确定有输入数据后,执行MOVX A,DPTR指令,读取8255A输入缓冲器中的数据,电路连接和时序如下:
18、,外设发来触发信号给PC4引脚,同时外设将数据送到8255数据缓冲区,8255A输入缓冲区满,8255向单片机发出中断请求信号,单片机发出读选通信号读走数据,34,A口方式1输出时相应的联络信号,B口方式1输出时相应的联络信号,方式1下输出端口的联络信号,35,由外设发出,送给8255A。作用是通知 8255A,输出端口的数据已被外设取走,可以传送下一个数据。 INTR:中断申请信号(高电平或上升沿有效) 8255A 发出, 用来向CPU发出中断申请。,方式1下输出端口的联络信号,当数据送至8255A输出缓冲器后,8255A自动发出。 表示CPU送来的数据已进入8255A输出端口,可用来通知外
19、设把数据取走。 由输出WR的上升沿置成低电平,由外设的应答ACK恢复成高电平,36,方式1下输出端口的联络信号, INTE:中断允许控制信号 作用是控制是否允许中断申请信号INTR发出 此信号无引脚引出,通过控制口对C口相应位的置位/复位设置允许或不允许。 对PC6置位, 使A口的INTEA=1, 允许中断;对PC6复位, 使INTEA=0, 不允许中断 对PC2置位, 使B口的INTEB=1, 允许中断;对PC2复位, 使INTEB=0, 不允许中断 在方式1下,作为联络信号的外部引脚PC6、PC2,不受C口按位置位/复位控制字控制,37,例:单片机通过8255A与输出设备相连,使A口工作在
20、方式1、输出方式,单片机执行输出命令MOVX DPTR,A将输出的数据送到PA口的输出锁存器,电路和时序如下:,单片机发出写命令,同时把数据输出到输出数据缓冲区,输出数据缓冲区数据满,外设查到OBFA引脚的低电平后,将数据读走,并回复应答信号,数据被取走了,8255向单片机发出中断请求,指示可以再次输出数据,38,方式2输入/输出端口的联络信号,工作在方式2时,C口有5根引脚作为A口的联络信号,是方式1下A口输入、输出联络信号的组合,39,11.4.4 8255A的应用,【例113】单片机通过8255A和字符打印机连接,编写程序段,将片内RAM地址为BUFFER的单元开始的10个字节数据传送给
21、打印机。,打印机的工作原理是: 当 引脚收到负脉冲时,数据线D7D0上的数据被锁存到打印机内部的数据缓冲区中,打印机将忙信号BUSY置1,表示正在处理输入的数据。当数据处理完毕后,将BUSY清0。,40,分析:数据传输使用8255A的A口,工作在方式0,输出。 8255A的PA7PA0与打印机的数据线D7D0连接,PC2与BUSY引脚相连,单片机可以查询PC2引脚获知打印机的状态。 8255A的端口A地址为F8FFH,C口地址FAFFH,控制字端口地址为FBFFH。,41,汇编语言程序段: APORTEQU0F8FFH CPORTEQU0FAFFH CONPORTEQU0FBFFH AUXR
22、EQU8EH,ORLAUXR,#00000010B ; 设置EXTRAM=1,使用片外RAM MOVA, #81H ; A口方式0输出,C口低4位输入、高4位输出 MOVDPTR,# CONPORT ; 控制口地址送DPTR寄存器 MOVXDPTR,A; 控制字写入控制口,对8255A初始化 NOP NOP NOP NOP NOP MOVA, #0DH ; C口置位/复位控制字,使PC6置1 MOVXDPTR,A; 控制字写入控制口,使打印机引脚为高电平 MOVR2, #10 ; 将字节数送寄存器R2 MOVR0,#BUFFER ; 数据缓冲区首地址送R0寄存器,42,L1: MOVDPTR,
23、 #CPORT; C口地址送DPTR寄存器 L2: MOVXA,DPTR; 读C口数据 ANLA, #04H ; 保留PC2的值, 可判断BUSY引脚状态。 JNZL2 ; BUSY1, 打印机处于忙状态,继续查询;BUSY=0,送出数据 MOVDPTR, #APORT ; A口地址送DPTR寄存器 MOVA,R0 ; 将存储区中数据读到A中 MOVXDPTR,A;数据通过A口输出 NOP ;短暂延时,等待数据输出、状态稳定 NOP NOP NOP NOP MOVA, #0CH; C口置位/复位控制字,使PC6为低电平 MOVDPTR,#CONPORT ; 控制口地址送DPTR寄存器 MOVX
24、DPTR,A; 控制字写入控制口 NOP NOP NOP NOP NOP MOVA, #0DH ; C口置位/复位控制字,使PC6为高电平 MOVXDPTR,A; 控制字写入控制口 INCR0 ;修改数据地址 DJNZR2,L1 ; 判断数据是否传送完毕,43,void main( ) unsigned char i=0,j=0; CONPORT=0 x081; /8255A初始化 CONPORT=0 x0D; /C口置位/复位控制字,使PC6输出高电平 for(i=0;i10;i+) do j=CPORT; /读C口数值,得到打印机状态 while(j ,#define APORT XBYT
25、E0 xF8FF #define CPORT XBYTE0 xFAFF #define CONPORT XBYTE0 xFBFF unsigned char idata BUFFER10;,44,11.5、单片机与外部AD、DA转换电路的接口,A/D转换器(Analog to Digital Converter,ADC):将模拟信号转换成数字信号的集成电路 D/A转换器(Digital to Analog Converter,DAC):将数字信号转换成模拟信号的集成电路。 这两类集成电路在单片机测控系统中经常使用。,单片机测控系统框图:,45,11.5.1 A/D转换器的分类和性能指标,1A/
26、D转换器的分类 逐次逼近式A/D(例如ADC0809)、双积分式A/D 、 型A/D、并行比较型A/D(如TLC5510) 2. A/D转换器的性能指标: 转换时间和转换速率:转换时间是完成一次转换所需要的时间。时间的倒数就是转换速率,即每秒转换的次数,常用的单位是KSPS(Kilo Samples per Second)、MSPS(Million Samples per Second)。 分辨率:数字量变化一个最小单位时,模拟量变化的大小。也可以用A/D转换器输出的二进制的位数表示分辨率。 转换精度:A/D转换器的转换精度由模拟误差和数字误差两部分。 模拟误差是由比较器、解码网络中的电阻值以
27、及基准电压波动等引起的误差,由器件质量决定。 数字误差主要有丢失码误差和量化误差,量化误差和A/D转换器输出的数字量的位数有关,位数越多量化误差越小。通常定义量化误差为分辨率的一半。,46,11.5.2高速A/D转换器TLC5510,TLC5510是美国TI(德州仪器)公司生产的8位高速并行模数转换器,采样速率高达20MSPS。在推荐的工作条件下,功耗仅为130mW。该芯片内部带有采样保持电路,大大简化了外围电路的设计。,TLC5510的内部结构,47,引脚的功能,1.AGND:模拟信号地; DGND:数字信号地; 2.ANALOG IN:模拟信号输入端; 3.CLK:时钟输入端; 4.D1D
28、8:数字信号输出端。D1为数据最低位,D8为最高位;,5: 数字量输出使能端。在该引脚输入低电平时,D1D8引脚输出的数据有效;在该引脚输入高电平时,D1D8引脚为高阻态 6.VDDA:模拟电路工作电源;VDDD:数字电路工作电源; 7.REFTS:内部参考电压引出端之一,当使用内部电压分压器产生额定的2V基准电压时,此端短路至REFT引脚; 8.REFT:参考电压引出端之二;REFB:参考电压引出端之三; 9.REFBS:内部参考电压引出端之四,当使用内部电压分压器产生额定的2V基准电压时,此端短路至REFB引脚。,48,TLC5510的工作时序,在时钟信号CLK的每一个下降沿采集模拟输入信
29、号。 第N次采集的数据经过2.5个时钟周期的延迟之后送到内部数据总线上。 CLK的最小周期为50ns,所以TLC5510的最高采样速率可以达到20MSPS。,49,11.5.3单片机与高速A/D转换器TLC5510的接口,50,【例114】在TLC5510的ANALOG IN引脚输入一个载有信息的模拟电压信号。为了对信号所载信息进行分析,需要先连续采集1000次,存于片内扩展RAM 0000H03E7H单元中,为便于分析,每两次采样之间的时间间隔必须相同。请编写子程序完成数据的采集。,分析:这里要求采集1000次数据,将循环次数放在寄存器Rn中,因为Rn的最大值为256,所以将1000个数据分
30、为4个循环采集,每一个循环采集250次数据,由R4R7四个寄存器控制循环次数。,51,READ_AD:ANLAUXR, #11111101B ;设置使用内部扩展RAM MOVDPTR, #0000H ;存放数据的初始地址 MOVR7, #250 ;采集次数,2504=1000次。 MOVR6, #250 MOVR5, #250 MOVR4, #250 SETBP1.7;启动三次A/D转换。 CLRP1.7 SETBP1.7 CLRP1.7 SETBP1.7 CLRP1.7 R_AD1:SETBP1.7 ; CLK信号,再一次启动A/D转换 CLRP1.7 MOVA,P0 ;读取数据 MOVXD
31、PTR,A ;存入片内扩展RAM缓冲区 INCDPTR ;修改地址指针 DJNZR7, R_AD1 ;判断250次采集是否完成,第四次启动AD转换后读回的数据是第一次采集到的数据,依次类推。 后面三个循环和R_AD1大同小异,控制循环次数的寄存器不同而已。,52,11.5.4 D/A转换器,1.D/A转换器的技术指标 分辨率:D/A转换器能分辨的最小输出模拟增量,也就是单位数字量输入引起的模拟量的变化。对于n位D/A转换器来说,分辨率应等于满量程值除以2n。当n越大,分辨能力越强。 转换精度:满量程时D/A转换器的实际输出值与理论值的接近程度。通常转换精度为分辨率的一半,但是温度漂移等不可估量
32、的因素也会对转换精度构成影响。 建立时间:将一个数字量转换成模拟量所需要的时间。这个指标可以用来描述D/A转换的速度。一般电流输出型的D/A转换器建立时间较短,电压输出型的D/A转换器建立时间相对较长。,53,2.D/A转换器的选型 选择D/A转换器的时候,首先需要考虑基本指标是否满足需求 芯片是电流型输出还是电压型输出,如果是电流型输出,需要外接IV转换电路将电流转换成电压。 芯片是否有锁存功能。D/A转换需要花费一定的时间,输入的数字量在转换过程中一定不能变化,如果发生了变化,输出的模拟量就不稳定,所以需要有锁存器将输入的数字量锁存,使其在转换过程中保持不变。如果D/A转换器片内没有锁存器
33、,就需要外接锁存器。,54,11.5.5 D/A转换器TLC5620,TLC5620是TI公司推出的带有高阻抗缓冲输入的数模转换器芯片。 特点: 4通道、8位、电压输出型, 采用+5V单电源供电。 数字信号在时钟CLK的控制下串行移位输入 每一通道均有输入锁存器和DAC锁存器两级缓冲, 内部有上电复位功能, 功耗低, 通过编程选择,可以使产生的输出电压范围为参考电压的12倍。,55,1.内部结构,56,当LOAD引脚为高电平时,在每个CLK下降沿,一位数据送入DATA引脚并移入串行移位寄存器,最高有效位(MSB)在前。 当11位数据全部移入后,LOAD拉低,将数据进行一级锁存,即LOAD信号下
34、降沿可以将输入的8位数字量锁存到输入锁存器Latch。 LDAC为低电平时,第二级锁存器直通,输入直接进行D/A转换并输出。当LDAC由高电平变为低电平时,数据锁存到DAC锁存器,这就是第二级锁存。 锁存后的数据进行D/A转换后输出,每一通道的输出电压V为: 其中Vref是参考电压,CODE是输入的数字量,范围0255,RNG是可编程增益倍数,取值为0或1,由输入的控制字配置。,工作原理:,57,2引脚功能,1.VCC、GND:电源端、地端。 2.REFA、REFB、REFC、REFD:4个参考电压输入端,限定了模拟输出电压的范围。 3.DACA、DACB、DACC、DACD:4个模拟电压输出
35、端 4.DATA:串行数据输入端。输入的每一位数字信号在时钟信号CLK的下降沿移入串行移位寄存器。,5.CLK:时钟信号输入端。时钟频率最大为1MHz。 6.LOAD:串行加载控制端。LOAD的下降沿将串行移位寄存器的数据锁存到输入锁存器。 7.LDAC:装载DAC控制端。LDAC信号从高电平变为低电平时,输入锁存器的数据被装载到DAC锁存器,经D/A转换后输出。,58,11.5.6 单片机与TLC5620的接口,TLC5620与单片机、微控制器等连接可以通过三线或者四线的串行总线实现,只需控制DATA、CLK、LOAD、LDAC四个引脚就可以。 控制字为11位的结构,包括8位数据位D0D7,
36、2位DAC通道选择位A1、A0和1位输出范围选择位RNG。 TLC5620内部的两个锁存器,分别受控于LOAD和LDAC引脚。根据两个锁存器是否需要锁存,可以将TLC5620与单片机连接为单缓冲方式或双缓冲方式。,59,1单缓冲方式 TLC5620内部的两个锁存器有一个处于直通状态,另一个受单片机控制。通常用单片机控制三个引脚CLK、DATA、LOAD,将LDAC引脚接地。,60,2.双缓冲方式 增加一个I/O口控制LDAC引脚。当LDAC引脚输入的信号由高到低变化时,TLC5620进行第二级锁存,然后进行D/A转换并送出结果,61,【例115】如图,选择TLC5620的A通道进行D/A转换,
37、请编程使DACA引脚输出锯齿波信号,电压范围0V5V。,分析: 模拟电压信号从0V到5V为一个周期。取Vref=5V ,RNG=0,当模拟量输出为0V时对应的数字量输入应为0;当模拟量输出为5V时对应的数字量输入应为255即FFH。 所以如果将数字量的输入从0开始逐步增大到FFH,对应输出的模拟量也从0开始逐渐增大到5V。 送出数据的格式:A1A0=00、RNG=0、8位的数字量。,62,汇编语言程序 DAT BITP1.0 CLK BITP1.1 LOAD BITP1.2 ORG 0000H MOV R6,#00000000B ;R6的高3位分别为A1、A0、RNG MOV R7,#0000
38、0000B ;发送的数据保存于R7 SETB LOAD START:LCALL SEND1 ;发送A1、A0、RNG LCALL SEND2 ;发送8位数据位 INC R7 ;将要转换的数字量递加 CLR LOAD ;LOAD的下降沿,将数据送入锁存器 LCALL DELAY_1s SETB LOAD SJMP START,63,SEND1:MOV A,R6 ;发送地址A1、A0和RNG MOV R5,#3 ;循环3次送出 LCALL SENDBIT ; RET SENDBIT: RLCA ;将要发送的数据位移位到Cy中 MOVDAT,C ;将数据按位发出 SETBCLK ;CLK的一次下降沿
39、,将一位数据锁存 LCALL DELAY _1s CLRCLK LCALL DELAY _1s DJNZR5, SENDBIT RET SEND2: MOV A,R7 MOV R5,#8;将要发送8位数据 LCALL SENDBIT RET DELAY _1s: MOV R2,#2 ;延时1s的子程序 DL0: DJNZ R2,DL0 RET END,SENDBIT入口参数在A、R5中,意为:将A中的高R5位一位一位的发送出去。,64,sbit CLK=P11; / 串行时钟,下降沿有效 sbit DAT=P10; /串行数据发送端 sbit LOAD=P12;/串行数据装载控制端,下降沿有效
40、 *函数声明部分* void send(unsigned char x , unsigned char n); / x:要发送的数据 ,n为发送数据的位数 void send_strobe( ); /发送LOAD选通信号的函数 void delay_1s( );/延时1s的函数 *主程序* void main( ) unsigned char pre_dat=0,send_data=0; LOAD=1; /初始化 while (1) send(pre_dat , 3);/ 送出A1、A0、RNG三位 send(send_data,8); / 送出8位数据位 send_data+; /要发送的数
41、字量加1 send_strobe( ); / 送出LOAD引脚的选通信号 ,A1、A0、RNG依次在pre_dat字节的高三位;send_data为送出的8位数字量。,65,void send(unsigned char x , unsigned char n) do if (x ,66,11.6、单片机与键盘的接口,键盘与单片机的连接方法有两种: 当按键个数比较少时,可以使用独立连接的键盘,其特点是:一个按键占用一根I/O口线,原理简单。 当按键个数比较多时,可以使用矩阵键盘,节约I/O口线,但是读取键码的程序比较复杂。,67,11.6.1按键的原理,1脚和2脚内部相连,3脚和4脚内部相连。
42、在按键按下或者弹起的时候,1、2引脚和3、4引脚接通或者断开,一般使用两个引脚即可。 每一个按键都是相同的,在使用时会被赋予不同的含义,这由程序的设计决定。,68,按键去抖动: 原因: 按键就是弹性开关,闭合和断开都利用了机械弹性实现,所以在闭合和断开的瞬间,必然有抖动现象,抖动的时间一般在5ms10ms左右,完成一次按键的时间大约为200ms左右 去抖动方法: 硬件方法或软件方法 。软件方法是检测到按键之后延时15ms左右,再次检查是否有按键信息。两次检测到有按键信息,才确认是有按键按下。,69,11.6.2独立键盘,【例116】STC12C5A60S2单片机的P3.2口连接一个按键,命名为
43、S1,P2.7引脚接发光二极管D1。如果按一次S1按键,让D1熄灭,再一次按下S1,让D1点亮,如此循环,请编程实现。,P3.2=0?,CPL P2.7,P3.2=0?,延时15ms去抖动,Y,Y,70,(1)汇编语言程序段: KEY: SETB P3.2 KEY0: JBP3.2,KEY0 ;查询P3.2引脚的状态,如果为高,则重新查询。 LCALL DELAY_15ms;延时15ms去抖动 JB P3.2,KEY ;重新查询P3.2引脚的状态 CPL P2.7 ;有键按下,改变D1的状态 KEY1: JNB P3.2,KEY1 ;查询P3.2引脚的状态,等待按键释放 LCALL DELAY
44、_15ms SJMP KEY DELAY_15ms:MOV R6,#177 ; 时钟频率12MHz时,延时15ms的子程序 DL0: MOV R5,#0 DJNZ R5,$ DJNZ R6,DL0 RET,71,(2)C51程序: #include sbit KEY1 = P32; sbit LED1 = P27; void delay_15ms( ); /15 ms 延时函数的声明 * void main( ) KEY1=1; while (1) while(KEY1=1); /查询,等待按键按下 delay_15ms( ); /延时15ms,去抖动 if (KEY1=0) LED1=!LE
45、D1;/有按键按下,D1状态改变 while(KEY1!=1) ; /等待按键释放 delay_15ms( ); /调用延时15ms的函数 ,72,【例117】8个按键分别连接到单片机P1口的每一个引脚,请编程使每个按键完成相应的任务。,73,MAIN:MOVSP,#0AFH MOVP1,#0FFH NOP ;短暂延时,等待输出稳定 LOOP:MOVA,P1 ;读P1口各个引脚状态 CJNEA, #0FFH, LOOP1 SJMPLOOP ;没有按键信号,循环查询 LOOP1:LCALL DELAY_15ms; 延时15ms去抖动 MOV A ,P1 ;重新读取P1口状态,确定是否有按键 CJ
46、NEA, #0FFH, LOOP2; SJMPLOOP LOOP2:MOVR1,A ; 将P1的状态保存到R1 LOOP3:MOVA,P1 CJNEA, #0FFH, LOOP3 ;等待按键释放 MOVA,R1 ;判断是哪一个按键被按下 JNBACC.0,KEY0;如果按键K0按下,去执行KEY0 JNBACC.1,KEY1 。 JNBACC.7,KEY7 LJMPLOOP KEY0:. ;K0按键按下后要执行的任务KEY0 AJMPLOOP;执行完KEY0任务后,重新读按键信息 。,74,void main( ) P1=0 xFF; while(1) temp=P1; /读P1口状态 if(
47、temp!=0 xFF) /如果条件成立,则有键按下 delay_15ms( ); /延时去抖动 temp=P1; if (temp!=0 xFF) /如果条件成立,表明已有按键按下 temp1= temp; /临时保存从P1口获取到的按键状态 do temp=P1; while (temp!=0 xFF); /等待按键释放 switch(temp1) /确定是哪一个按键按下,调用相关的函数 case 0 xFE:KEY0( );break; case 0 xFD:KEY1( );break; case 0 xFB:KEY2( );break; case 0 xF7:KEY3( );break
48、; case 0 xEF:KEY4( );break; case 0 xDF:KEY5( );break; case 0 xBF:KEY6( );break; case 0 x7F:KEY7( );break; ,75,11.6.3矩阵键盘,矩阵键盘又叫行列式键盘,是在I/O口线组成的行列矩阵的交叉点上连接按键。,关键任务:1、确定是否有键按下 2、确定是哪一个键按下,76,行线H0-H3作为输入,列线L0-L3作为输出。如果有按键按下,该按键所在的列线和行线短路。令行线输出为1,列线输出为0,无按键按下时,读行线的状态都应为高电平;有键按下后,读行线的状态就不再全为高。,如何确定是否有键按下
49、?,如何确定按下的键的键码?,令列线L0输出低电平,其它列输出高电平,再读H0-H3,如果有一条行线是低电平,则该行线和L0交叉点上的按键已被按下;如果四条行线都为高电平,即该列无按键按下。同样的方法,依次将L1、L2、L3输出低电平,其它列输出高电平,读回四行的状态以判断按键所在的行和列。 假设定义按键的键值=行号4+列号,根据按键所在的行和列获取到键值。,77,【例118】44矩阵键盘与单片机连接,编写程序,使不同按键按下时能执行相应的任务。,分析:P1.0P1.3作为H0H3行,输入,P1.4P1.7作为L0L3列,输出。键值=行号4+列号。,78,K_CODEEQU 30H;键码存放在
50、30H单元 S_CODEEQU 31H;扫描到的行号放在31H单元 C_CODEEQU 32H;输出的列码放在32H单元 ORG 0000H LJMP MAIN ORG 1000H MAIN:MOV SP,#0AFH START:LCALL KEY MOV A,K_CODE CJNE A,#0FFH,KEY_T LJMP START,获取键码,键码值在K_CODE中,K_CODE初值为0FFH,如果不是这个值,说明有按键按下。,79,KEY_T:RL A ADD A,K_CODE ; MOV DPTR,#KEY_TAB JMP A+DPTR KEY_TAB:LJMP KEY0 LJMP KEY
51、1 LJMP KEY2 . ;这里省略了跳往KEY3KEY14的分支 LJMP KEY15 ;KEY子程序,返回值在K_CODE变量中,取值为015、0FFH KEY:MOV K_CODE,#0FFH MOV R0,#00H ;R0中存放列号 MOV P1,#0FH;将P1.0-P1.3(H0-H3)置1,P1.4-P1.7(L0-L3)清零 LCALL DELAY_1s MOV A,P1 ;读回P1口的状态 ANL A,#0FH ;保留P1口状态的低四位,对应四行的数值 CJNE A,#0FH,KEY_1 ;如有键按下,跳转到KEY_1处理。 RET ;无键按下,返回主程序,KEY_TAB
52、表中的LJMP指令是三字节指令,所以JMP A+DPTR指令中给出的地址偏移值为3 K_CODE,80,KEY_1:LCALL DELAY_15ms ;延时15ms去抖动 MOV C_CODE,#0EFH;该列码从P1口输出,使L0列输出低电平 COLUWN:MOV P1,C_CODE;每一次循环依次将L0、L1、L2、L3列线输出低电平 MOV A,C_CODE RL A ;列扫描码循环左移,为扫描下一列做准备,借助A完成左移 MOV C_CODE,A MOV A,P1 ;读回P1口的状态 ANL A,#0FH ;保留P1口状态的低四位,对应四行的数值 CJNE A,#0FH,KEY_2;该
53、列有键按下,跳转到KEY_2程序段 INCR0 ;该列没有按键按下,列号加1,准备查询下一列 CJNE R0,#04H,COLUWN RET;4列都没有按键按下,返回主程序 KEY_2:CJNE A,#0EH,K1 MOV S_CODE,#00 ;第0行 SJMP RESULT,81,K1:CJNE A,#0DH,K2 MOV S_CODE,#01 ;第1行 SJMP RESULT K2: CJNE A,#0BH,K3 MOV S_CODE,#02 ;第2行 SJMP RESULT K3: CJNE A,#07H,LEND MOV S_CODE,#03 ;第3行 RESULT:MOV A, S
54、_CODE ;计算键值,并放入K_CODE RL A RL A ;行4 ADD A, R0 ; A中的内容=行4 +列 MOV K_CODE,A LEND:RET,82,#include #include sbit H0=P10; sbit H1=P11; sbit H2 =P12; sbit H3 =P13; sbit L0 =P14; sbit L1 =P15; sbit L2 =P16; sbit L3 =P17; /*函数声明* void delay_15ms( ); /延时15ms的函数 void delay_1s( ); /延时1s的函数 unsigned char key( );
55、 void KEY0( ); void KEY1( ); void KEY15( );,该函数key()用于获取所按键的键码,返回值为015。,83,void main( ) unsigned char K_CODE; / K_CODE变量值是获取到的键码015 while (1) K_CODE =key( ); / 获取键码 switch(K_CODE) case 0: KEY0( );break; case 1: KEY1( );break; / K_CODE为214时所对应的处理已省略 case 15: KEY15( );break; default: break; ,84,unsign
56、ed char key( ) /* KEY变量的值是计算得到的键码,无键按下时,默认为0 xFF;col为列号*/ unsigned char KEY=0 xFF,col=0,temp, i; P1=0 x0F; /将所有列清零,行置1 temp=0 xEF; /*准备送往P1口的数值暂存temp,该码使P1.4(L0)输出为低,其它行、列输出都为高 */ delay_1s( ); i=P1; /读回P1口数值 if (i ,85,switch(i ,86,case 0 x07: / H3引脚被拉为低电平,在3行有按键按下 KEY=12+col; /KEY=34+col doi=P1; /重新
57、读回P1口数值,等待按键释放 while(i ,11.7、单片机与LED显示器的接口,LED数码管,共阳极:将所有发光二极管的阳极连接在一起做公共端,使用时公共端需要接电源, 共阴极:将所有发光二极管的阴极连接在一起做公共端,使用时公共端需要接地。,图1134 八段数码管,88,驱动多位LED显示的方法: 静态扫描法、动态扫描法 。,静态扫描法:需要用一组I/O口驱动一位LED显示,若显示的内容不变,则I/O口输出的数值就要稳定不变。所以实现N位7段LED的驱动需要使用N7个I/O口。 动态扫描法:各位数码管共用一组数据线,每个数码管的公共端轮流给入信号,使各位轮流点亮。因为人眼有大概40ms的视觉暂留,如果各位LED刷新频率比较快,就会形成同时点亮的视觉假象。,89,11.7.1 LED数码管静态显示,特点:静态显示法原理非常简单,各位数码管可以同时显示,显示亮度大,不闪烁。单片机送出显示段码后,可以处理其它工作,系统的运行效率高。缺点在于数码管占用了太多I/O口。所以静态显示法适合于显示位数少,或者软件负担重而无法承担动态扫描任务的场合。,90,【例119】在两位LED上循环显示0099的数值。从00开始,每延时1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位土木工程岗2026面试历年真题题库试卷及参考答案
- 2026事业单位计算机岗面试高频考题题库及参考答案
- 事业单位人力资源岗面试历年真题全真模拟试卷及参考答案
- 2026年湖南科技职业学院高职单招笔试语文历年参考题库含答案解析
- 2026年湖南九嶷职业技术学院高职单招笔试物理历年参考题库含答案解析
- 2026年泉州职业技术大学高职单招笔试化学历年参考题库含答案解析
- 2026年河南测绘职业学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年河北女子职业技术学院高职单招笔试化学历年参考题库含答案解析
- 2026年江西服装学院高职单招笔试英语历年参考题库含答案解析
- 2025年期货从业考试《期货投资分析》真题及答案
- 《护理管理培训》课件
- 2026重庆国际物流枢纽园区建设有限责任公司及子公司招聘19人笔试模拟试题及答案解析
- 检察官遴选考试真题及答案解析
- 江苏省无锡市梅村高级中学2025-2026学年高一上学期10月阶段检测物理试卷(含答案)
- 2026秋新北师大版数学六年级上册教学课件:数学好玩 五子棋
- 生物酶制剂生产流程技术指南
- 超声评估胆囊腺肌症
- TSG08-2026《特种设备使用管理规则》解析
- 北师大版四年级上册书法练习指导 教案
- 农田管护协议书范本
- 操作系统设计原理 课件 第1章 操作系统概述
评论
0/150
提交评论