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

实验名称:AD实验一

实验目的:利用单片机控制ADC0804进行模数转换,拧动

 电位器Re2时数码管前三位以十进制动态显示

 A/D转换后的数字量(0~255) ?

实验备注:

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

#include<reg52.h>

#include<intrins.h>


#define uchar unsigned char

#define uint unsigned int


sbit DUAN = P2^6;

sbit WEI = P2^7;

sbit ADRD = P3^7;

sbit ADWR = P3^6;


uchar code duan_table[]=

{0x3f,0x06,0x5b,0x4f,

 0x66,0x6d,0x7d,0x07,

 0x7f,0x6f,0x77,0x7c,

 0x39,0x5e,0x79,0x71};


uchar code wei_table_ad[]=

{0x7e,0x7d,0x7b,

 0x77,0x6f,0x5f};


void delay1ms(uchar);

void display(uchar);


void main()

{

uchar i,advar;

WEI = 1;

P0 = 0x7f;

WEI = 0;

while(1)

{

ADWR = 1;

_nop_();

ADWR = 0;

_nop_();

ADWR = 1;

for(i = 0; i < 5; i++)

{

display(advar);

}

ADRD = 1;

_nop_();

ADRD = 0;

_nop_();

advar = P1;//从高电平变低电平后,

ADRD = 1;  //读完书再变回高电平。

_nop_();

}

}


void delay1ms(uchar x)

{

int i, j;

for(i = 0; i < x; i++)

for(j = 0; j < 110; j++);

}


void display(uchar num)

{

DUAN = 1;

P0 = duan_table[num/100];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[0];

WEI = 0;

delay1ms(1);

DUAN = 1;

P0 = duan_table[num%100/10];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[1];

WEI = 0;

delay1ms(1);


DUAN = 1;

P0 = duan_table[num%10];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table_ad[2];

WEI = 1;

delay1ms(1);

}