89C52与ADC0809还有LCD1602实现数字电压表功能,但是一直不管怎么调整电压显示一直是4.980
#include<reg52.h>#include<intrins.h> //调用_nop_();延时函数用
#define uchar unsigned char#define uint unsigned int
uchar code table[]="0123456789.";//定义显示的数组
sbit lcden=P3^5;//定义管脚
sbit lcdrs=P3^3;
sbit lcdrw=P3^4;
sbit a=P2^1;
sbit b=P2^2;
sbit c=P2^3;
sbit st=P2^4;
sbit eoc=P2^5;
sbit oe=P2^6;
uchar num,flag;
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//1602读指令
{ lcdrw=0;
lcdrs=0;
P1=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)//1602读数据
{ lcdrw=0;
lcdrs=1;
P1=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init()//1602初始化函数
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
uchar date=0;
float temp=0.0;
uchar q,b,s,g;
a=1;//选着ADC0809的第7通道
b=1;
c=1;
lcd_init();
oe=0;
while(1)
{
st=0;
st=1;
st=0;
delay(5);
while(!eoc)
{
oe=1;
date=P0;
oe=0;
temp= (float) date*5.0/256;//数据处理
temp=temp/100.0;
temp=temp*100000.0;
q=(int)temp/1000;
b=(int)temp%1000/100;
s=(int)temp%1000%100/10;
g=(int)temp%10;
write_com(0x80);//1602显示处理好的数据
write_data(table[q]);
delay(20);
write_data(table[11]);
delay(20);
write_data(table[b]);
delay(20);
write_data(table[s]);
delay(20);
write_data(table[g]);
delay(20);
}
}
}
同时加入有1Mhz的有源晶振
[解决办法]
该回复于2012-11-05 12:48:28被版主删除
[解决办法]
该回复于2012-11-05 12:48:49被版主删除
[解决办法]
是单纯你自己的设备不能用呢?还是放到别人设备和你的设备都不能用。
如果就你的不能用很有可能是时钟源的芯片坏了,或者AD芯片坏了。(时钟源的可能性较高)
[解决办法]
程序直接对变量temp赋值 检测外围电路问题
[解决办法]
硬件连接是否有有问题?
[解决办法]
贴电路图哦,要不然还是会有问题的