📄 main4.c
字号:
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<Param0[i])
{
TestData[i]=0;
}
else
{
TestData[i]=1000.0*(ul-Param0[i])/stdC+0.5;
}
}
else
{
if(ul==-1)
{
TestData[i]=-1;
}
else
{
if(Param0[i]==-1)
{
TestData[i]=1000.0*ul/stdR+0.5;
}
else
{
if(ul>Param0[i])
{
TestData[i]=0;
}
else
{
TestData[i]=1000.0*ul*Param0[i]/(Param0[i]-ul)/stdR+0.5;
}
}
}
}
}
void Check(char i)
{
//char i;
//OkLed=0;
if(i<6)
{
if(i<4)
{
if(TestData[i]>MIN_RESISTOR&&TestData[i]<MAX_RESISTOR)
{
OkLed|=1<<i;
}
}
else
{
if(TestData[i]>MIN_CAPACITOR&&TestData[i]<MAX_CAPACITOR)
{
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 DisplayData(char i)
{
unsigned int n;
char bf[5];
char j;
n=TestData[i];
bf[4]=0;
if(n>3000)
{
bf[0]=bf[1]=bf[2]=bf[3]='-';
}
else
{
for(j=3;j>0;j--)
{
bf[j]=n%10+'0';
n/=10;
}
bf[0]=n+'0';
if(i<4)
{
if(bf[0]!='0')
{
bf[3]=bf[2];
bf[2]='.';
}
else
{
bf[0]=bf[1];
bf[1]='.';
}
}
else
{
for(j=0;j<3;j++)
{
if(bf[j]=='0')
{
bf[j]=' ';
}
else
{
break;
}
}
}
}
switch(i)
{
case 0:LcdPrint("R1=");LcdPrint(bf);LcdPrint(" ");ComPrint("R1=");ComPrint(bf);ComPrint(" ");break;
case 1:LcdPrint("R2=");LcdPrint(bf);LcdPrint("\n");ComPrint("R2=");ComPrint(bf);ComPrint("\n");break;
case 2:LcdPrint("R3=");LcdPrint(bf);LcdPrint(" ");ComPrint("R3=");ComPrint(bf);ComPrint(" ");break;
case 3:LcdPrint("R4=");LcdPrint(bf);LcdPrint("\n");ComPrint("R4=");ComPrint(bf);ComPrint("\n");break;
case 4:LcdPrint("C1=");LcdPrint(bf);LcdPrint(" ");ComPrint("C1=");ComPrint(bf);ComPrint(" ");break;
case 5:LcdPrint("C2=");LcdPrint(bf);LcdPrint("\n");ComPrint("C2=");ComPrint(bf);ComPrint("\n");break;
case 6:LcdPrint("C3=");LcdPrint(bf);LcdPrint(" ");ComPrint("C3=");ComPrint(bf);ComPrint(" ");break;
case 7:LcdPrint("C4=");LcdPrint(bf);LcdPrint("\n");ComPrint("C4=");ComPrint(bf);ComPrint("\n");break;
}
}
void Timer1 (void) interrupt TIMER1INT using 1
{
tn++;
}
char Remote(void)
{
char Key;
if(RI)
{
Key=SBUF;
RI=0;
}
return(Key);
}
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);
}
void WaitKey(void)
{
char i,c;
ComPrint("Waiting Key\n");
twingle=0;
while(!STEP)
{
c=Remote();
if(c=='A') {AUTO=1;return;}
if(c=='S') {AUTO=0;return;}
}
while(1)
{
c=Remote();
if(c=='A') {AUTO=1;return;}
if(c=='S') {AUTO=0;return;}
if(STEP)
{
i=0;
}
else
{
i++;
DelayMs(10);
}
if(i>3) break;
}
AUTO=CheckAuto(AUTO);
}
void Initial(void)
{
EA=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 + -