#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit wr=P3^6;
sbit rd=P3^2;
void init_DA0832()//DA芯片准备函数
{
rd=0;
wr=0;
}
void delay(u16 xms)
{
u16 i,k;
for(i=0;i<xms;i++)
for(k=0;k<113;k++);
}
void main()
{
u8 j;
init_DA0832();
while(1)
{
for(j=225;j<255;j++)
{
P2=j; //数模转换 把模拟输入采样的信号 通过数模转换输出
delay(55);
}
for(j=255;j>225;j--)
{
P2=j; //数模转换 把模拟输入采样的信号 通过数模转换输出
delay(55);
}
}
}
#include<reg51.h>
#include<intrins.h>
sbit OE=P2^1;//输出允许
sbit ST=P2^2;//START、ALE,启动转换、地址锁存
sbit EOC=P2^0;//转换结束
sbit CLOCK=P2^4;//时钟
sbit C0=P3^7;//数码管位选
sbit C1=P2^6;//数码管位选
sbit C2=P2^7;//数码管位选
sbit Dp=P2^5;//小数点
table[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //共阳极数码管0~9显示的数值表
unsigned int data dis[4]={0x00,0x00,0x00,0x00}; //用以计算存储输出电压的数组
unsigned char getData;
//延时函数
void delay(int t) //延时子函数
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<50;j++);
}
void init()
{
TMOD=0x02; //打开中断计时器0
TH0=255;
TL0=255;
EA=1;
ET0=1;
TR0=1;
}
//主函数
void main()
{
while(1)
{
init();
OE=0; //关闭输出允许位
ST=0;
ST=1;
_nop_();
ST=0; // 下降沿使ADC0809开始
delay(10); //等待转换完成
if(EOC==1) //如果转换结束位为1,标志转换已经完成
{
OE=1; // 打开输出允许位
getData=P0; //把8位数字量输出赋值给变量getData
OE=0; //关闭输出允许位
dis[3]=getData/51; //每刻度值为5/256V,所以电压值为输出的8位数字值*5/256V,计算输出电压的整数值
dis[2]=getData%51; //dis[2]位中间暂存数据位
dis[1]=dis[2]*10;
dis[1]=dis[1]/51; //计算输出电压的小数值
dis[0]=(((dis[2]*10)%51)*10)/51; //计算输出电压的第二位小数值
C0=0; //关闭第三位数码管
C1=0; //关闭第二位数码管
C2=1; //打开第一位数码管
Dp=0; //打开小数点
P1=table[dis[3]]; //显示整数部分及小数点
delay(2); //延时一定时间
C0=0; //关闭第三位数码管
C2=0; //关闭第一位数码管
C1=1; //打开第二位数码管
Dp=1; //关闭小数点
P1=table[dis[1]]; //显示小数部分
delay(2);
C2=0; //关闭第一位数码管
C1=0; //关闭第二位数码管
C0=1; //打开第三位数码管
Dp=1; //关闭小数点
P1=table[dis[0]]; //显示小数部分
}
}
}
//中断函数
void t0(void) interrupt 1 using 0
{
CLOCK=~CLOCK; //利用C51的中断计时器给ADC0809输入时钟脉冲信号
}