利用ADC0809测量电压,并将测量结果显示在数码管上,程序烧录进去,数码管显示为0,时序也没发现什么问题,就是读不出数据?哪位大神帮忙检查一下,谢谢
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0~9数码,不带小数点
uchar code table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //共阴极数码管0~9数码,带小数点
sbit _CLK=P1^7; //时钟信号输入线
sbit _ST=P1^6; //转换启动信号
sbit _EOC=P1^5; //转换结束信号
sbit _OE=P1^4; //输出允许信号
sbit _ALE=P1^3; //地址锁存输入线
sbit _A=P1^0; //
sbit _B=P1^1; //
sbit _C=P1^2; //输入地址线
sbit LED1=P2^0; //数码管1段选控制位,低电平有效
sbit LED2=P2^1; //数码管2段选控制位,低电平有效
sbit LED3=P2^2; //数码管3段选控制位,低电平有效
void delay_us(uint m) //@12.000MHz
{
while(m--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void display(uchar num)
{
uchar g1,g2,g3;
uint sum;
sum=(500/255)*num;//电压转换,5V做外参考电压,分成256份
g3=sum/100; //个位
g2=sum/100%10; //十分位
g1=sum%10; //百分位
P2=0xfe;
P0=table2[g1];
delay_us(10);
P2=0xfd;
P0=table1[g2];
delay_us(10);
P2=0xfb;
P0=table1[g3];
delay_us(10);
}
void adc()
{
uchar num;
_ST=0;
_OE=0;
_ALE=0;
_A=0;
_B=0;
_C=0; //选择第一个通道即IN0
_ALE=1; //上升沿,通道锁存地址
_ST=1; //上升沿,对所有寄存器清零
_ST=0; //下降沿启动转换
while(!_EOC);
_OE=1;
num=P3;
_OE=0;
display(num);
}
void main()
{
TMOD=0x00;
TH0=0xFF;
TL0=0xFA;
TR0=1;
ET0=1;
EA=1;
while(1)
{
adc();
delay_us(100);
}
}
void Timer0() interrupt 2
{
TH0=0xFF;
TL0=0xFA;
_CLK=~_CLK; //时钟信号
}
|