简易自动电阻测试仪程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit CS=P1^5;
sbit Clk=P1^6;
sbit DI=P1^7;
sbit DO=P1^7;
sbit rs=P2^0;
sbit en=P2^1;
sbit j1=P2^7;
sbit j2=P2^6;
sbit j3=P2^5;
sbit beep=P1^4;
sbit led=P2^3;
void delay(int x)
for(i= 0;i<8;i++) //读取前8位的值
{
delay(1);
dis0<<= 1;
Clk=1;
delay(1);
Clk=0;
if (DO)
dis0|=0x01;
else
dis0|=0x00;
}
for (i=0;i<8;i++) //读取后8位的值
{
dis1>>= 1;
if (DO)
dis1|= 0x80;
writecom(0x01);
}
void display( long x)
{int j,wei=12;
for(j=0;j<18;j++)//qinhkongxianshi
{ writecom(0xc0+14-j);
delay(10);
writedat(32);}
for(j=0;x>0;j++)//qinhkongxianshi
for(x=0;x<8;x++)
{
writedat(table[x]);
}
delay(10);
writecom(0xc0+15);
writedat(0x00);
while(1)
{
if(j1==1)
{
s=J1();
if(s>=1900)
s=J2();
if(s>=100000)
s=J3();
}
else if(j2==1)
else beep=0;
if((j==0)||(j==255))led=0;
else led=1;
if(x!=s)
{
x=s;
display(s);}}
}
{ if((j%3==0)&&(j>0))
{writecom(0xc0+wei-j);writedat(44);wei--;}
writecom(0xc0+wei-j);
delay(10);
writedat(x%10+48);
x=x/10 ;
}
}
long J1(void)
{j1=1;
j2=0;
j3=0;
delay(1);
return date;
}
long datch(uchar a ,long st ) //计算电阻
{long y;
double x=1.0*st*(255-a)/a ;
y=x;
return y;
}
void writecom(uchar com)
{ rs=0;
P3=com;
delay(10);
{int j;
for(;x>0;x--)
for(j=20;j>0;j--) ;
}
uchar ADC0832(uchar CH)
{
uchar i,dis0,dis1,date;
Clk=0; //拉低时钟
DI=1; //初始化
delay(1);
CS=0; //芯片选定
delay(1);
Clk=1; //拉高时钟
return datch(ADC0832(0),500000);
}
void main()
{
int j;
long x,s=1;
led=1;
beep=0;
init();
j1=1;
j2=0;
j3=0;
for(x=0;x<11;x++)
{
writedat(table1[x]);
delay(10);
}
writecom(0x40);
else
dis1|= 0x00;
delay(1);
Clk=1;
delay(1);
Clk=0;
}
if(dis0==dis1) //两次结束数据比较,若相等
date=dis0; //则赋值给dat
delay(1);
CS=1; //释放ADC0832
DI=1; //拉高输出端,方便下次通道选择DI端有效
Clk=1; //拉高时钟
delay(1);
if(CH==0) //通道选择
{
Clk=0; //第一次拉低时钟
DI=1; //通道0的第一位
delay(1);
Clk=1; //拉高时钟
delay(1);
Clk=0; //第二次拉低时钟,ADC0832 DI接受数据源自文库
DI=0; //通道0的第二位
delay(1);
Clk=1;
delay(1);
{
s=J2();
if(s<=1900) s=J1();
else if(s>=100000) s=J3();
}
else if(j3==1)
{
s=J3();
if((s<=100000)&&(s>1900)) s=J2();
if(s<=1900)s=J1();
}
j=ADC0832(0);
if(j>=254) beep=1;
}
else
{
Clk=0;
DI=1; //通道1的第一位
delay(1);
Clk=1;
delay(1);
Clk=0;
DI=1; //通道1的第二位
delay(1);
Clk=1;
delay(1);
}
Clk=0; //第三次拉低时钟,此前DI两次赋值决定通道
DI=1; //DI开始失效,拉高电平,便于DO数据传输
delay(40);
return datch(ADC0832(0),200);
}
long J2(void)
{j1=0;
j2=1;
j3=0;
delay(40);
return datch(ADC0832(0),10000);
}
long J3(void)
{j1=0;
j2=0;
j3=1;
delay(40);
en=1;
delay(10);
en=0;
}
void writedat(uchar date)
{rs=1;
P3=date;
delay(10);
en=1;
delay(10);
en=0;
}
void init ()
{
en=0;
writecom(0x38);
writecom(0x0c);
writecom(0x06);
简易自动电阻测试仪程 序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar table[]={ 0x00,0x04,0x0A,0x11,0x11,0x0A,0x1B,0x3B, };
uchar table1[]="THE RES IS: ";
sbit Clk=P1^6;
sbit DI=P1^7;
sbit DO=P1^7;
sbit rs=P2^0;
sbit en=P2^1;
sbit j1=P2^7;
sbit j2=P2^6;
sbit j3=P2^5;
sbit beep=P1^4;
sbit led=P2^3;
void delay(int x)
for(i= 0;i<8;i++) //读取前8位的值
{
delay(1);
dis0<<= 1;
Clk=1;
delay(1);
Clk=0;
if (DO)
dis0|=0x01;
else
dis0|=0x00;
}
for (i=0;i<8;i++) //读取后8位的值
{
dis1>>= 1;
if (DO)
dis1|= 0x80;
writecom(0x01);
}
void display( long x)
{int j,wei=12;
for(j=0;j<18;j++)//qinhkongxianshi
{ writecom(0xc0+14-j);
delay(10);
writedat(32);}
for(j=0;x>0;j++)//qinhkongxianshi
for(x=0;x<8;x++)
{
writedat(table[x]);
}
delay(10);
writecom(0xc0+15);
writedat(0x00);
while(1)
{
if(j1==1)
{
s=J1();
if(s>=1900)
s=J2();
if(s>=100000)
s=J3();
}
else if(j2==1)
else beep=0;
if((j==0)||(j==255))led=0;
else led=1;
if(x!=s)
{
x=s;
display(s);}}
}
{ if((j%3==0)&&(j>0))
{writecom(0xc0+wei-j);writedat(44);wei--;}
writecom(0xc0+wei-j);
delay(10);
writedat(x%10+48);
x=x/10 ;
}
}
long J1(void)
{j1=1;
j2=0;
j3=0;
delay(1);
return date;
}
long datch(uchar a ,long st ) //计算电阻
{long y;
double x=1.0*st*(255-a)/a ;
y=x;
return y;
}
void writecom(uchar com)
{ rs=0;
P3=com;
delay(10);
{int j;
for(;x>0;x--)
for(j=20;j>0;j--) ;
}
uchar ADC0832(uchar CH)
{
uchar i,dis0,dis1,date;
Clk=0; //拉低时钟
DI=1; //初始化
delay(1);
CS=0; //芯片选定
delay(1);
Clk=1; //拉高时钟
return datch(ADC0832(0),500000);
}
void main()
{
int j;
long x,s=1;
led=1;
beep=0;
init();
j1=1;
j2=0;
j3=0;
for(x=0;x<11;x++)
{
writedat(table1[x]);
delay(10);
}
writecom(0x40);
else
dis1|= 0x00;
delay(1);
Clk=1;
delay(1);
Clk=0;
}
if(dis0==dis1) //两次结束数据比较,若相等
date=dis0; //则赋值给dat
delay(1);
CS=1; //释放ADC0832
DI=1; //拉高输出端,方便下次通道选择DI端有效
Clk=1; //拉高时钟
delay(1);
if(CH==0) //通道选择
{
Clk=0; //第一次拉低时钟
DI=1; //通道0的第一位
delay(1);
Clk=1; //拉高时钟
delay(1);
Clk=0; //第二次拉低时钟,ADC0832 DI接受数据源自文库
DI=0; //通道0的第二位
delay(1);
Clk=1;
delay(1);
{
s=J2();
if(s<=1900) s=J1();
else if(s>=100000) s=J3();
}
else if(j3==1)
{
s=J3();
if((s<=100000)&&(s>1900)) s=J2();
if(s<=1900)s=J1();
}
j=ADC0832(0);
if(j>=254) beep=1;
}
else
{
Clk=0;
DI=1; //通道1的第一位
delay(1);
Clk=1;
delay(1);
Clk=0;
DI=1; //通道1的第二位
delay(1);
Clk=1;
delay(1);
}
Clk=0; //第三次拉低时钟,此前DI两次赋值决定通道
DI=1; //DI开始失效,拉高电平,便于DO数据传输
delay(40);
return datch(ADC0832(0),200);
}
long J2(void)
{j1=0;
j2=1;
j3=0;
delay(40);
return datch(ADC0832(0),10000);
}
long J3(void)
{j1=0;
j2=0;
j3=1;
delay(40);
en=1;
delay(10);
en=0;
}
void writedat(uchar date)
{rs=1;
P3=date;
delay(10);
en=1;
delay(10);
en=0;
}
void init ()
{
en=0;
writecom(0x38);
writecom(0x0c);
writecom(0x06);
简易自动电阻测试仪程 序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar table[]={ 0x00,0x04,0x0A,0x11,0x11,0x0A,0x1B,0x3B, };
uchar table1[]="THE RES IS: ";