基于AT89C52,ADC0809简易数字电压表数码管显示c程序(4位的共阳数码管),主要是最后89C52的四位控制

2024-12-12 09:28:14
推荐回答(1个)
回答1:

#include  

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

         0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

        0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};

unsigned char dispcount;

unsigned char getdata;

unsigned int temp;

unsigned char i;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

sbit CLK=P3^3;

void main(void)

{

 ST=0;

 OE=0;

 ET0=1;

 ET1=1;

 EA=1;

 TMOD=0x12;

 TH0=216;

 TL0=216;

 TH1=(65536-4000)/256;

 TL1=(65536-4000)%256;

 TR1=1;

 TR0=1;

 ST=1;

 ST=0;

 while(1)

 {

  if(EOC==1)

  {

   OE=1;

   getdata=P0;

   OE=0;

   temp=getdata*235;

   temp=temp/128;

   i=5;

   dispbuf[0]=10;

   dispbuf[1]=10;

   dispbuf[2]=10;

   dispbuf[3]=10;

   dispbuf[4]=10;

   dispbuf[5]=0;

   dispbuf[6]=0;

   dispbuf[7]=0;

   while(temp/10)

   {

    dispbuf[i]=temp%10;

    temp=temp/10;

    i++;

   } 

   dispbuf[i]=temp; 

   ST=1;

   ST=0;

  }

 }

}

void t0(void) interrupt 1 using 0

{

CLK=~CLK;

}

void t1(void) interrupt 3 using 0

{

 TH1=(65536-4000)/256;

 TL1=(65536-4000)%256;

 P1=dispcode[dispbuf[dispcount]];

 P2=dispbitcode[dispcount];

 if(dispcount==7)

 {

  P1=P1 | 0x80;

 }

  dispcount++;

 if(dispcount==8)

 {

 dispcount=0;

 } 

}