AC-DC/DC-DC转换
集成A/D转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型A/D转换器用的比较多,ADC0804就是这类单片集成A/D转换器。ADC0804是一款8位、单通道、低价格A/D转换器。
模数转换时间大约100us;
方便TTL或CMOS标准接口;
可以满足差分电压输入;
具有参考电压输入端;
内含时钟发生器;
单电源工作时(0~5)V输入电压范围是0~5V;
不需要调零。
操作时序图
分析图可知,CS先为低电平,WR随后置低,经时间tw(WR)L后,WR置高,随后AD转换器被启动,并且在经过一段时间后,模数转换完成,转换结果存入数据锁存器,同时INTR自动变为低电平,通知单片机本次转换已结束。我们在实际写单片机程序启动A/D转换时就要遵循上面的时序。但实际使用中,也可以不采用中断方式读取A/D转换数据,我们可以在启动A/D转换后,经过延时一段时间,直接读取A/D转换数据结果,读取结束后再启动一次A/D转换,如此循环下去。
ADC0804与CPLD&FPGA、8051单片机等典型连接图
程序图如下:
#include
#include “lcd.h”
#include
#define uint unsigned int
#define uchar unsigned char
uchar lcd[]=“0123456789”;
sbit rd=P3^6; //IO口定义
sbit wr=P3^5;
sbit cs=P3^7;
read_adc0804()//控制并读取adc0804转换好的数据
{
uchar a; //写入控制命令,启动转换
cs=1;
wr=1;
cs=0;
wr=0;
_nop_();
wr=1;
P1=0xff; //读取已转换好的数据
rd=1;
rd=0;
_nop_();
a=P1;
rd=1;
cs=1;
return a;
}
void main()
{
uchar a,A1,A2,A3;
lcd_init();
while(1)
{
a=read_adc0804();
A1=a/100; //分出百,十,和个位
A2=a%100/10;
A3=a%10;
lcd_busy();
lcd_xy(3,0);
lcd_write_dat(lcd[A1]);
lcd_busy();
lcd_xy(4,0);
lcd_write_dat(lcd[A2]);
lcd_busy();
lcd_xy(5,0);
lcd_write_dat(lcd[A3]);
}
}
推荐阅读:
全部0条评论
快来发表一下你的评论吧 !