本帖最后由 muhuilai 于 2012-10-26 20:21 编辑
用adc0809做的数字电压表,测量时准时不准电压测量如下:
标准值 1.10 1.50 1.90 2.50 2.70 2.80 3.50 3.68 4.26
测量值 1.03 1.42 1.31 2.43 2.02 2.22 3.34 3.02 4.14
我大概看了一下,每次一超过0.5之后,就会不准。不知道是怎么回事。
程序在下:
#include
//包含单片机寄存器的头文件
#include
#define uchar unsigned char
#define uint unsigned int
#define keyio P2
***it DISX=P0^7; //小数点
***it ALE=P3^3;
***it START=P3^4;
***it OE=P2^7;
***it EOC=P2^6;
***it a=P3^0;
***it b=P3^1;
***it c=P3^2;
***it z=P3^5;
***it r=P3^6;
***it s=P3^7;
uchar code dis_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管
uchar data dis[4]={0x00,0x00,0x00,0x00};// 3个显示单元和1个存储单元
uchar zancun;//转换暂存
uchar data mshu[2];
uchar xianshi_temp;
//1ms延时子函数
void delay1ms(uint t)
{uint i,j;
for(i=0;i
for(j=0;j<120;j++)
;
}
//转换子函数
void test()
{
ALE=1;_nop_();_nop_();_nop_();
START=1;_nop_();_nop_();_nop_();ALE=0;_nop_();_nop_();_nop_();START=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
while(EOC==0);_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
OE=1;_nop_();_nop_();_nop_();_nop_();_nop_();zancun=P1;OE=0;
}
void xianshi(uchar digit)
{
xianshi_temp=digit;
dis[2]=xianshi_temp/51;
dis[3]=xianshi_temp%51;
dis[3]=dis[3]*10;
dis[1]=dis[3]/51;
dis[3]=dis[3]%51;
dis[3]=dis[3]*10;
dis[0]=dis[3]/51;
P0=dis_7[dis[0]];
z=1;r=1;s=0;delay1ms(1);s=1;
P0=dis_7[dis[1]];
r=0;delay1ms(1);r=1;
P0=dis_7[dis[2]]; DISX=0;
z=0;delay1ms(1);z=1;
}
void zhuanhuan()
{
a=0;b=0;c=0;//确定第一路电压
test();//转换电压
}
void main()
{
xianshi(0x00);
while(1)
{
zhuanhuan();
xianshi(zancun);
}
}