📄 mainc.c
字号:
#include "extern.h"
GOB g;
VOLTAGEST Voltage;
unsigned int us[5];
unsigned char uc[5];
unsigned char Buf[15];
const U8 SampleTime[]={0,5,5,5,5,80,80,200,5,5,20,5,210,5};
U16 Minmin,Minmax,Maxmin,Maxmax;
void Measure(void);
void MainDisp(void);
int main(void)
{
IOInit();
ADCInit();
Timer0Init();
Rs232Init();
g.State=0;
IntEn();
wdt_enable(WDTO_1S);
while(1){
g.Flag.ms10=0;
wdt_reset();
DispChange();
if(g.Flag.ms10){
KeyScan();
}
GetCh();
GetKey();
switch(g.State){
case 0://Init.
if(ADCConvert(0)>50){
Rs232.State=0;
gSet(10);
break;
}
Voltage.Cur=ADCConvert(0);
Voltage.Channel=1;
g.State=90;
break;
case 10://DownLoad.
Rs232Service();
break;
case 90:
Delay(10);
if(!ChkBit(PIND,5)) Delay(20);
if(!ChkBit(PIND,6)) Delay(40);
if(!ChkBit(PIND,7)) Delay(80);
if(!ChkBit(PINB,0)) Delay(10);
gSet(99);
ClrBit(PORTD,4);
Voltage.Channel=1;
g.ADTime=0;
g.Flag.ERROR=0;
g.Flag.FIRST=1;
g.Flag.OK=0;
case 99:
if(!g.Flag.ms10) break; //10ms测量一次。
Measure(); //测量。
DispVal(Voltage.Channel); //显示测量值。
//如没有到测量次数则跳出。
if(++g.ms100<SampleTime[Voltage.Channel]) break;
g.ms100=0;
// Voltage.Channel++;
g.Flag.FIRST=1; //第一次测量标记。
if(++Voltage.Channel<14) break;
//测量完了。
gSet(101);
for(uc[3]=1;uc[3]<14;uc[3]++){
uc[0]=uc[3]<<4;
Minmin=ReadInfinit(uc[0]); //小的最小值。.
uc[0] +=4;
Minmax =ReadInfinit(uc[0]); //小的最大值。
uc[0] +=4;
Maxmin =ReadInfinit(uc[0]); //大的最小值。
uc[0] +=4;
Maxmax =ReadInfinit(uc[0]); //大的最大值。
Voltage.MeasureFlag[uc[3]]=0; //开始认为是正确的。
if((Voltage.MeasureMax[uc[3]]>Maxmax)||
(Voltage.MeasureMax[uc[3]]<Maxmin)||
(Voltage.MeasureMin[uc[3]]<Minmin)||
(Voltage.MeasureMin[uc[3]]>Minmax)){
Voltage.MeasureFlag[uc[3]]=1;
g.Flag.ERROR=1;
}
else g.Flag.OK=1; //表示有正确数据。
}
SetBit(PORTD,4);
Voltage.Channel=0;
g.Flag.ERRFLAG=0;
Beep(1);
if(g.Flag.ERROR){
Beep(1);
DispStr("FAIL");
g.Flag.ERRFLAG=1;
break;
}
g.Flag.ERROR=1;
DispStr("PASS");
break;
case 101:
switch(Key.hz){
case RESET:
gSet(90);
break;
case MEASURE:
gSet(103);
Voltage.Channel=1;
g.Flag.FIRST=1;
break;
case FIND:
if(!g.Flag.OK) break;
gSet(104);
Voltage.Channel=0;
FindChannel(0);
break;
case FINDERR:
if(!g.Flag.ERRFLAG) break;
Voltage.Channel=0;
FindChannel(1);
gSet(105);
break;
default:break;
}
break;
case 103://MEASURE
ClrBit(PORTD,4);
switch(Key.hz){
case FIND:
if(!g.Flag.OK) break;
Voltage.Channel=0;
FindChannel(0);
gSet(104);
break;
case FINDERR:
if(!g.Flag.ERRFLAG) break;
Voltage.Channel=0;
FindChannel(1);
gSet(105);
break;
case RESET:
gSet(90);
break;
case MEASURE:
if(++Voltage.Channel>13){
Voltage.Channel=1;
}
g.Flag.FIRST=1;
break;
default:break;
}
if(g.Flag.ms10){
if(++g.ms100>1){
g.ms100=0;
Measure();
}
}
MainDisp();
break;
case 104: //FIND
switch(Key.hz){
case RESET:
gSet(90);
break;
case MEASURE:
gSet(103);
Voltage.Channel=1;
g.Flag.FIRST=1;
break;
case FIND:
FindChannel(0);
break;
case FINDERR:
if(!g.Flag.ERRFLAG) break;
gSet(105);
Voltage.Channel=0;
FindChannel(1);
break;
}
MainDisp();
break;
case 105://FINDERR
switch(Key.hz){
case RESET:
gSet(90);
break;
case MEASURE:
gSet(103);
Voltage.Channel=1;
g.Flag.FIRST=1;
break;
case FIND:
if(!g.Flag.OK) break;
gSet(104);
Voltage.Channel=0;
FindChannel(0);
break;
case FINDERR:
FindChannel(1);
break;
}
MainDisp();
break;
}
}
}
U16 ReadInfinit(U8 num)
{
U8 uc0;
U8 buf[5];
U16 us;
for(uc0=0;uc0<4;uc0++){
buf[uc0+1]=EEPromRead(num+uc0);
}
buf[5]=0;
us=Mul(&buf[1],VOLTAGEREF);
return (us);
}
void Measure(void)
{
Voltage.Cur=VoltageADC(Voltage.Channel);
if(g.Flag.FIRST){//
us[0]=Voltage.Cur;
us[1]=Voltage.Cur;
g.Flag.FIRST=0;
}else{
us[0]=Max(Voltage.Cur,Voltage.MeasureMax[Voltage.Channel]);
us[1]=Min(Voltage.Cur,Voltage.MeasureMin[Voltage.Channel]);
}
Voltage.MeasureMax[Voltage.Channel]=us[0];
Voltage.MeasureMin[Voltage.Channel]=us[1];
}
void MainDisp(void)
{
if(!g.Flag.ms10) return;
if(++g.DispTime>80) g.DispTime=0;
if(g.DispTime<40){
Voltage.Cur=Voltage.MeasureMin[Voltage.Channel];
}else{
Voltage.Cur=Voltage.MeasureMax[Voltage.Channel];
}
DispVal(Voltage.Channel);
}
void FindChannel(U8 match)
{
while(1){
Voltage.Channel++;
if(Voltage.Channel>13) Voltage.Channel=1;
if(Voltage.MeasureFlag[Voltage.Channel]==match) break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -