基于51单片机的ADC0832数字电压表(仿真+程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

仿真图:

/*********************************包含头文件********************************/ #include

#include

/*********************************端口定义**********************************/ sbit CS = P3^5;

sbit Clk = P3^3;

sbit DATI = P3^4;

sbit DATO = P3^4;

sbit P20=P2^0 ;

/*******************************定义全局变量********************************/ unsigned char dat = 0x00; //AD值

unsigned char count = 0x00; //定时器计数

unsigned char CH; //通道变量

unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值

/*******************************共阳LED段码表*******************************/ unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe };

/****************************************************************************

函数功能:AD转换子程序

入口参数:CH 出口参数:dat

****************************************************************************/ unsigned char adc0832(unsigned char CH)

{

unsigned char i,test,adval;

adval = 0x00;

test = 0x00;

Clk = 0; //初始化

DATI = 1;

_nop_();

CS = 0;

_nop_();

Clk = 1;

_nop_();

if ( CH == 0x00 ) //通道选择

{

Clk = 0;

DATI = 1; //通道0的第一位

_nop_();

Clk = 1;

_nop_();

Clk = 0;

DATI = 0; //通道0的第二位

_nop_();

Clk = 1;

_nop_();

}

else

{

Clk = 0;

DATI = 1; //通道1的第一位

_nop_();

Clk = 1;

_nop_();

Clk = 0;

DATI = 1; //通道1的第二位_nop_();

Clk = 1;

_nop_();

}

Clk = 0;

DATI = 1;

for( i = 0;i < 8;i++ ) //读取前8位的值{

_nop_();

adval <<= 1;

Clk = 1;

_nop_();

Clk = 0;

if (DATO)

adval |= 0x01;

else

adval |= 0x00;

}

for (i = 0; i < 8; i++) //读取后8位的值{

test >>= 1;

if (DATO)

test |= 0x80;

else

test |= 0x00;

_nop_();

Clk = 1;

_nop_();

Clk = 0;

}

if (adval == test) //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉

dat = test;

_nop_();

CS = 1; //释放ADC0832

DATO = 1;

Clk = 1;

return dat;

}

/****************************************************************************

函数功能:延时子程序

****************************************************************************/

void delay(void)

{

int k;

for(k=10;k<500;k++);

}

/****************************************************************************函数功能:将0-255级换算成0.00-5.00的电压数值

****************************************************************************/ void convdata(unsigned char i)

{

dis[0] = i/51; //个位

dis[1] = (i%51)*10/51*2; //小数点后第一位

dis[2] = ((i%51)*10%51)*10/51*2; //小数点后第二位

}

/****************************************************************************函数功能:数码管显示子程序

****************************************************************************/ void display(void)

{

P2=0xff;

P0=tab[dis[0]] & 0x7f; //显示个位和小数点

delay();

P2=0xfd;

P2=0xff;

P0=tab[dis[1]]; //显示小数点后第一位

相关文档
最新文档