1、按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,单片机,实训,工程系,项目六,模拟量输入输出设计与实现,模拟量输入输出设计与实现,教学目的,掌握模,/,数、数,/,模转换芯片与单片机的连接方法及典型应用。,掌握用查询方式、中断方式完成模,/,数、数,/,模转换程序的编写方法。,模,/,数、数,/,模转换,模拟量,I/O,接口的作用,实际工业生产环境,连续变化的,模拟量,例如:电压、电流、压力、温度、位移、流量,计算机内部,离散的,数字量,二进制数、十进制数,工业生产过程的闭环控制,模拟量,D/A,传感器,执行元件,A/D,数字量,数字量,模拟量,模拟量输入,(,数据
2、采集,),模拟量输出,(,过程控制,),计算机,模拟量,I/O,通道的组成,模拟接口电路的任务,模拟电路的任务,00101101,10101100,工,业,生,产,过,程,传感器,放大,滤波,多路转换,&,采样保持,A/D,转换,放大,驱动,D/A,转换,输出,接口,计,算,机,执行机构,输入,接口,物理量,变换,信号,处理,信号,变换,I/O,接口,输入通道,输出通道,ADC0809,模数转换器,ADC0809,是,8,通道,8,位的,以,逐次逼近,原理进行模,数转换,的器件;,内部有一个,8,通道模拟多路开关,,它可以根据地址码锁存,译码后的信号,,只选通,8,路模拟输入信号中的一个进行,
3、A/D,转换,;,A/D,转换后的数据,由,三态锁存器输出,;,片内没有时钟,,需,外接时钟信号,。,ADC0809,主要特性,8,路,8,位,A,D,转换器,即分辨率,8,位;,具有转换起停控制端;,转换时间为,100s,;,单个,5V,电源供电;,模拟输入电压范围,0,5V,,不需零点和满刻度校准;,工作温度范围为,-40,85,摄氏度;,低功耗,约,15mW,。,ADC0809,外部特性一,ADC0809,芯片有,28,条引脚,采用双列直插式封装,IN0,IN7,:,8,路模拟量输入端;,D0,D8,:,8,位数字量输出端;,ADDA,、,ADDB,、,ADDC,:,3,位地址输,入线,
4、用于选通,8,路模拟输入中,的一路;,CLK,:时钟脉冲输入端;,REF(+),、,REF(-),:基准电压;,Vcc,:电源,单一,5V,;,GND,:地;,通道选择表,地址码,CBA,选择的通道,000,IN0,001,IN1,010,IN2,011,IN3,100,IN4,101,IN5,110,IN6,111,IN7,ADC0809,外部特性二,ALE,:,地址锁存允许信号,输入,高电平有效。,START,:,A,D,转换启动脉冲输入端,输入一个正脉冲(至少,100ns,宽)使其启动(脉冲上升沿使,0809,复位,下降沿启动,A/D,转换)。,EOC,:,A,D,转换结束信号,输出,当
5、A,D,转换结束时,此端输出一个高电平(转换期间一直为低电平)。,OE,:数据输出允许信号,输入,高电平有效。当,A,D,转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。,ADC0809,工作过程,首先输入,3,位地址,并使,ALE=1,,将地址存入地址锁存器中;,此地址经译码选通,8,路模拟输入之一到比较器;,START,上升沿将逐次逼近寄存器复位;,下降沿启动,A,D,转换,之后,EOC,输出信号变低,指示转换正在进行;,直到,A,D,转换完成,,EOC,变为高电平,指示,A,D,转换结束,结果数据已存入锁存器,这个信号可用作中断申请;,当,OE,输入高电平 时,输出三态
6、门打开,转换结果的数字量输出到数据总线上。,模数转换显示程序,模数转换显示流程图,模数转换显示程序,开始,初始化,启动,A/D,转换,A/D,转换完 成?,数据输出,延时,结束,工作模块,1,数字电压表设计与实现,使用,AT89S52,单片机,采用动态显示的方式,把,8,通道模数转换器,ADC0808,采样的电压值的大小经单片机处理后由数码管显示出来,量程为,0-5V,,显示格式:,X.XXX,。,数字电压表电路设计,由于需要显示多位,因此数码管采用了较节省,I/O,口线的动态显示方式。,认识数码管,(P132),数码管结构图,A,B,C,D,E,F,G,DP,数码管电路图,共阴数码管,共阳数
7、码管,数码管的编码规则,数字电压表程序设计,数码管显示电压值实现分析,模数转换采用的是,8,位的,ADC0808,,因此其分辨力为,5*1/2,8,V,,即,19.6mV,。为了得到各位待显示的数字的大小,采取了除法和取余相结合的方式:,dat3=tmp/10000;/,最高位,dat2=tmp/1000%10;,dat1=tmp/100%10;,dat0=tmp/10%10;/,最低位,数字电压表控制,C,语言程序,C,语言结构体类型,结构体与前面介绍过的数组一样,是一种构造类型的数据,它是将若干个不同类型的数据变量有序地组合在一起而形成的一种数据的集合体。,组成该集合体的各个数据变量称为结
8、构成员。,整个集合体使用一个单独的结构变量名。,一般来说结构中的各个变量之间是存在某些关系的,如时间数据中的时、分、秒等。,结构体类型的定义,定义一个结构体类型的一般形式为:,struct,结构体名,成员项列表,;,其中“,struct,”,是关键字,作为定义结构体类型的标志;,“结构体名”由用户自行定义;,“成员列表”为该结构体中的各个成员,由于结构体可以由不同类型的数据组成,因此对结构体中各成员都要进行数据类型的说明。,结构体类型变量的定义,结构体定义好以后,就可以指明该结构体的具体对象,即定义该种类型的变量,结构体类型变量的定义主要有如下三种方式:,先定义结构体类型,再定义变量名,在定义
9、结构体类型的同时定义结构体变量名,直接定义结构体变量,先定义结构体类型,再定义变量名,定义一个表示时间的结构体类型。,struct,time,unsigned char hour;,unsigned char minute;,unsigned char second;,;,定义好一个结构体后,就可以用它来定义结构体变量。,一般格式为:,struct,结构体名 结构体变量名,1,,结构体变量名,2,,,.,结构体变量名,n,;,用结构体,time,来定义时间的结构体变量:,struct,time time1;,结构体变量,time1,具有,struct,time,类型的结构,可以使用该结构体中的
10、数据。,定义结构体类型的同时定义结构体变量名,一般格式为:,struct,结构体名,成员列表,结构体变量名,1,,结构体变量名,2,,,.,结构体变量名,n,;,直接定义结构体变量,一般格式如下:,struct,成员列表,结构体变量名,1,,结构体变量名,2,,,.,结构体变量名,n;,第三种方法直接省略了结构体名,一般不提倡。,结构体变量的引用,定义了一个结构体变量之后,就可以对它进行引用,既可以进行赋值、存取和运算。,结构体变量的引用是通过对其成员的引用来实现的。,引用结构体变量中的成员,格式为:,结构体变量名,.,成员名,其中“,.”,是引用结构体成员的运算符。例如:,time1.hou
11、r=20,表示给结构体变量,time1,中的成员,hour,赋值。,对结构体变量中的各个成员可以像普通变量一样进行赋值、存取和运算。,结构体变量的初始化,对结构体变量可以在定义的时候进行初始化;,也可以在定义后对各个成员单独进行初始化。,例如:,time1.hour=20;/,结构体成员赋初值,time1.minute=35;,time1.second=55;,结构体变量需要注意的地方,结构体类型与结构体变量是两个不同的概念。,定义一个结构体类型时只给出了该结构体的组织形式,并没有给出具体的组织成员,因此结构体不占用任何存储空间。,结构体变量则是一个结构体中的具体对象,会给结构体变量分配存储空间,因此可以对结构体变量名进行赋值、存取和运算。,一个结构体中的成员还可以是另外一个结构体类型中的变量,既可以形成结构体的嵌套。,结构体数组,一个结构体变量中可以存放一组数据(如:字符显示数据结构有显示内容、段码数据等数据)。如果显示为,0,9,,就要有,0,9,的段码数据,显然应该用数组,这就是结构体数组。,结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。,






