📄 jcb.c
字号:
/*************************************************
********
********
********
********初稿:2005/1/4
********
********修改:2005-10-31
**************************************************/
#include<stdio.h>
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#define Uchar unsigned char
#define Uint unsigned int
Uchar m1,dis,n1,n2,light;
sbit alarm=P3^5; //alarm--->报警继电器
sbit alarm1=P3^6; //alarm1-->蜂鸣器
sbit alarm2=P3^7; //alarm2-->报警灯
sbit SD=P1^0; //试验
sbit XY=P1^1; //消音输入
bit flash;
bit sign1,sign2;
sbit DCLK1 =P3^2; //7816 电压
sbit DCS1 =P3^4;
sbit DOUT1 =P1^6;
sbit DOUT2 =P3^3; //7816 电流
sbit SI=P1^4; //41010
sbit SCK=P1^3;
sbit CS2=P1^2;
sbit AD1=P0^5; //选择开关
sbit AD2=P0^6;
sbit AD3=P0^7;
Uchar select; //选择档位
sbit cathode=P1^7; //负极
sbit anode=P1^5; //正极
Uint num,num5,num1;
Uint turn,state;
Uint av1,av2;
Uint VOLT,CURR,aa,aa1,aa2,aa3,aa4,aa5; //电压,电流
unsigned long int mid1,mid2,mid3;
Uchar n;
void VIads7816(void)
{
Uchar i;
Uchar al=0,ah=0;
Uchar bl=0,bh=0;
av1=0;av2=0;
DOUT1=1;
DOUT2=1;
DCS1=0;
DCLK1=1;
DCLK1=0;
DCLK1=1;
DCLK1=0;
for(i=0;i<4;i++)
{
DCLK1=1;
DCLK1=0;
ah=(ah<<1);
bh=(bh<<1);
if(DOUT1)
{
ah=ah|0x01;
}
if(DOUT2)
{
bh=bh|0x01;
}
}
for(i=0;i<8;i++)
{
DCLK1=1;
DCLK1=0;
al=(al<<1);
bl=(bl<<1);
if(DOUT1)
{
al=al|0x01;
}
if(DOUT2)
{
bl=bl|0x01;
}
}
DCS1=1;
av1=ah;av1<<=8;av1|=al;//得到AD值
av2=bh;av2<<=8;av2|=bl;//得到AD值
}
void MCP41010(void) //量程0-255
{
unsigned char k,p,x;
x=turn;
k=0x13; //控制字,写数据,两个都有效
CS2=0;
for(p=0;p<8;p++)
{
SCK=0;
_nop_();
_nop_();
SI=(bit)(k&0x80);
SCK=1;
_nop_();
_nop_();
k<<=1;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
for(p=0;p<8;p++)
{
SCK=0;
_nop_();
_nop_();
SI=(bit)(x&0x80);
SCK=1;
_nop_();
_nop_();
x<<=1;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CS2=1;
}
void begin(void)
{
SCON=0x50;
TMOD|=0X21;
TH1=0xFF;
TL1=0xFF;
//TH0=0xFA;
//TL0=0xFA;
PCON=PCON|0X80;
TR1=1;
TI=1;
ET0=1; /*T0 Enable*/
TR0 = 1;
EA=1;
alarm=1;
alarm1=alarm2=1;
}
main()
{
Uint z1;
begin();
while(1)
{
if(XY==0)
{
if(sign1|sign2)
z1=1;
else
z1=0;
}
if(((XY==0)|(SD==0)|(sign1||sign2))==0)
{alarm=1;alarm1=1;alarm2=1;}
else
{
if(SD==0) alarm1=0;
else alarm1=((((SD==0)|((sign1|sign2)&flash)|z1)));
//alarm1=(((!(SD==0)|((sign1|sign2)&flash)|z1)));
alarm2=!((((SD==0)|((sign1|sign2)&flash)|z1)));
alarm=!((SD==0)|(sign1&sign2));}
if((sign1|sign2)==0)
{
z1 = 0;
}
}
}
void intt3(void) interrupt 1
{ static Uchar count;
if(AD1&AD2&AD3) select=0;
if(AD1&AD2&!AD3) select=1;
if(AD1&!AD2&AD3) select=2;
if(AD1&!AD2&!AD3) select=3;
if(!AD1&AD2&AD3) select=4;
if(num<31) num++;
else{num=0;count++;}
if(num<=15) //测量正
{cathode=1; anode=0;}
if(num>15) //测量负
{cathode=0; anode=1;}
if(num==10) { VIads7816();
mid1=av1;
mid2=av2;
mid3=(mid1*47/mid2);
if(mid3>3000) mid3=3000;
aa1=mid3;
}
if(num==25) { VIads7816();
mid1=av1;
mid2=av2;
mid3=(mid1*47/mid2);
if(mid3>3000) mid3=3000;
aa2=mid3;
}
if(aa1<=aa2) aa3=aa1;
else aa3=aa2;
num5++;
if(num5<=10) {
aa5+=aa3;}
else {aa=aa5/10;
aa5=0;
num5=0;}
if(count<3)
aa=250;
else
count=11;
if((num==10)||(num==25))
{ printf("num=%d\n",num);
printf("aa=%d\n",aa);
printf("turn=%d\n",turn);
MCP41010();
}
if(((num>=5)&(num<15))|((num>=20)&(num<30))) //取样范围内
{if(select==0) //10K 档
{
{if (aa<40){if(num<15) sign1=1; else sign2=1;}
else {if(num<15) sign1=0; else sign2=0;}
}
}
if(select==1) //20K 档
{
{if (aa<51){if(num<15) sign1=1; else sign2=1;}
else {if(num<15) sign1=0; else sign2=0;}
}
}
if(select==2) //50K 档
{
{if (aa<81){if(num<15) sign1=1; else sign2=1;}
else {if(num<15) sign1=0; else sign2=0;}
}
}
if(select==3) //100 K
{
{if (aa<132){if(num<15) sign1=1; else sign2=1;}
else {if(num<15) sign1=0; else sign2=0;}
}
}
if(select==4) //200 K
{
{if (aa<240){if(num<15) sign1=1; else sign2=1;}
else {if(num<15) sign1=0; else sign2=0;}
}
}
}
if(aa3<25000) {turn=(aa-30)/160+232;} //1000K-无穷大
if(aa3<=1100) {turn=(aa-30)/40+212;} //500-1000K
if(aa3<=550) {turn=((aa-30)*34+51816)/300;} //200-500K
if(aa3<=237) {turn=((aa-30)*36+12000)/100;} //100-200K
if(aa3<=132) {turn=((aa-30)*122+19176)/200;} //90-1000K
if(aa3<=122) {turn=((aa-30)*153+16422)/200;} //80-90K
if(aa3<=112) {turn=((aa-30)*173+14790)/200;} //70-80K
if(aa3<=101) {turn=((aa-30)*183+14076)/200;} //60-70K
if(aa3<=91) {turn=((aa-30)*234+11010)/200;} //50-60K
if(aa3<=81) {turn=((aa-30)*295+7956)/200;} //40-50K
if(aa3<=71) {turn=((aa-30)*32+660)/20;} //30-40K
if(aa3<=61) {turn=((aa-30)*429+3672)/200-3;} //20-30K
if(aa3<=51) {turn=(aa-30)*11*51/200+2;} //10-20K
if(aa3<=40) {turn=(aa-30)*13*51/200-1;} //10K
if(aa3<=31) {turn=2;}
if(turn>=255) turn=254;
if(turn<=1) turn=0;
if(num1<10) num1++;
else{num1=0;flash=!flash;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -