/*用的是主程序中转换AD,在以后的使用中要用中断的方法才能节约CPU的使用率,本程序中是用P1.0为输入,用的是单片机本身的10位AD,最大1024分辨率,除以10后最大为102,用两位的数码管,所以只能在99以内,在程序中大于99的数,就只能显示99,也可用三位数码管显示.*/
#include< reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define duan P1 //数码管段码输出端
sfr ADC_CONTR = 0xc5;
sfr ADC_DATA = 0xc6;
sfr ADC_LOW2 = 0xbe;
sfr P1M0 =0x91;
sfr P1M1 =0x92;
sbit sw=P2^7; //数码管的十位选通
sbit gw=P2^6; //数码管的个位选通
uint shu,ad_shu;
uchar code tab[]={ 0xEE,/*0*/
0x48,/*1*/
0xD6,/*2*/
0xDC,/*3*/
0x78,/*4*/
0xBC,/*5*/
0xBE,/*6*/
0xC8,/*7*/
0xFE,/*8*/
0xFC,/*9*/
};
void delay( )
{
uchar a;
for(a=10;a>0;a--);
}
void desplay(int bb)
{
uint ab;
ab=bb;
if(ab>99) ab=99;
duan=tab[ab/10];
sw=0;
delay();
sw=1;
duan=tab[ab%10];
gw=0;
delay();
gw=1;
}
void main()
{
ADC_CONTR=0xe0; //开A/D转换器
P1M0=0x01; //定义P1.0为AD输入端口,让P1.0为高阻态
P1M1=0x01; //定义P1.0为AD输入端口,让P1.0为高阻态
while(1)
{
ADC_CONTR|=0x08;
while((ADC_CONTR & 0x10)==0);
ADC_CONTR&=0xe7;
ad_shu=ADC_DATA;
ad_shu<<=2;
ad_shu+=ADC_LOW2;
shu=ad_shu/10;
desplay(shu);
}
}
