本程序功能是利用AD0809实现模数转换及在数码管上显示;文中绿字部分是利用不同的方法实现某一项功能或任务,像AD的时钟既可以用定时器T0或T1产生,也可以利用T2特有的产生时钟脉冲的功能。学习过程中遇到很多困难,希望能和大家相互交流。有兴趣的可以加51单片机群:293469552
#include #include
#define uchar unsigned char #define uint unsigned int
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //uchar code td[]={0,1}; //uchar x[2]; sbit t1=P1^1; sbit t2=P1^2;
sbit t3=P1^3; sbit st=P3^0; sbit oe=P3^1; sbit eoc=P3^2; sbit a=P1^7; //sbit key5=P3^5; //sbit key6=P3^6; //sbit key7=P3^7; long value=0; uchar bai,shi,ge; void delay(uint tms) { }
void init_t2()//T2端口输出时钟脉冲设置 (用T2产生时钟脉冲) { }
/*void init_t0()//法1 用定时器产生时钟脉冲
//TR2=0x00; T2MOD=0x02; C_T2=0;
TL2=0xfa;//单片机11.0592Mhz条件下实测为460khz左右 TH2=0xff; RCAP2L=0xfa; RCAP2H=0xff; TR2=1; uint i,j;
for(i=tms;i>0;i--)
for(j=110;j>0;j--);
{ }
void t0() interrupt 1 { }*/
/*void init_t0()//T0计数器模式的设置,不是中断 { }
void num_read() { {
th0=TH0; while(1) //EA=1; //ET0=1; TMOD=0x05; TH0=0; TL0=0; TR0=1;
TH0=(65536-20)/256;//单片机11.0592Mhz时产生的频率实测为15khz左右 TL0=(65536-20)%6; clock=~clock; TMOD=0x01; TH0=(65536-20)/256; TL0=(65536-20)%6; EA=1; ET0=1; TR0=1;
} }*/
tl0=TL0; th=TH0; if(th==th0)
break;
void init_AD() { /*uint i; for(i=0;i<2;i++) { st=0; } }
void keyscan() {
a=td[i]; oe=0; _nop_();
st=1;
_nop_(); st=0;
oe=1;
x[i]=P2; _nop_(); oe=0;
if(key6==0) { delay(10); if(key6==0) { value=x[0];
}
if(key7==0) { }*/
a=1; st=0; _nop_();
_nop_(); st=0;
while(eoc==0);
value=P2;
while(!key6);
}
delay(10); if(key7==0) { value=x[1]; while(!key7);
}
st=1;
oe=1;