当前位置:首页 > 单片机 > 单片机
[导读] /****************************************************************************** 八路AD采集电压表* 单片机采用AT89S52,晶振频率为:12.00MHz。/*********************************************

/*****************************************************************************
* 八路AD采集电压表

* 单片机采用AT89S52,晶振频率为:12.00MHz。
/******************************************************************************/
#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]={0,0,0,0,0,0,0,0};
unsigned char dispcount;
unsigned char getdata;
unsigned int temp;
unsigned char i,m=1;

sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
/********延时字程序************/
void delay10ms()
{
unsigned char j,k;
for(j=20;j>0;j--)
for(k=248;k>0;k--);

}
/********延时字程序************/
void delay(unsigned char delay)
{
unsigned char j,k;
for(delay;delay>0;delay--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);

}

/********键盘扫描************/
void scan_key()
{
if((P3!=0xff))
{
if(P3_6==0)
{delay10ms();
if(P3_6==0)
{m++;
if(m>8) m=1;
}
while(P3_6==0);
}

if(P3_7==0)
{ delay10ms();
if(P3_7==0)
{m--;
if(m<1) m=8;
}
while(P3_7==0);
}
if(m==1)
{
P2_5=0;
P2_6=0;
P2_7=0;
}
if(m==2)
{
P2_5=1;
P2_6=0;
P2_7=0;
}
if(m==3)
{
P2_5=0;
P2_6=1;
P2_7=0;
}
if(m==4)
{
P2_5=1;
P2_6=1;
P2_7=0;
}
if(m==5)
{
P2_5=0;
P2_6=0;
P2_7=1;
}
if(m==6)
{
P2_5=1;
P2_6=0;
P2_7=1;
}
if(m==7)
{
P2_5=0;
P2_6=1;
P2_7=1;
}
if(m==8)
{
P2_5=1;
P2_6=1;
P2_7=1;
}
}

}
/********循环扫描************/
void scan_in()
{
for(m=8;m>0;m--)
{
delay(10);
if(m==1)break;
}

}

/********主程序************/
void main(void)
{

ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12;
TH0=216;
TL0=216;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
TR1=1;
TR0=1;
ST=1;
ST=0;

while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*250;
temp=temp/128;
i=0;
dispbuf[0]=0;
dispbuf[1]=0;
dispbuf[2]=0;
dispbuf[3]=0;
dispbuf[4]=10;
dispbuf[5]=10;
dispbuf[6]=10;
dispbuf[7]=10;

scan_key();
while(temp/10)
{
dispbuf=temp%10;
temp=temp/10;
i++;
}
dispbuf=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];
dispcount++;
if(dispcount>2)
{
P1=P1 | 0x80;
}
if(dispcount==4)
{
P1=dispcode[m];
}
if(dispcount==8)
{
dispcount=0;
}
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭