《单片机的功能扩展》由会员分享,可在线阅读,更多相关《单片机的功能扩展(103页珍藏版)》请在金锄头文库上搜索。
1、第第8章章 单片机的功能扩展单片机的功能扩展 第第8章章 单片机的功能扩展单片机的功能扩展 8.1 键盘输入及接口键盘输入及接口8.2 显示器及其接口显示器及其接口8.3 D/A转换器的接口与应用转换器的接口与应用8.4 A/D转换器的接口与应用转换器的接口与应用8.1 8.1 键盘输入及接口键盘输入及接口一、什么是键盘一、什么是键盘键盘:是由若干按钮组成的开关矩阵,它是单片机系键盘:是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,键盘在单片机应用系统中,统中最常用的输入设备,键盘在单片机应用系统中,实现输入数据、传送命令等功能,是人机交互的主要实现输入数据、传送命令等功能,是人
2、机交互的主要手段。手段。键盘按照实现方式可以分为键盘按照实现方式可以分为编码键盘编码键盘和和非编码键盘非编码键盘两两大类,在单片机中广泛使用非编码键盘。大类,在单片机中广泛使用非编码键盘。 独立式独立式矩阵式矩阵式适合于比较少的键盘适合于比较少的键盘适合于比较多的键盘适合于比较多的键盘常见的非编码键盘结构有常见的非编码键盘结构有 8.1.1 8.1.1 键盘概要键盘概要二、非编码键盘的键输入程序应完成的基本任务:二、非编码键盘的键输入程序应完成的基本任务:1、监测有无键按下。键的闭合与否,反映在电压上就是、监测有无键按下。键的闭合与否,反映在电压上就是呈现出高电平或低电平,所以通过电平的高低状
3、态的检测,呈现出高电平或低电平,所以通过电平的高低状态的检测,便可确认按键按下与否。便可确认按键按下与否。2、判断是哪个键按下。、判断是哪个键按下。3、完成按键处理任务。、完成按键处理任务。键盘实际上是一组按键开关的集合,平时按键开关总是处于断开键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。状态,当按下键时它才闭合。它的结构和产生的波形如图所示。三、独立按键程序设计三、独立按键程序设计P1.0AT89S51P1.0510ms1. 按键的消抖:按键的消抖:去去抖动的方法抖动的方法硬件方法硬件方法软件方法软件方法在在键盘中附加去抖动
4、电路键盘中附加去抖动电路采用时间延迟以躲过抖动采用时间延迟以躲过抖动(大约延迟(大约延迟101020ms20ms)硬件消抖硬件消抖是通过在按键输出电路上加一定的硬件线路来消是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用除抖动,一般采用RS触发器或单稳态电路。如图。触发器或单稳态电路。如图。 断开闭合+5V+5V输出软件消抖软件消抖是利用延时来跳过抖动过程是利用延时来跳过抖动过程 2. 串键保护:单键按下有效,多键同时按下无效串键保护:单键按下有效,多键同时按下无效3. 处理连击:处理连击:(1)一次按键只产生一次键功能的执行;)一次按键只产生一次键功能的执行;(2)一次按键可以产生
5、多次按键功能的执行。)一次按键可以产生多次按键功能的执行。4 4、键盘的工作方式、键盘的工作方式(1 1)随机方式)随机方式每当每当CPUCPU空闲时执行键盘扫描程序空闲时执行键盘扫描程序(2 2)中断方式)中断方式每当有键闭合时才向每当有键闭合时才向CPUCPU发出中断请求,中断响应后发出中断请求,中断响应后执行键盘扫描程序执行键盘扫描程序(3 3)定时方式)定时方式每隔每隔一定时间执行一次键盘扫描程序,定时可由单一定时间执行一次键盘扫描程序,定时可由单片机的定时器完成片机的定时器完成8.1.2 键盘程序设计键盘程序设计一、独立式按键一、独立式按键上拉按键上拉按键下拉按键下拉按键;上拉汇编示
6、例程序;上拉汇编示例程序get_keyget_key: : JB JB P1.0P1.0,no_keyno_key ACALL Delay ACALL Delay ;第一次检测到按键信息;第一次检测到按键信息 JBJB P1.0P1.0,no_keyno_key ; ; 执行按键功能(第二次检测到按键信息)执行按键功能(第二次检测到按键信息) JBJBP1.0,no_keyP1.0,no_key; ; 等待按键抬起等待按键抬起 SJMP $-1SJMP $-1; ;跳转到上一行跳转到上一行no_keyno_key: : Delay: Delay: P1.0上拉上拉C51示例程序示例程序if(P
7、1_0=0) /第一次检测到按键信息第一次检测到按键信息Delay();(); /延时延时20ms左右,消除抖动左右,消除抖动if(P1_0=0) /第二次检测到按键信息第二次检测到按键信息 /执行按键功能执行按键功能 while(P1_0=0);); /等待按键释放等待按键释放 行列式键盘行列式键盘(如图如图8.4所示所示)按键识别有两种方法:行扫描法和线反转法按键识别有两种方法:行扫描法和线反转法 1 1、键盘接口处理的内容、键盘接口处理的内容(1 1)键扫描)键扫描首先是判定有没有键被按下首先是判定有没有键被按下二、行列式按键二、行列式按键先经先经输出口向所有行线输出低电平,然后再输入各
8、列线状态输出口向所有行线输出低电平,然后再输入各列线状态1 1 1 1 0000无无键键盘盘按按下下时时以以4 4行行44列键盘为例使用行扫描的方法列键盘为例使用行扫描的方法使所有各行同时为低电平,再检查是否有列线也处于低电平。使所有各行同时为低电平,再检查是否有列线也处于低电平。如果列线上有一位为如果列线上有一位为0,则说明必有键被按下,则说明必有键被按下 逐行扫描查询逐行扫描查询 线反转法线反转法先让行线工作在输出方式,列线工作在输入方式,即往输出端先让行线工作在输出方式,列线工作在输入方式,即往输出端口各行线上全部送口各行线上全部送“0”,然后从输入端口读入列线的值。如,然后从输入端口读
9、入列线的值。如果此时有某个键被按下,则必定会使某一列线值为果此时有某个键被按下,则必定会使某一列线值为“0”。重新设置两个并行端口的工作方式,使其互换,将刚才读得的重新设置两个并行端口的工作方式,使其互换,将刚才读得的列线值从并行端口输出,再读取行线的输入值,那么,在闭合列线值从并行端口输出,再读取行线的输入值,那么,在闭合键所在的行线上的值必定为键所在的行线上的值必定为“0”,这样,被按下的键的行列,这样,被按下的键的行列值就可以获得了。值就可以获得了。知道列号知道列号输出口输出口输输 入入 口口0 0 0 01 0 1 1知道行号知道行号8.2 8.2 显示器及其接口显示器及其接口8.2.
10、1 LED8.2.1 LED显示器显示器LEDLED(Light Light EmitingEmiting Diode Diode):):是发光二极管的缩写是发光二极管的缩写电流:电流:510mA电压:电压:1.8V 3V数码管的特点:数码管的特点: 发光响应快,亮度强,高频特性好发光响应快,亮度强,高频特性好 机械性能好,使用寿命长,可达机械性能好,使用寿命长,可达10105 510106 6h h,与,与COMSCOMS和和 TTLTTL电路兼容电路兼容 工作电压低,驱动电流适中。每段工作电流为工作电压低,驱动电流适中。每段工作电流为510mA510mA, 一只数码管的一只数码管的7 7段
11、段LEDLED全亮需要全亮需要3570mA3570mA。需要驱动电路。需要驱动电路。Note:红色、绿色红色、绿色LED的压降为的压降为1.8V左右,左右,白色、蓝色白色、蓝色LED压降为压降为3V左右,左右,单个单个LED驱动电流一般为驱动电流一般为510mA 1101101000100101表表8.1 8.1 七段七段LEDLED的常规对应关系的常规对应关系段码位段码位D7D6D5D4D3D2D1D0显示位显示位dpgfedcba5BHA4H表表8.2 常见数字和字符的字形代码常见数字和字符的字形代码显示内容显示内容共阳字形共阳字形代码代码共阴字形共阴字形代码代码显示内容显示内容共阳字形共
12、阳字形代码代码共阴字形共阴字形代码代码00xC00x3F90x900x6F10xF90x06A0x880x7720xA40x5BB0x830x7C30xB00x4FC0xC60x3940x990x66D0xA10x5E50x920x6DE0x860x7960x820x7DF0x840x7170xF80x07全灭全灭0xFF0x0080x800x7F全亮全亮0x000xFF1.点亮单个点亮单个LED根据硬件设计的不同可以采用高电平或低电平的方式驱动。根据硬件设计的不同可以采用高电平或低电平的方式驱动。 (1)驱动单个)驱动单个LED汇编汇编指令指令: SETBP1.0 ; P1.0 置高电平置高
13、电平 CLR P1.0 ; P1.0 置低电平置低电平 CPLP1.0 ; P1.0 取反取反(2)驱动单个)驱动单个LED C51语句语句: P1_0=1;/ P1.0 置高电平置高电平 P1_0=0;/ P1.0置低电平置低电平 P1_0=!P1_0; / P1.0 取反取反2.点亮七段点亮七段LED图图 8.11 共阳共阳LED静态扫描电路静态扫描电路图图 8.12 共阴共阴LED静态扫描电路静态扫描电路例:依次在数码管上显示数字例:依次在数码管上显示数字“0”“9”,并延时一段时间。,并延时一段时间。/示例示例C51程序程序include unsigned char code tabl
14、e=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/定义共阴字形代码定义共阴字形代码void delay(void) unsigned int j; for(j=0;j1000;j+) ;/!注意此处的分号,软件延时,!注意此处的分号,软件延时, /具体时间可以从仿真工具获得。具体时间可以从仿真工具获得。main() for(i=0;i9;i+) P1=tablei;/显示显示“0”“9”delay();/延时子程序延时子程序 3.动态扫描动态扫描所谓动态扫描显示即所谓动态扫描显示即轮流轮流向各位数码管送出字形码和相应的向各位数码管送出字形
15、码和相应的位选信号,利用发光管的余辉和人眼位选信号,利用发光管的余辉和人眼视觉暂留视觉暂留作用,使人的作用,使人的感觉好像各位数码管感觉好像各位数码管同时同时都在显示。都在显示。 8.13 LED动态扫描电路动态扫描电路段驱动(段驱动(adp)必须输出足够的电流,)必须输出足够的电流,同时位驱动(同时位驱动(C1C4)是所有段驱动电流之和)是所有段驱动电流之和 74HC244、74HC24574HC06、ULN2003、 ULN2803/动态扫描示例程序(共阴动态扫描示例程序(共阴LED)include unsigned char code table=0x3f,0x06,0x5b,0x4f,
16、0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char Count,d1,d2,d3,d4; sbit p2_0 = P20;sbit p2_1 = P21;sbit p2_2 = P22;sbit p2_3 = P23;void delay(void) unsigned int i; for(i=0;i2000;i+);段驱动(段驱动(adp)必须输出足够的电流,)必须输出足够的电流,同时位驱动(同时位驱动(C1C4)是所有段驱动电流之和)是所有段驱动电流之和 void display(void) P2&=0xf0;/关断位选信号关断位选信号 P1=table
17、d1; /送显示数据送显示数据 p2_0=1;/选中第一个数码管选中第一个数码管 delay();/延时延时 P2&=0xf0; /关断位选信号关断位选信号 P1=tabled2;/送显示数据送显示数据 p2_1=1; ;/选中第二个数码管选中第二个数码管 delay();/延时延时 P2&=0xf0; /关断位选信号关断位选信号 P1=tabled3;/送显示数据送显示数据 p2_2=1; /选中第三个数码管选中第三个数码管 delay();/延时延时 P2&=0xf0; /关断位选信号关断位选信号 P1=tabled4;/送显示数据送显示数据 p2_3=1; /选中第四个数码管选中第四个数
18、码管 delay();/延时延时 P1=0;/关段码关段码 P2&=0xf0;/关位码关位码void main(void) while(1) display(); /其他工作其他工作 综合举例综合举例 在在LED显示器上显示显示器上显示4*4键盘上按下的对应按键的键值键盘上按下的对应按键的键值(0-9)。#include sbit P3_0 = P30;unsigned char code led_number = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay500us(unsigned char cnt) unsig
19、ned char i; do for (i=0;i60;i+); while(-cnt); void display(unsigned char led1 ) /led显示函数显示函数 P2 = 0x00; P2 = led_numberled1; P3_0 = 1; /p3.0口输出高电平,经非门后变成低电平,口输出高电平,经非门后变成低电平,led为共阴极为共阴极main() unsigned char temp; /存放存放P1口状态口状态 unsigned char keyin = 16; /上电时数码管熄灭上电时数码管熄灭 while(1) P1=0xf0; /扫描方式,通过输出口扫
20、描方式,通过输出口P1.0-P1.3将行线拉低将行线拉低 temp = P1; /读入输入口读入输入口P1.4-P1.7电平状态电平状态 if (temp!=0xf0) /按键判断。如果输入口电平不全为高,可能有键按下按键判断。如果输入口电平不全为高,可能有键按下 delay500us(20); /延时延时10ms temp = P1; /再次读入输入口再次读入输入口P1.4-P1.7电平状态电平状态 if(temp!=0xf0) /为真,确实有键按下为真,确实有键按下 /扫描键盘扫描键盘/*扫描第一行扫描第一行*/P1 = 0xfe; /扫描扫描P1.0口,口,P1.0=0temp = P1
21、;if (temp&0xf0)!=0xf0) /为真,表明第一行有键按下为真,表明第一行有键按下 switch(temp) case 0xbe : keyin = 9; break; case 0xde : keyin = 8; break; case 0xee : keyin = 7; default: break; /*扫描第二行扫描第二行*/ P1 = 0xfd; /扫描扫描P1.1口,口,P1.1=0 temp = P1;if (temp&0xf0)!=0xf0) switch(temp) case 0xbd : keyin = 6;break;case 0xdd : keyin =
22、5;break;case 0xed : keyin = 4;default:break; /*扫描第三行扫描第三行*/P1 = 0xfb; /扫描扫描P1.2口,口,P1.2=0temp = P1;if (temp&0xf0)!=0xf0) switch(temp) case 0xbb : keyin = 3;break;case 0xdb : keyin = 2;break;case 0xeb : keyin = 1;default:break; /*扫描第四行扫描第四行*/P1 = 0xf7; /扫描扫描P1.7口,口,P1.7=0temp = P1;if (temp&0xf0)!=0xf
23、0) switch(temp) case 0xd7 : keyin = 0;default:break; display(keyin); 8.2.2 LCD显示器显示器#include /1602 液晶示范程序(关键函数)液晶示范程序(关键函数)sbit rs=P22; /数据数据/命令选择管脚命令选择管脚sbit rw=P21; /读写选择管脚读写选择管脚sbit en=P20;/片选管脚片选管脚#define uchar unsigned charvoid delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_o
24、rder(uchar order)rs=0;P1=order;delay(4);en=1;delay(4);en=0;void write_date(uchar date)rs=1;P1=date;delay(4);en=1;delay(4);en=0;void init_lcd()rw=0;en=0;write_order(0x38);write_order(0x0c);write_order(0x06);write_order(0x01);void set_xy(uchar x,uchar y)uchar address;if(y=0)address=0x80+x;elseaddress=
25、0xc0+x;write_order(address);void write_string(uchar X,uchar Y,uchar *s) /列列x=015,行行y=0,1 set_xy(X, Y ); /写地址写地址 while (*s) / 写显示字符写显示字符 write_date( *s ); s+; void main(void) init_lcd(); write_string(2,0,hello world); write_string(0,1,HZDZ university); while(1) /其他程序其他程序 8.3 D/A转换器的接口与应用转换器的接口与应用为什么要
26、用为什么要用D/A、A/D转换器件转换器件 能能将将模模拟拟量量转转换换为为数数字字量量的的电电路路称称为为模模数数转转换换器器,简简称称A/D转转换换器器或或ADC;能能将将数数字字量量转转换换为为模模拟拟量量的的电电路路称称为为数数模模转转换换器器,简简称称D/A转转换换器器或或DAC。ADC和和DAC是是沟沟通通模模拟拟电电路路和和数数字字电电路路的的桥桥梁梁,也也可可称称之之为为两两者者之之间间的的接口。接口。8.3.1 DAC的转换原理及分类的转换原理及分类1.转换原理转换原理 DAC的基本原理是把数字量的每一位按照权重转的基本原理是把数字量的每一位按照权重转换成相应的模拟分量,然后
27、根据叠加定理将每一位换成相应的模拟分量,然后根据叠加定理将每一位对应的模拟分量相加,输出相应的电流或电压。对应的模拟分量相加,输出相应的电流或电压。 2.DAC的分类的分类1)根据)根据DAC内部结构不同内部结构不同 权电阻网络型权电阻网络型 “T”型电阻网络型型电阻网络型 2)根据输出结构的不同根据输出结构的不同 电压输出型(如电压输出型(如TLC5620) 电流输出型电流输出型 (如如THS5661A) 3)根据与单片机接口方式不同根据与单片机接口方式不同 并行接口并行接口DAC(如如DAC0832、DAC0808) 串行接口串行接口DAC(TLC5615等等)1.权电阻型权电阻型DAC
28、权电阻型权电阻型DAC核心思想在于用核心思想在于用等比例的电阻等比例的电阻在在参考电压的作用下产生和权重对应的权电流,权电参考电压的作用下产生和权重对应的权电流,权电流在数字开关的作用下进行合成模拟信号。流在数字开关的作用下进行合成模拟信号。 参考电压源、参考电压源、模拟开关、模拟开关、比例电阻、比例电阻、求和放大器求和放大器权电阻网络型权电阻网络型DAC优缺点:优缺点:优点优点:是电路结构简单,使用电阻数量较少;各位数码是电路结构简单,使用电阻数量较少;各位数码同时转换,速度较快。同时转换,速度较快。缺点:是电阻译码网络中电阻种类较多、取值相差较缺点:是电阻译码网络中电阻种类较多、取值相差较
29、大,随着输入信号位数的增多,电阻网络中电阻取值大,随着输入信号位数的增多,电阻网络中电阻取值的差距加大;在相当宽的范围内保证电阻取值的精度的差距加大;在相当宽的范围内保证电阻取值的精度较困难,对电路的集成化不利。该电路比较适用于输较困难,对电路的集成化不利。该电路比较适用于输入信号位数较低的场合。入信号位数较低的场合。 2. T型电阻网络型型电阻网络型DACT型电阻网络型型电阻网络型DAC克服了权电阻型克服了权电阻型DAC电阻阻值较多的电阻阻值较多的缺点,如图缺点,如图8.3.3所示,所示,S0S3为模拟开关,为模拟开关,R2R电阻解电阻解码网络呈倒码网络呈倒T形,运算放大器形,运算放大器A构
30、成求和电路。构成求和电路。 D/A转换器的主要技术指标:转换器的主要技术指标:1)分辩率)分辩率(Resolution) 指最小模拟输出量(对应数字量指最小模拟输出量(对应数字量仅最低位为仅最低位为1)与最大量(对应数字量所有有效位为)与最大量(对应数字量所有有效位为1)之比。)之比。分辨率也可以用分辨率也可以用D/A转换器的最小输出电压与最大输出电转换器的最小输出电压与最大输出电压的比值来表示。压的比值来表示。10位位D/A转换器的分辨率为:转换器的分辨率为:2)建立时间)建立时间(Setting Time) 是将一个数字量转换为稳定是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转
31、换时间。模拟信号所需的时间,也可以认为是转换时间。D/A中常中常用建立时间来描述其速度,而不是用建立时间来描述其速度,而不是A/D中常用的转换速率。中常用的转换速率。一般地,电流输出一般地,电流输出D/A建立时间较短,电压输出建立时间较短,电压输出D/A则较则较长。长。其他指标还有线性度其他指标还有线性度(Linearity)、转换精度、温度系数、转换精度、温度系数/漂移等。漂移等。8.3.2 并行接口并行接口DAC并行并行DAC按照转换位数分为按照转换位数分为8位、位、10位、位、12位、位、16位等,位等,考虑单片机接口便利程度这里以经典的考虑单片机接口便利程度这里以经典的DAC0832
32、D/A转换转换器介绍并行接口器介绍并行接口DAC。DAC0832特点特点:DAC0832是一个是一个8位通用型位通用型D/A转换器,该芯片具有以下特点:转换器,该芯片具有以下特点:单电源供电,从单电源供电,从+5V+15V均可正常工作均可正常工作基准电压的范围为基准电压的范围为1010V;电流建立时间为电流建立时间为1uS;四象限电流输出型;四象限电流输出型;CMOS 工艺,低功耗工艺,低功耗20mW。二、二、DAC0832的控制信号引脚功能输入寄存器的使用输入寄存器的使用1、ILE=1, WR1=0 输入寄存器直通输入寄存器直通2、 ILE=1, WR1=1 输入寄存器锁存输入寄存器锁存DA
33、C寄存器的使用寄存器的使用1、XFER=0, WR2=0 DAC寄存器直通寄存器直通2、 XFER=0, WR2=1 DAC寄存器锁存寄存器锁存已知:已知:cs = 0三三DAC0832的工作方式的工作方式DAC0832有三种方式:直通方式、单缓冲方式和双缓冲方式。1直通方式:直通方式: 、 、 、 直接接地,ILE接电源,DAC0832工作于直通方式,此时,8位输入寄存器和8位DAC寄存器都直接处于导通状态,8位数字量到达DI0DI7,就立即进行D/A转换,从输出端得到转换的模拟量。 当引脚程序实例程序实例1:/输出正锯齿波输出正锯齿波(C语言语言)Main()() While(1) P1+
34、; /这里假设这里假设P1口接数据输入口接数据输入;输出正锯齿波;输出正锯齿波(汇编语言汇编语言)START: CLR ALOOP1:MOV P1 , A; INC A SJMP LOOP1 END程序实例程序实例2:/输出负锯齿波输出负锯齿波(C语言语言)Main()() While(1) P1-;/这里假设这里假设P1口接数据输入口接数据输入;输出正锯齿波输出正锯齿波(汇编语言汇编语言)START: CLR ALOOP2:MOV P1 , A; DEC A SJMP LOOP2 END程序实例程序实例3:/输出三角波输出三角波(C语言语言)Main()() P1=0; While(1) W
35、hile(1) If(P1!=0xFF) P1+;/这里假设这里假设P1口接数据输入口接数据输入 Else Break; While(1) If(P1!=0x00) P1-;/这里假设这里假设P1口接数据输入口接数据输入 Else Break; ;输出三角波输出三角波(汇编语言汇编语言)START: CLR ALOOP1:MOV P1 , A; INC A CJNE A,#00H, LOOP1LOOP2: MOV P1 , A; DEC A CJNE A , #00H , LOOP2 SJMP START END2单缓冲方式:单缓冲方式:当连接引脚 、 、 、 ,使得两个锁存器的一个处于,使得
36、两个锁存器的一个处于直通状态,另一个处于受控制状态,或者两个被控制同时导通,直通状态,另一个处于受控制状态,或者两个被控制同时导通,DAC0832就工作于单缓冲方式,例如下图就是一种单缓冲方式的连接就工作于单缓冲方式,例如下图就是一种单缓冲方式的连接 对于下图的单缓冲连接,只要数据对于下图的单缓冲连接,只要数据DAC0832写入写入8位输入锁存器,就位输入锁存器,就立即开始转换,转换结果通过输出端输出。立即开始转换,转换结果通过输出端输出。DAC寄存器处于直通方式寄存器处于直通方式输入寄存器受控制为直通或锁存方式输入寄存器受控制为直通或锁存方式3双缓冲方式:双缓冲方式:当当8位输入锁存器和位输
37、入锁存器和8位位DAC寄存器分开控制导通时,寄存器分开控制导通时,DAC0832工作于工作于双缓冲方式,双缓冲方式时单片机对双缓冲方式,双缓冲方式时单片机对DAC0832的操作分两步,第一步,的操作分两步,第一步,使使8位输入锁存器导通,将位输入锁存器导通,将8位数字量写入位数字量写入8位输入锁存器中;第二步,位输入锁存器中;第二步,使使8位位DAC寄存器导通,寄存器导通,8位数字量从位数字量从8位输入锁存器送入位输入锁存器送入8位位DAC寄存寄存器。第二步只使器。第二步只使DAC寄存器导通,在数据输入端写入的数据无意义。寄存器导通,在数据输入端写入的数据无意义。四、电压输出方法四、电压输出方
38、法DAC0832是一个电流输出型是一个电流输出型DAC,要想输出电压要增加,要想输出电压要增加电流电流/电压变换环节,常用运算放大器实现转换(如图电压变换环节,常用运算放大器实现转换(如图8.3.6所示,图中所示,图中DAC0832工作于直通方式),图中工作于直通方式),图中图8.3.6 单极性输出图8.3.7 双极性输出8.3.3 串行接口串行接口DAC近年来,随着串行总线(近年来,随着串行总线(SPI、IIC、QSPI等)的飞速发等)的飞速发展及串行总线在单片机的普及,采用串行接口的低成本展及串行总线在单片机的普及,采用串行接口的低成本DAC越来越多。这里以越来越多。这里以TLC5615为
39、例介绍串行接口为例介绍串行接口DAC。 TLC5615的特点:的特点:(1)10位位CMOS电压输出;电压输出;(2)5V单电源供电;单电源供电;(3)与)与CPU三线串行接口;三线串行接口;(4)最大输出电压可达基准电压的二倍;)最大输出电压可达基准电压的二倍;(5)输出电压具有和基准电压相同极性;)输出电压具有和基准电压相同极性;(6)建立时间)建立时间12.5uS;(7)内部上电复位;)内部上电复位;(8)低功耗,最大仅)低功耗,最大仅1.75mW。1. TLC5615简介简介/TI 10位位DAC TLC5615的示例程序的示例程序#define SPI_CLK P3_1#define
40、 SPI_DATA P3_2#define CS_DA P3_0void da5615(unsigned int dat)unsigned char i;dat=6;/D/A数据最高位移到数据最高位移到dat最高位,低最高位,低6位补零位补零CS_DA=0;SPI_CLK=0;for(i=0;i12;i+) /移入高移入高12位数据位数据SPI_DATA=(bit)(dat&0x8000); /数据类型转换数据类型转换,取无符号整型数的最高位取无符号整型数的最高位SPI_CLK=1; /上升沿输出数据上升沿输出数据dat=1;SPI_CLK=0;CS_DA=1;SPI_CLK=0;for (i
41、=0;i100;i+);8.4 A/D转换器的接口与应用转换器的接口与应用A/D转换器(转换器(Analog to Digital Converter)是将)是将模拟量模拟量转转换成换成数字量数字量的器件,通常也用的器件,通常也用ADC表示,它可以将模拟量表示,它可以将模拟量比例地转换成数字量,是模拟量测量的基本器件。比例地转换成数字量,是模拟量测量的基本器件。8.4.1 ADC的转换原理及分类的转换原理及分类8.4.2 并行接口并行接口ADC(ADC0809)8.4.3 串行接口串行接口ADC(TLC549)模模拟拟电电子子开开关关S在在采采样样脉脉冲冲CPS的的控控制制下下重重复复接接通通
42、、断断开开的的过过程程。S接接通通时时,ui(t)对对C充充电电,为为采采样样过过程程;S断断开开时时,C上上的的电电压压保保持持不不变变,为为保保持持过过程程。在在保保持持过过程程中中,采采样样的的模拟电压经数字化编码电路转换成一组模拟电压经数字化编码电路转换成一组n位的二进制数输出。位的二进制数输出。8.4.1 ADC的转换原理及分类的转换原理及分类2. ADC的分类的分类ADC的种类很多,根据转换原理,常见的的种类很多,根据转换原理,常见的ADC主要有主要有逐次逼近式逐次逼近式和和双积分式双积分式等类型。等类型。 1) 逐次逼近式原理逐次逼近式原理逐次逼近转换过程与用天平称物重过程非常相
43、似,按照天逐次逼近转换过程与用天平称物重过程非常相似,按照天平称重的思路,逐次比较型平称重的思路,逐次比较型A/D转换器,就是将输入模拟转换器,就是将输入模拟信号与不同的参考电压做多次比较,使转换所得的数字量信号与不同的参考电压做多次比较,使转换所得的数字量在数值上逐次逼近输入模拟量的对应值。逐次逼近式在数值上逐次逼近输入模拟量的对应值。逐次逼近式ADC具有较快的转换速率和较高的精度,转换速率介于全并式具有较快的转换速率和较高的精度,转换速率介于全并式和双积分式之间,应用非常广泛,常用的集成逐次比较型和双积分式之间,应用非常广泛,常用的集成逐次比较型A/D转换器有转换器有ADC0808/080
44、9系列(系列(8)位、)位、AD575(10位)、位)、AD1674A(12位)等。位)等。转转换换开开始始前前先先将将所所有有寄寄存存器器清清零零。开开始始转转换换以以后后,时时钟钟脉脉冲冲首首先先将将寄寄存存器器最最高高位位置置成成1,使使输输出出数数字字为为1000。这这个个数数码码被被D/A转转换换器器转转换换成成相相应应的的模模拟拟电电压压uo,送送到到比比较较器器中中与与ui进进行行比比较较。若若uoui,说说明明数数字字过过大大了了,故故将将最最高高位位的的1清清除除;若若uoui,说说明明数数字字还还不不够够大大,应应将将这这一一位位保保留留。然然后后,再再按按同同样样的的方方
45、式式将将次次高高位位置置成成1,并并且且经经过过比比较较以以后后确确定定这这个个1是是否否应应该该保保留留。这这样样逐逐位位比比较较下下去去,一一直直到到最最低低位位为为止止。比比较完毕后,寄存器中的状态就是所要求的数字量输出。较完毕后,寄存器中的状态就是所要求的数字量输出。原原原原理理理理框框框框图图图图基基基基本本本本原原原原理理理理3 3位逐次逼近型位逐次逼近型位逐次逼近型位逐次逼近型A/DA/D转换器转换器转换器转换器转换开始前,先使Q1=Q2=Q3=Q4=0,Q5=1,第一个CP到来后,Q1=1,Q2=Q3=Q4=Q5=0,于是FFA被置1,FFB和FFC被置0。这时加到D/A转换器
46、输入端的代码为100,并在D/A转换器的输出端得到相应的模拟电压输出uo。uo和ui在比较器中比较,当若uiuo时,比较器输出uc=1;当uiuo时,uc=0。第二个CP到来后,环形计数器右移一位,变成Q2=1,Q1=Q3=Q4=Q5=0,这时门G1打开,若原来uc=1,则FFA被置0,若原来uc=0,则FFA的1状态保留。与此同时,Q2的高电平将FFB置1。第三个CP到来后,环形计数器又右移一位,一方面将FFC置1,同时将门G2打开,并根据比较器的输出决定FFB的1状态是否应该保留。第四个CP到来后,环形计数器Q4=1,Q1=Q2=Q3=Q5=0,门G3打开,根据比较器的输出决定FFC的1状
47、态是否应该保留。第五个CP到来后,环形计数器Q5=1,Q1=Q2=Q3=Q4=0,FFA、FFB、FFC的状态作为转换结果,通过门G6、G7、G8送出。工作原理工作原理工作原理工作原理1)1)并联比较型并联比较型A/D转换器转换器: :转换速度快,主要缺点是要使用的转换速度快,主要缺点是要使用的比较器和触发器很多,随着分辨率的提高,所需元件数目按比较器和触发器很多,随着分辨率的提高,所需元件数目按几何级数增加。几何级数增加。2)2)双积分型双积分型A/D转换器转换器: :性能比较稳定,转换精度高,具有很性能比较稳定,转换精度高,具有很高的抗干扰能力,电路结构简单,其缺点是工作速度较低,高的抗干
48、扰能力,电路结构简单,其缺点是工作速度较低,在对转换精度要求较高,而对转换速度要求较低的场合,如在对转换精度要求较高,而对转换速度要求较低的场合,如数字万用表等检测仪器中数字万用表等检测仪器中. .3)3)逐次逼近型逐次逼近型A/D转换器转换器: :分辨率较高、误差较低、转换速度分辨率较高、误差较低、转换速度较快,在一定程度上兼顾了以上两种转换器的优点,因此得较快,在一定程度上兼顾了以上两种转换器的优点,因此得到普遍应用。到普遍应用。 ADC转换器比较转换器比较8.4.2 并行接口并行接口ADC1. ADC0809的特点和结构的特点和结构(1)主要特性:)主要特性: 8路路8位位AD转换器,即
49、分辨率转换器,即分辨率8位。位。 具有转换起停控制端。具有转换起停控制端。 转换时间为转换时间为100s。 单个单个5V电源供电。电源供电。 模拟输入电压范围模拟输入电压范围05V,不需零点和满刻度校准。,不需零点和满刻度校准。 工作温度范围为工作温度范围为-4085摄氏度。摄氏度。 低功耗,约低功耗,约15mW。2. ADC0809的接口和编程的接口和编程#define ALEP2_4#define STARTP2_5#define OEP2_6#define EOCP2_7 unsigned char adc_0809(unsigned char chanel)/地址信息放在地址信息放在c
50、hanel变量中变量中unsigned char dd; /临时变量临时变量P2&=0Xf8;P2|=chanel;/P2低三位输出地址低三位输出地址ALE=1;/锁存地址锁存地址START=1;/复位逐次逼近寄存器复位逐次逼近寄存器ALE=0;START=0;/开始转换开始转换_nop_();_nop_();/延时延时while(EOC=0);/等待转换结束等待转换结束OE=1;/输出使能输出使能dd=P1;/数据暂存数据暂存OE=0;Return(dd);/返回转换值返回转换值8.4.3 串行接口串行接口ADCTLC549是德州仪器公司推出的广泛应用的是德州仪器公司推出的广泛应用的CMOS
51、 8位位A/D转换器。该芯片有一个模拟输入端口,转换器。该芯片有一个模拟输入端口,3态的数据态的数据串行输出接口可以方便的和微处理器或外围设备连接。串行输出接口可以方便的和微处理器或外围设备连接。TLC549仅仅使用输入输出时钟(仅仅使用输入输出时钟(I/O CLOCK)和)和芯片选择()信号控制数据。最大的输入输出时钟芯片选择()信号控制数据。最大的输入输出时钟(I/O CLOCK)为)为1.1MHz。 #include intrins.h#define Wait1us_nop_();#define Wait2us_nop_();_nop_();#define Wait4usWait2us;
52、Wait2us;#define Wait8usWait4us;Wait4us;#define Wait10usWait8us;Wait2us;#define Wait30usWait10us; Wait10us;Wait8us;Wait2us; /*定义接口总线定义接口总线*/sbit Clock = P1 2; /时钟口线时钟口线sbit DataOut = P1 3; /数据输出口线数据输出口线sbit ChipSelect = P1 4; /片选口线片选口线unsigned char ADCSelChannel(void)unsigned char ConvertValue = 0; u
53、nsigned char i; ChipSelect = 1; /芯片复位芯片复位 ChipSelect = 0; ChipSelect = 1; Clock = 0; Wait4us; ChipSelect = 0; /芯片起始芯片起始 Wait4us; /等待延时等待延时 for (i = 0; i 8; i +) /输入采样转换时钟输入采样转换时钟 Clock = 1; Clock = 0; ChipSelect = 1; /开始转换开始转换 Wait30us; /等待转换结束等待转换结束 ChipSelect = 0; /读取转换结果读取转换结果 Wait4us; for (i = 0; i 8; i +) /高位在前,低位在后,读取转换结果高位在前,低位在后,读取转换结果 Clock = 1; ConvertValue = 1; if (DataOut) ConvertValue |= 0x1; Clock = 0; ChipSelect = 1; return (ConvertValue); /返回转换结果返回转换结果