#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char //定义数码管位码端口
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit OE=P3^0; //定义ADC0808端口 oe接3.0
sbit EOC=P3^1; //eoc接3.1
sbit ST=P3^2; //start接3.2
sbit P3_4=P3^4; //a接3.4
sbit P3_5=P3^5; //b接3.5
sbit P3_6=P3^6; //c接3.6
sbit S=P2^4 ;
char d;
uchar code table1[]= {0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个 显示电压
uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0~9十个段码/段码
uchar volt_data;
void init();
uchar i;
//*********************************
//延时子程序
//*********************************
void delay(uchar z) //延迟
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//*********************************
//将AD转换输出的数据转换成相应的
//电压值并且显示出来
//*********************************
void convert(uchar volt_data)
{
P0=table1[volt_data*196/10000]; //AD转换的个位的电压值
P2_1=1;
delay(2);
P2_1=0;
P0=tab[d];
P2_0=1; //数码管显示第x路
delay(2);
P2_0=0;
P0=tab[volt_data*196/1000%10];
P2_2=1; //显示小数点的后的第一位
delay(2);
P2_2=0;
P0=tab[volt_data*196/100%10];
P2_3=1; //显示小数点的后的第二位
delay(2);
P2_3=0;
} void main()
{ uchar volt_data;
TMOD=0x01;
TH0=(65536-1000)/256; //1ms延迟
TL0=(65536-1000)%256;
EA=1;ET0=1;
i=0;
TR0=1;
d=1;
while(1)
{
if(S==0) //按一下key,d自加1
{
delay(2);
if(S==0)
{
while(!S);
d++;
if(d==9)//当d=8,d变为1
d=1;
}
}
if(i==5) //5ms做一次ADC转换
{
i=0;
ST=0; //
_nop_();
ST=1;
_nop_();
ST=0; //启动AD转换
if(EOC==0) //等待转换结束
delay(2);
while(EOC==0);
OE=1; //允许输出
volt_data=P1; //读值
convert(volt_data); //调用数据处理子程序
delay(2); //暂存转换结果
OE=0; //关闭输出
init(); }
}
} void time0_int(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
i++;
}
void init()
{
switch(d)
{case 1:
P3_4=0; //选择通道0
P3_5=0;
P3_6=0;
break;
case 2:
P3_4=1; //选择通道0
P3_5=0;
P3_6=0;
break;
case 3:
P3_4=0; //选择通道0
P3_5=1;
P3_6=0;
break;
case 4:
P3_4=1; //选择通道0
P3_5=1;
P3_6=0;
break;
case 5:
P3_4=0; //选择通道0
P3_5=0;
P3_6=1;
break;
case 6:
P3_4=1; //选择通道0
P3_5=0;
P3_6=1;
break;
case 7:
P3_4=0; //选择通道0
P3_5=1;
P3_6=1;
break;
case 8:
P3_4=1; //选择通道0
P3_5=1;
P3_6=1;
break; }
}
#include<intrins.h>
#define uchar unsigned char //定义数码管位码端口
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit OE=P3^0; //定义ADC0808端口 oe接3.0
sbit EOC=P3^1; //eoc接3.1
sbit ST=P3^2; //start接3.2
sbit P3_4=P3^4; //a接3.4
sbit P3_5=P3^5; //b接3.5
sbit P3_6=P3^6; //c接3.6
sbit S=P2^4 ;
char d;
uchar code table1[]= {0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个 显示电压
uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳极0~9十个段码/段码
uchar volt_data;
void init();
uchar i;
//*********************************
//延时子程序
//*********************************
void delay(uchar z) //延迟
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//*********************************
//将AD转换输出的数据转换成相应的
//电压值并且显示出来
//*********************************
void convert(uchar volt_data)
{
P0=table1[volt_data*196/10000]; //AD转换的个位的电压值
P2_1=1;
delay(2);
P2_1=0;
P0=tab[d];
P2_0=1; //数码管显示第x路
delay(2);
P2_0=0;
P0=tab[volt_data*196/1000%10];
P2_2=1; //显示小数点的后的第一位
delay(2);
P2_2=0;
P0=tab[volt_data*196/100%10];
P2_3=1; //显示小数点的后的第二位
delay(2);
P2_3=0;
} void main()
{ uchar volt_data;
TMOD=0x01;
TH0=(65536-1000)/256; //1ms延迟
TL0=(65536-1000)%256;
EA=1;ET0=1;
i=0;
TR0=1;
d=1;
while(1)
{
if(S==0) //按一下key,d自加1
{
delay(2);
if(S==0)
{
while(!S);
d++;
if(d==9)//当d=8,d变为1
d=1;
}
}
if(i==5) //5ms做一次ADC转换
{
i=0;
ST=0; //
_nop_();
ST=1;
_nop_();
ST=0; //启动AD转换
if(EOC==0) //等待转换结束
delay(2);
while(EOC==0);
OE=1; //允许输出
volt_data=P1; //读值
convert(volt_data); //调用数据处理子程序
delay(2); //暂存转换结果
OE=0; //关闭输出
init(); }
}
} void time0_int(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
i++;
}
void init()
{
switch(d)
{case 1:
P3_4=0; //选择通道0
P3_5=0;
P3_6=0;
break;
case 2:
P3_4=1; //选择通道0
P3_5=0;
P3_6=0;
break;
case 3:
P3_4=0; //选择通道0
P3_5=1;
P3_6=0;
break;
case 4:
P3_4=1; //选择通道0
P3_5=1;
P3_6=0;
break;
case 5:
P3_4=0; //选择通道0
P3_5=0;
P3_6=1;
break;
case 6:
P3_4=1; //选择通道0
P3_5=0;
P3_6=1;
break;
case 7:
P3_4=0; //选择通道0
P3_5=1;
P3_6=1;
break;
case 8:
P3_4=1; //选择通道0
P3_5=1;
P3_6=1;
break; }
}