×
单片机 > 单片机程序设计 > 详情

ADC0809实现8路模拟信号轮流转换(数码管上显示)

发布时间:2020-05-28 发布时间:
|
//-----------------------------

功能: ADC0809实现8路模拟信号轮流转换,并且
      在数码管上显示出来;
1、P1口作为数码管的段码控制端,
   P2口作为数码管的位码控制端,
2、P2。7口作为转换启动信号
   0809的RD,WR分别与8051的相应端连接,
   当它有效时,写时写的是地址,
                读时读的是数据;
3、0809的A0,A1,A2和D0--D1都接在P0口。

#include
#define uint unsigned int 
#define uchar unsigned char
sbit start=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
     0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar num1,num2,num3,flag;
uchar aa,bb;
void delay();
void disp();
void ad0809();
void main()
{
 SMOD=0x01;
 TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    ET0=1;
 EA=1;
 TR0=1;
 uchar ad[8]={};
   while(1)
    {   
  if(flag==1)
    {
    ad0809();
   flag=0;        
  }
       disp();
 }
    
 
}
//===================
void delay(uint z)
{
   uint x;
   uchar y;
 for(x=0;x  for(y=0;y<100;y++);
}

//=====================
void disp()
{   uchar i;
  for(i=0;i<8;i++)
   {
    P1=table[i] ;
 P2=0x7e;
    delay(5);
    P1=0;
 delay(1);
 P1=table[10] ;
 P2=0x7d;
    delay(5);
    P1=0;
 delay(1);
    P1=table[ad[i]/100];
 P2=0x7b;
    delay(5);
    P1=0;
 delay(1);
    P1=table[ad[i]%100/10];
 P2=0x77;
    delay(5);
    P1=0;
 delay(1);
 P1=table[ad[i]%10];
 P2=0x6f;
    delay(5);
    P1=0;
 delay(1);
 }
}

//===================
void ad0809()
{
  uchar j;
   for(j=0;j<8;j++)
   {
  start=0;
  P1=j;
        start=1
  delay(1);
  start=0;
  P1=ad[j];
        start=1;
  delay(1);
        start=0;
        
 } 
}
//=======================
void timer0()  interrupt 1
{
 TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    aa++;
    if(aa==20)
     {
  aa=0;
  flag=1; 
  }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯