内容正文:
1
项目9 温度测试电路制作
任务1 A/D、D/A转换器的使用方法
教学要求:
1、理解ADC0808引脚及功能。
2、掌握ADC与单片机的连接及应用编程。
3、了解DA转换器的功能及DAC0832引脚功能。
4、熟悉C语言软件包的制作 。
1
2
教学重点:
1、ADC0808与单片机的连接方法 。
2、AD转换应用程序编写。
3
1、MCS-51单片机由几个逻辑功能单元组成?
2、通过项目1~9的制作学习,单片机各功能单元是否都以用到?
3、以同学们的理解,如何制作一个温度控制系统?
问题导入:
4
新授
一、A/D转换器简介
目前A/D转换器品种很多,8位的有ADC0808、ADC0809、AD570等。
1、ADC0808的引脚功能
(1)电源类引脚分别是:
VCC(11脚):电源正极。
GND(13脚):电源负极。
Clock :时钟输入端。
VREF(+)、VREF(-):
正、负参考电压输入端。
5
(2)控制类引脚分别是:
START:转换启动信号,由低变高时,AD转换器复位,由高变低时启动AD转换。
ADDA、ADDB、ADDC:模拟通道选择端。
ALE:地址锁存信号。使用时该信号可以和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
EOC:A/D转换结束信号。此信号常被用来作为中断申请信号。
OE:允许输出信号高电平有效。
6
(3)数据类引脚分别是:
IN0~IN7:8路模拟量输入端。
OUT1~OUT8 :8位数字量输出端。
7
2、ADC0808与单片机的连接
ADC0808与单片机的连接如下图。
8
AD转换子程序:
#include <intrins.h> //含_nop_()函数
#include <reg51.h>
sbit ADC_EOC=P2^0;
sbit U3_2=P2^1;
sbit U3_3_5=P2^2;
sbit U3_6=P2^3;
unsigned int zhjg;
void ADC_zh()
{
ADC_EOC=1; //为读EOC信号准备
U3_2=1; //为A/D转换准备
U3_3_5=1;U3_6=1;
U3_3_5=0; U3_2=0; //使START、ALE端由0变1
_nop_(); _nop_();_nop_();//空操作等待ADC0808复位完成
U3_3_5=1; //使START由1变0,启动AD转换
U3_2=1;
_nop_();
while(ADC_EOC==1);//等待转换开始
while(ADC_EOC==0);//等待转换结束
U3_3_5=0; U3_6=0; //使OE端为1
P0=0xff; //读转换结果准备
zhjg=P0;
U3_3_5=1;U3_6=1;
}
9
二、C语言软件包的制作
软件包的制作其实很简单,下面以数码管显示函数软件包的制作为例说明软件包的制作步骤。
/***(1)在通用函数前加入头文件及自定义部分***/
#include <intrins.h> //含_nop_()函数
#include <reg51.h>
unsigned char code tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示数字段码数组
unsigned int dxsj; //待显示数据
10
/***(2)编写通用函数***/
void delay() //延时函数
{
unsigned char i,j;
for(i=2;i>0;i--)
for(j=250;j>0;j--);
}
void display() //显示函数
{
unsigned char i,disp_buf[4]; //定义显示缓冲区
unsigned int lssj; //临时数据
disp_buf[0] = dxsj/1000; //显示数据第3位(最高位)
lssj=dxsj%1000;
disp_buf[1] = lssj/100; //显示数据第2位
lssj=lssj%100;
disp_buf[2] = lssj/10;//显示数据第1位
disp_buf[3] = lssj%10;//显示数据第0位(小数点后第1位)
for(i=0;i<4;i++)
{
P1=tab[disp_buf[i]];
if(i==2)
{
P1=tab[disp_buf[i]]&