使用ADC0808的IN0通道,输入CLOCK为500KHZ,采用AT89C51单片机
ADC0808的ADDA、ADDB、ADDC为000对应通道IN0
ADC0808的ADDA、ADDB、ADDC为001对应通道IN1
ADC0808的ADDA、ADDB、ADDC为010对应通道IN2以此内推。
START和ALE可以共用一个I/O口,它们是同步的。
本文采用IN0通道所以ADDA、ADDB、ADDC直接接地。
数码管显示部分代码,数码管采用共阴极显示
#include <REGX52.H>
#include "Delay.h"
sbit we1=P3^0;
sbit we2=P3^1;
sbit we3=P3^2;
sbit we4=P3^3;
//共阴极数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管显示子函数
void Nixie(float num)
{
unsigned int x,y,z,f;
x=num/1000;//取出电压的每一位值
y=(unsigned int)num%1000/100;//(unsigned int)浮点型强制转换为整形数据显示
z=(unsigned int)num%100/10;
f=(unsigned int)num%10;
we1=0;
P0=NixieTable[x]+0x80; //显示小数点和1伏
Delay(1);
we1=1;
P0=0x00;
we2=0;
P0=NixieTable[y]; //段码输出
Delay(1); //显示一段时间
we2=1;
P0=0x00; //段码清0,消影
we3=0;
P0=NixieTable[z]; //段码输出
Delay(1); //显示一段时间
we3=1;
P0=0x00; //段码清0,消影
we4=0;
P0=NixieTable[f]; //段码输出
Delay(1); //显示一段时间
we4=1;
P0=0x00; //段码清0,消影
}
ADC0808转换代码
#include <REGX52.H>
#include <Delay.h>
sbit ST=P2^0;
sbit EOC=P2^1;
sbit OE=P2^2;
unsigned int readDAC0808()
{
unsigned int ADC_NUM;
ST=1;//清空ADC0808的内部寄存器值
Delay(1);
ST=0;//下降沿开始AD转换
while(EOC==0);//判断转换是否结束
OE=1;
ADC_NUM=P1;//接收数据
return ADC_NUM;
}
主函数代码
#include <REGX52.H>
#include <Delay.h>
#include <Nixie.h>
#include <DAC0808.h>
void main()
{
float num;
while(1)
{
num=readDAC0808()*(5.0/255)*1000;//读取DAC0808的转换值,并且将二进制数转换为电压值
Nixie(num);//数码管显示
}
}
由于是第一次创作还不熟练仅供初学者参考