STC12单片机8位AD转换程序

/******************************************************************
* STC12单片机AD转换 8位
*
*
* 2013年9月2日 made by musen
******************************************************************/
#include
#include
#define FOSC 18432000l
#define BAUD 9600
typedef unsigned char BYTE;
typedef unsigned char WORD;

unsigned char code smgdua[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //数码管段控制
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;

int D[4];
int j;



sfr ADC_LOW2=0xBE;


#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60

void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
BYTE ch=0;
void delay1(int i);
void display();
void main()
{
InitUart();
InitADC();
IE=0xa0;

while(1)
{
display();
}

}

void adc_isr()interrupt 5
{
ADC_CONTR&=!ADC_FLAG;
SendData(ch);
SendData(ADC_RES);
// SendData(ADC_LOW2);
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
}

void InitADC()
{
P1ASF=0xff;
ADC_RES=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
Delay(2);
}

void InitUart()
{
SCON=0x5a;
TMOD=0x20;
TH1=TL1=-(FOSC/12/32/BAUD);
TR1=1;
}

void SendData(BYTE dat)
{
while(!TI);
TI =0;
SBUF=dat;

j=dat;

}

void Delay(WORD n)
{
WORD x;
while(n--)
{
x=5000;
while(x--);
}
}

void display()
{
int i;
D[0]=smgdua[j%10];
D[1]=smgdua[j%100/10];
D[2]=smgdua[j%1000/100];
D[3]=smgdua[j%10000/1000];

for(i=0;i<4;i++)
{
P0=D[i];
switch(i)
{
case 0:c=1;b=1;a=1;break;
case 1:c=1;b=1;a=0;break;
case 2:c=1;b=0;a=1;break;
case 3:c=1;b=0;a=0;break;
}
delay1(60);
}


}

void delay1(int i)
{
for(;i>0;i--);
}



相关文档
最新文档