📄 main.c
字号:
TestData[i]=f;
} */
long Tests(char i,unsigned int wt)
{
char n;
unsigned long ul,ulc;
ul=2;
for(n=0;n<4;n++)
{
DelayMs(10);
ulc=Test0(i,wt);
if(ulc==-1) return(-1);
ul+=ulc;
}
ul>>=2;
return(ul);
}
void LedSend8(char d)
{
uchar i;
CLK=0;
for(i=0;i<8;i++)
{
d<<=1;
DA=CY;delay (10);
CLK=1;delay (10);
CLK=0;delay (10);
}
}
void LedShow(char hb,char lb)
{
CS=0;
delay(10);
// hb>>=1;
// if(CY)
// {
// lb|=0x80;
// }
// else
// {
// lb&=~0x80;
// }
LedSend8(hb);
LedSend8(lb);
CS=1;
delay (20);
CS=0;
}
void LedTest(void)
{
char d;
char i;
// twingle=1;
d=1;
LedShow(0xff,~0x40);DelayMs(400);
LedShow(~0x40,0xff);DelayMs(400);
for(i=0;i<6;i++)
{
LedShow(0xff,~(d));DelayMs(400);
d<<=1;
}
d=1;
for(i=0;i<6;i++)
{
LedShow(~(d),0xff);DelayMs(400);
d<<=1;
}
LedShow(0x7f,0);DelayMs(800);
LedShow(0,0x7f);DelayMs(800);
LedShow(0x7f,0x7f);
}
void Bell(unsigned int t)
{
BELL=0;
DelayMs(t);
BELL=1;
}
void Timer0 (void) interrupt TIMER0INT // using 1
{
TL0=CYCLE % 256;
TH0=CYCLE/256;
// TF2=0;
// EXF2=0;
// if(wtt) wtt--;
if(td) td--;
// if(StartTest) return;
// if(twingle) twingledo=1;
// if(twingledo)
// {
// if(!(dt--))
// {
// dt=30;
// if(Dis=!Dis)
// {
// LedShow(0xff,0xff);
// }
// else
// {
// LedShow(OkLed,~OkLed);
// if(!twingle) twingledo=0;
// }
// }
// }
}
long Test0(char i,unsigned int wt)
{
bit rc;
bit Testing;
long ul;
unsigned char j;
char BIE;
unsigned char tc;
bit lowint;
if(i>=16) return(0);
CB=0; //CB=0时主测节点电容(侧电阻时)接+VCC充电,或接+VCC充电停振(测电容时)
EX1=ET1=TR1=0; //
switch(i) //0,1,2,3为4被测电阻 4,5,6,7为4被测电容 8为标准电阻 9为标准电容
{
case 0:
case 1:
case 2:
case 3:
case RstdNo:
TMOD|=GATE1; //电阻测试,TIMER1 INT1选通计时,为高开始计时
rc=1;
CA=0; //CA=0:选择电阻
tc=0; //测量次数-1
break; //R:rc=1 C:rc=0
default:
TMOD&=~GATE1; //电容测试,TIMER1 软件控制计时
CA=1; //CA=0:选择电容
tc=200; //测量次数-1
rc=0;
break;
}
P2=(P2&0XF0)|i|0XC0; //通道设定
tn=TH1=TL1=0; //TIMER1 数值设为0
if(!rc)
{
DelayMs(50);
CB=1; //测电容,断开充电,让测电容电路先振荡
} //rc=0为电容测定
else
{
DelayMs(200);
}
//begin Test
StartTest=0;
Testing=0;
td=wt; //等待
j=0;
BIE=IE;
IE=0x80;
ET0=1; //定时中断保持
lowint=INT1;
while(td)
{
if(Testing)
{
if(lowint==INT1) {j=0;continue;}
if(++j<1) continue;
j=0;
lowint=INT1;
if(!lowint)
{
if(tc--)
{
TR1=1;
continue;
}
else
{
TR1=0;
ET1=0;
break;
}
}
}
else
{
if(!INT1) {j=0;continue;}
j++;
if(j<1) continue;
StartTest=1;
Testing=1;
IE1=0;
TF1=0;
ET1=1;
if(rc)
{
TR1=1; //测电阻
}
CB=1;
j=0;
}
}
IE=BIE;
CB=0;
TR1=0;
EX1=0;
if(td)
{
ul=256L*(tn*256L+TH1)+TL1;
}
else
{
ul=-1;
}
// if (ul<80000)
// ul=ul;
StartTest=0;
return(ul);
}
void Test(char i)
{
long ul;
if(i<0||i>=10) return;
ul=Test0(i,50);
if(i>=4||i==CstdNo)
{
if(ul<ParamC0[i])
{
TestData[i]=0;
}
else
{
TestData[i]=(float)nC*(ul-ParamC0[i])/StdC+0.5;
}
}
else
{
if(ul==-1)
{
TestData[i]=-1;
}
else
{
// if(ParamC0[i]==-1)
// {
TestData[i]=(float)nR*ul/StdR+0.5;
// }
// else
// {
// if(ul>ParamC0[i])
// {
// TestData[i]=0;
// }
// else
// {
// TestData[i]=1000.0*ul*ParamC0[i]/(ParamC0[i]-ul)/StdR+0.5;
// }
// }
}
}
}
void Check(char i)
{
//char i;
//OkLed=0;
if(i<6)
{
if(i<4)
{
if(TestData[i]>MinR&&TestData[i]<MaxR)
{
OkLed|=1<<i;
}
}
else
{
if(TestData[i]>MinC&&TestData[i]<MaxC)
{
OkLed|=1<<i;
}
}
LedShow((OkLed)|(0xfe<<i),(~(OkLed))|(0xfe<<i));
// OkLed=(OkLed)|(0xfe<<i);
// NgLed=(~(OkLed))|(0xfe<<i);
}
else
{
if((OkLed&=0x3f)==0x3f)
{
OkLed|=ALLOK;
}
LedShow(OkLed,~OkLed);
}
}
void Display(char i)
{
switch(i)
{
case 0:LcdPrint("R1=");ComPrint("R1= ");DisplayData(i,TestData[i]);LcdPrint(" ");ComPrint(" MΩ\n");break;
case 1:LcdPrint("R2=");ComPrint("R2= ");DisplayData(i,TestData[i]);LcdPrint("\n");ComPrint(" MΩ\n");break;
case 2:LcdPrint("R3=");ComPrint("R3= ");DisplayData(i,TestData[i]);LcdPrint(" ");ComPrint(" MΩ\n");break;
case 3:LcdPrint("R4=");ComPrint("R4= ");DisplayData(i,TestData[i]);LcdPrint("\n");ComPrint(" MΩ\n");break;
case 4:LcdPrint("C1=");ComPrint("C1= ");DisplayData(i,TestData[i]);LcdPrint(" ");ComPrint(" PF\n");break;
case 5:LcdPrint("C2=");ComPrint("C2= ");DisplayData(i,TestData[i]);LcdPrint("\n");ComPrint(" PF\n");break;
case 6:LcdPrint("C3=");ComPrint("C3= ");DisplayData(i,TestData[i]);LcdPrint(" ");ComPrint(" PF\n");break;
case 7:LcdPrint("C4=");ComPrint("C4= ");DisplayData(i,TestData[i]);LcdPrint("\n");ComPrint(" PF\n");break;
//case 0x90:ComPrint("Parameter:\n");break;
//case 0x80:ComPrint("MinR= ");DisplayData(i,MinR);ComPrint("0 KΩ\n");break;
//case 0x81:ComPrint("MaxR= ");DisplayData(i,MaxR);ComPrint("0 KΩ\n");break;
//case 0x82:ComPrint("MinC= ");DisplayData(i,MinC);ComPrint(" PF\n");break;
//case 0x83:ComPrint("MaxC= ");DisplayData(i,MaxC);ComPrint(" PF\n");break;
}
}
void DisplayData(unsigned char i,unsigned int n)
{
#define BUFLEN 6
char bf[BUFLEN];
char j;
bf[BUFLEN-1]=0;
if(i<0x80 && n>3000)
{
for(j=0;j<BUFLEN-1;j++) bf[j]='-';
}
else
{
for(j=1;j<BUFLEN-1;j++) bf[j]='0';
bf[0]=' ';
for(j=BUFLEN-2;j>0;j--)
{
bf[j]=n%10+'0';
n/=10;
}
bf[0]=n+'0';
if(i<4)
{
if(bf[1]!='0')
{
bf[4]=bf[3];
bf[3]='.';
}
else
{
bf[1]=bf[2];
bf[2]='.';
}
}
else
{
for(j=0;j<BUFLEN-2;j++)
{
if(bf[j]=='0')
{
bf[j]=' ';
}
else
{
break;
}
}
}
}
if(i<0x80)
{
bf[0]=' ';
LcdPrint(& bf[1] );
}
ComPrint(bf);
}
void LongPrint(unsigned long d)
{
char bf[11],i,dv;
bit e;
e=0;
for(i=0;i<9;i++) bf[i]=' ';
i=9;
for(i=9;i>=0;i--)
{
dv=d % 10;
d/=10;
bf[i]=dv+'0';
if(d==0) break;
}
bf[10]=0;
ComPrint(bf);
}
void Timer1 (void) interrupt TIMER1INT using 1
{
tn++;
}
char Remote(void)
{
if(RI)
{
RI=0;
return(SBUF);
}
return(0);
}
bit CheckAuto(bit AUTO)
{
char i,j;
i=0;j=0;
while(AUTO!=AUTOSTEP)
{
DelayMs(10);
if(++i>3)
{
AUTO=AUTOSTEP;
break;
}
if(++j>20) break;
}
return(AUTO);
}
char WaitKey(void)
{
char i,c;
ComPrint("Waiting Key\n");
twingle=0;
while(!STEP)
{
c=Remote();
if(c) return(c);
}
while(1)
{
c=Remote();
if(c) return(c);
if(STEP)
{
i=0;
}
else
{
i++;
DelayMs(10);
}
if(i>3) break;
}
AUTO=CheckAuto(AUTO);
if(AUTO)
{
return('A');
}
else
{
return('S');
}
}
void Initial(void)
{
EA=0;
IE=0;
P0=0xff;
IT0=IT1=1;
P1=P2=P3=0xff;
// INPORT=0XFF;
TMOD=0X11; //timer0:mode1(low 4bit),timer1:mode1(high 4bit)
EX0=0;
EX1=0;
ET0=1;
TR0=1;
TL0=CYCLE % 256;
TH0=CYCLE/256;
// TL2=RCAP2L=CYCLE % 256;
// TH2=RCAP2H=CYCLE/256;
// T2CON=0;
// TR2=1;
// ET2=1;
TL2=RCAP2L=0xb1;
TH2=RCAP2H=0xff;
SCON = 0x50; //串口模式: 模式1 接收允许
T2CON=0x30;
TI=1;
TR2=1;
// SCON = 0x50; //串口模式: 模式1 接收允许
// TMOD |= 0x20; //定时器模式:定时器工作在模式2
// PCON |= 0x80; //SMOD=1; 倍波特率
// TH1 = 0xF3; //Baud:9600fosc=24MHz
// ES = 0; //串行中断允许
// TI = 1;
// TR1 = 1; //定时器1启动
EA=1;
}
void LcdClear(void)
{
LCM_RST=0;
delay(10);
LCM_RST=1;
init_lcd();
CurrentX=CurrentY=0;
ComPrint("\n");
}
void LcdPrint(char * DisBuf)
{
code unsigned char Line[]={0x80,0x90,0x88,0x98};
char kk=0;
// printf(DisBuf);
wr_lcd(comm,0x30);
while(DisBuf[kk])
{
if(DisBuf[kk]=='\n'||CurrentX>=16)
{
CurrentX=0;
CurrentY++;
if(CurrentY<4) wr_lcd(comm,Line[CurrentY]);
}
else
{
if(CurrentY>=4)
{
LcdClear();
}
wr_lcd(dat,DisBuf[kk]);
CurrentX++;
}
kk++;
}
// ComPrint(DisBuf);
return;
}
void DelayMs(int a)
{
td=a/5;
while(td);
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
rst=1;
// psb=0;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
/*----------------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++) //先输入五个连续的1 -----》是同步位字符串,此时输入记数被重置并且串行传输被同步。
{
sclk=1;
sclk=0;
}
std=0; //RW位
sclk=1;
sclk=0;
if(dat_comm) //RS位
std=1; //data
else
std=0; //command
sclk=1;
sclk=0; //第8位规定为0
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++) //每一个8位指令将被分为两个字节接收到.
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*-----------------------------------*/
void delay (uint us) //delay time
{
while(us--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -