#include <reg51.H>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit OE =P1^7;
sbit EOC =P1^6;
sbit ST =P1^5;
sbit CLK =P1^4;
unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f}; //位扫描
unsigned char dispcode[16]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //字段码 共阴
unsigned char dispbuf[4];
uchar getdata; //获取从ADC转换回来的值
void Init_Timer0(void)
{
EA=1;
TMOD=0x02;
TH0=0XF6;
TL0=0XF6;
ET0=1;
TR0=1;
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x0f;
TL0=0x00;
CLK=!CLK;
}
void delay_1ms(void) //12mhz delay 1.01ms
{
unsigned char x,y;
x=3;
while(x--)
{
y=40;
while(y--);
}
}
void AD(void) //AD转换
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P2;
OE=0;
}
void convert(void) //数据转换
{
uint temp;
temp=getdata*1.0/255*500;
dispbuf[3]=temp/1000;
dispbuf[2]=(temp%1000)/100;
dispbuf[1]=((temp%1000)%100)/10;
dispbuf[0]=((temp%1000)%100)%10;
}
void display(void) //显示
{
char k;
for(k=0;k<4;k++)
{
P3 = dispbitcode[k];
P0 = dispcode[dispbuf[k]];
if(k==2) //小数点dp
P0|=0x80;
delay_1ms();
}
}
void main(void)
{
Init_Timer0();
while(1)
{
AD();
convert();
display();
}
}