ADC0809转换错误
时间:10-02
整理:3721RD
点击:
用51单片机 想在AD0809转换后用LCD1602显示出来 AD输出接P3口 ST与ALE接p1.2 OE接p1.0 EOC接p1.1 CLK接p1.3 ADDA B C分别接1.4 1.5 1.6 用IN3口输入电压 LCD接P0口 还没有接电压显示屏上就一直跳数 这是什么原因 程序应该怎么改啊 LCD程序是对的 主函数里注释了AD()输出正常 大神们救我啊
#include<reg51.h>
#include"lcd.h"
#include<math.h>
unsigned char table1[]=" The voltage is: ";
unsigned char getdata;
sbit OE = P1^0;
sbit EOC = P1^1;
sbit ST = P1^2;
sbit CLK = P1^3;
unsigned int temp;
void TimeInit()
{
TMOD = 0x02;
TH0 = 216;
TL0 = 216;
IE = 0x82;
TR0 = 1;
P1 = 0x3f;
}
void AD(void)
{
ST = 0;
ST = 1;
ST = 0;
OE = 0;
Lcd1602_Delay1ms(1);
while(EOC==0);
OE = 1;
getdata = P3;
OE = 0;
}
void main()
{
unsigned char k,bai,shi,ge;
unsigned int i;
LcdInit();
TimeInit();
while(1)
{
AD();
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(table1);
}
temp = getdata*1.0/255*500;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
LcdWriteCom(0x80+0x40+6);
LcdWriteData(bai+0x30);
LcdWriteData(0x2e);
LcdWriteData(shi+0x30);
LcdWriteData(ge+0x30);
LcdWriteData('V');
Lcd1602_Delay1ms(50);
}
}
void Timer0_INT() interrupt 1
{
CLK = !CLK;
}
AD输入浮空跳数很正常啊。
建议你先接地看看采集是否正常,然后程序里面操作最好加一点延时。
原来接地线没接上地0.0 不过我用电源给个电压示数偏差好大
不要用电源给,用校准过的DAC给。