请各位大神帮我看看!程序调试不成功!小弟初学者!调试了好久!找了许多资料还是没发现问题!麻烦那位大神帮我看看!
#include<reg52.h>
#include <intrins.h>
sbit ST=P3^0; //ADC0809启动转换
sbit OE=P3^1; //允许ADC0809输出数据
sbit EOC=P3^2; //ADC0809转换结束信号
sbit BEEP=P3^3;
sbit V1=P3^4; //200V档位测试标志位
sbit V2=P3^5; //20V档位测试标志位
sbit V3=P3^6; //2V档位测试标志位
sbit V4=P3^7; //200mV档位测试标志位
sbit led=P0^7;
unsigned int h;
unsigned char digit[4];
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
void delay(unsigned int tc)//带小数点编码 /*延时*/
{
while(tc!=0)
{
unsigned int i;
for(i=0;i<100;i++)
{
tc--;
}
}
} /*ADC0809转换子程序*/
unsigned char adc0809() //读AD0809子程序
{
unsigned char adda;
ST=0;
OE=0; //读AD0809准备
P1=0xff; //先把ADC0809的输出清0
ST=1;
ST=0; //启动转换
while(EOC==1);// 如果有输出中断,使能读功能,并读数据
{
OE=1;
adda=P1;
OE=0;
}
return(adda);//返回最后读出数据
}
/*ADC0809转换数据处理*/
unsigned int dacl() //AD0809读出数据处理
{
unsigned char x;
unsigned int dady=0;
for(x=0;x<10;x++)
{dady=adc0809()+dady;}
dady=dady/10; //求平均值,提高精度
return(dady);//返回处理结果
}
void loop(void)
{
while(h==1)
{
BEEP=!BEEP;
delay(100);
BEEP=!BEEP;
break;
}
}
void led_display(float val)//显示函数
{
if(V1==0) //200V档
{
val=val*5000/255;
if(val>2000||val<200)
{
led=0;
h=1;
loop();
}
else if(val>200)
{
digit[3]=val/1000;
val=val-1000*digit[3];
digit[2]= val/100;
val=val-100*digit[2];
digit[1]=val/10;
val=val-10*digit[1]; //此后选择带小数点编码
digit[0]=val*10/10;
/*将十进制数转换成字符*/
digit[3]=table[digit[3]];
digit[2]=table[digit[2]];
digit[1]=table[digit[1]+10];
digit[0]=table[digit[0]];
}
}
else if(V2==0) //20V档
{
val= 5000*val/255;
if(val>2000||val<200)
{
h=1;
loop();
}
else
{
digit[3]=val/1000;
val=val-1000*digit[3];
digit[2]=val/100;
val=val-100*digit[2]; //此后选择带小数点编码
digit[1]=val/10;
val=val-10*digit[1];
digit[0]=val*10/10;
/*将十进制数转换成字符*/
digit[3]=table[digit[3]];
digit[2]=table[digit[2]+10];
digit[1]=table[digit[1]];
digit[0]=table[digit[0]];
}
}
else if(V3==0) //2V档
{
val=5000*val/255;
if(val>2000||val<200)
{
h=1;
loop();
}
else
{
digit[3]=val/1000;
val=val-1000*digit[3]; //此后选择带小数点编码
digit[2]=val/100;
val=val-100*digit[2];
digit[1]=val/10;
val=val-10*digit[1];
digit[0]=val*10/10;
/*将十进制数转换成字符*/
digit[3]=table[digit[3]];
digit[2]=table[digit[2]+10];
digit[1]=table[digit[1]];
digit[0]=table[digit[0]];
}
}
else if(V4==0) //200mV档
{
val= 5000* val/255;//将伏转化为毫伏
if(val>2000)
{
h=1;
loop();
}
else
{
digit[3]=val/1000;
val=val-1000*digit[3];
digit[2]=val/100;
val=val-100*digit[2];
digit[1]=val/10;
val=val-10*digit[1];//此后选择带小数点编码
digit[0]=val*10/10;
/*将十进制数转换成字符*/
digit[3]=table[digit[3]];
digit[2]=table[digit[2]];
digit[1]=table[digit[1]];
digit[0]=table[digit[0]];
}
}
}
void main()
{
int i;
int j=3;
int k;
unsigned char fuhao[4];
BEEP=0;// 蜂鸣器初始化'
led_display(dacl());//读值显示
for(i=3;i>=0;i--)
{
if(digit[i]!=0xc0)
{
fuhao[j]=digit[i];
j=j--;
}
for(k=0;k<4;k++)
{
P0=0X01<<k;
P2=fuhao[k];
delay(10);
}
}
}
-
-
三位半数字电压表.rar
下载积分: 积分 -1 分
57.12 KB, 下载次数: 27, 下载积分: 积分 -1 分
ADC0809模数转换显示.zip 下载积分: 积分 -1 分
67.57 KB, 下载次数: 26, 下载积分: 积分 -1 分
前辈!我是想问问 我的那个电压表使用手动切换量程的 !切换了怎么不行! 逻辑上感觉没问题!但运行的时候就不行了!
好东西啊 谢谢楼主分享
这个还没调试成功的!程序有问题的!!!!!!!
一周热门 更多>