#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit ST= P1^3;//启动信号
sbit EOC=P1^4;//转换结束信号
sbit OE= P1^5;//输出使能
sbit CLK=P1^6;//时钟信号
//0~9字型码
uchar code seg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/**************************************************
函数功能:软件延时
入口参数:类型uint x为1ms的倍数
出口参数:无
****************************************************/
void delay(uint x)
{
uchar i;
while(x--)
for(i=0;i<115;i++);//1ms
}
/**************************************************
函数功能:数码管显示
入口参数:seg_data[]为0~9字型码
出口参数:uint x 要显示的数字
****************************************************/
void display(uint x)
{
uchar i,disp[3];
disp[0]=seg_data[x/100];//百位
disp[1]=seg_data[(x%100)/10]; //十位
disp[2]=seg_data[x%10]; //个位
for(i=0;i<3;i++)
{
P0=disp[i]; //数码管段码
P2=~(1<
delay(20); //延时2ms
P2=0xff; //关闭数码管显示
}
}
main()
{
TMOD=0x02;//T0工作模式2
TH0=0x14;
TL0=0x14;
ET0=1;
EA=1;
TR0=1;
P1=0;//选择ADC0808的通道0
while(1){
ST=0;
EOC=1;//高电平有效
OE=0;
ST=1;//上升沿清零、锁存地址
ST=0;//下降沿开始A/D转换
while(EOC==1);//等待转换完成
OE=1;//输出允许信号
display(P3);//显示转换的数据
}
}
/**************************************************
T0定时器中断给ADC0808提供时钟信号
****************************************************/
void Timer0_INT() interrupt 1
{
CLK=~CLK;
}