📄 main.c
字号:
#include <INTRINS.H>
//#include <at89x52.h>
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <stdio.h>
#include "ch452cmd.h"
#include "pin.h"
#define uchar unsigned char
#define uint unsigned int
#define KBD_PORT=P0;
#define FSM_INIT 0x00;
#define FSM_WAIT_PRESS 0x01;
#define FSM_VERFY1 0x02;
#define FSM_VERFY2 0x03;
#define FSM_WAIT_RELEASE 0x04;
#define FILTER_A 10
#define FILTER_N 11
unsigned int last_value;
unsigned char scankey=0;
bit Timerout=0;
bit keypress;
#define RELOAD_HIGH 0x3C
#define RELOAD_LOW 0xD2
#define DB_VAL 2
sbit PBTN=P0^0;
sbit NBTN=P0^1;
sbit RSTBTN=P0^2;
sbit vHigh=P2^0;
sbit vLow=P2^1;
sbit vDir=P2^2;
sbit lRun=P2^3;
sbit lOk=P2^4;
sbit lErr=P2^5;
sbit buzzer=P1^6;
unsigned int keepcnt=0xff;
unsigned int itimeover=0xffff;
bit keepok=0;
bit btimeover=0;
bit almpulse;
unsigned char alarm;
bit pmode=0;
bit nmode=0;
bit rstmode=0;
bit disp_updata=0;
unsigned char istep=0;
//0Pa=1.241mv
#define PP3_63k 34944
#define PP3_04k 34708
#define PP10_00k 40239
#define PP20_00k 46085
#define PP21_00k 46531
#define NP49 32270
#define NP588 31929
sbit ADC_DIN=P3^0;
sbit ADC_CLK=P3^1;
sbit ADC_DRDY=P3^2;
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
float voltage;
unsigned int data_out;
void system_tick(void) interrupt 1
{
static unsigned char second_cnt=20;
TR0=0;
TH0=RELOAD_HIGH;
TL0=RELOAD_LOW;
TR0=1;
Timerout=1;
scankey=KBD_PORT;
if(!PBTN || !NBTN)
{
keypress=1;
}
else
{
keypress=0;
}
if((istep==1)||(istep==2)||(istep==3)||(istep==4)||(istep==5)||(istep==7)||(istep==8))
{
if(!keepok&&keepcnt) keepcnt--;
if(!keepcnt)
{
keepok=1;
}
if(keepok)
{
itimeover--;
if(!itimeover) btimeover=1;
}
}
if(alarm) alarm--;
second_cnt--;
if(!second_cnt)
{
second_cnt=20;
disp_updata=1;
}
if(disp_updata&&(istep==10))
almpulse=!almpulse;
else
almpulse=0;
}
void delay1(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++);
}
void delay2(uint us)
{
uint i;
for(i=0;i<us;i++)
_nop_();
}
unsigned char rearrange(unsigned char a)
{
unsigned char i,b;
b=a&0x01;
for(i=1; i<8; i++)
{
b=b<<1;
a=a>>1;
b=b+(a&0x01);
}
return(b);
}
void WriteToReg_ADC(unsigned char a)
{
SCON=0;
TI=0;
SBUF=a;
while(!TI);
}
void MX7705_Init()
{
unsigned char i;
ADC_CLK=1;
ADC_DIN=1;
for(i=0;i<100;i++)
{
ADC_CLK=0;
ADC_CLK=1;
}
WriteToReg_ADC(0x04); //0x20
WriteToReg_ADC(0x30); //0x0c
WriteToReg_ADC(0x08); //0x10
WriteToReg_ADC(0x42); //0x42
}
unsigned int ReadWord()
{
unsigned char high8,low8;
unsigned int out;
SCON=0;
REN=1;
RI=0;
while(!RI);
high8=SBUF;
ADC_CLK=1;
RI=0;
while(!RI);
low8=SBUF;
REN=0;
out=rearrange(high8);
out=out<<8;
out=out+rearrange(low8);
return(out);
}
uint get_ad()
{
uint value;
while(ADC_DRDY==0)
{
WriteToReg_ADC(0x1C);
value=ReadWord();
}
return value;
}
uint filter2()
{
uint value_buf[FILTER_N];
uint temp;
char count,i,j;
for(count=0;count<FILTER_N;count++)
{
value_buf[count]=get_ad();
delay2(10);
}
for(j=0;j<FILTER_N-1;j++)
{
for(i=1;i<FILTER_N-j;i++)
{
if(value_buf[i]>value_buf[i-1])
{
temp=value_buf[i-1];
value_buf[i-1]=value_buf[i];
value_buf[i]=temp;
}
}
}
return value_buf[(FILTER_N-1)/2];
}
void dispdata(bit dispflag)
{
uint temp;
if(dispflag)
{
voltage=2.5*(data_out/65536.0);
temp=(uint)(voltage*1000);
displaybuf[0]=(uchar)voltage;
displaybuf[1]=(temp%1000)/100;
displaybuf[2]=((temp%1000)%100)/10;
displaybuf[3]=((temp%1000)%100)%10;
CH452_Write(CH452_DIG0 | displaycode[displaybuf[0]]|0x80);
CH452_Write(CH452_DIG1 | displaycode[displaybuf[1]]);
CH452_Write(CH452_DIG2 | displaycode[displaybuf[2]]);
CH452_Write(CH452_DIG3 | displaycode[displaybuf[3]]);
}
else
{
CH452_Write(CH452_DIG0 | displaycode[17]);
CH452_Write(CH452_DIG1 | displaycode[17]);
CH452_Write(CH452_DIG2 | displaycode[17]);
CH452_Write(CH452_DIG3 | displaycode[17]);
}
}
void main()
{
unsigned char fsm_key=0;
unsigned char kbd_col;
unsigned char kbd_row;
unsigned char key_val;
TMOD=0x11;
TCON=0x15;
IE=0x82;
P0=0xff;
P1=0x00;
P2=0x00;
CH452_Write(CH452_RESET);
delay1(30);
CH452_Write(CH452_SYSON2);
CH452_Write(CH452_DIG0 | displaycode[17]);
CH452_Write(CH452_DIG1 | displaycode[17]);
CH452_Write(CH452_DIG2 | displaycode[17]);
CH452_Write(CH452_DIG3 | displaycode[17]);
delay1(100);
MX7705_Init();
while(1)
{
if(Timerout)
{
Timerout=0;
switch(fsm_key)
{
case 0:
fsm_key=FSM_WAIT_PRESS;
break;
case 1:
if(keypress)
{
key_val=0;
kbd_col=0;
if(!PBTN)
{
PBTN=1;
kbd_col=1;
fsm_key=FSM_VERFY1;
} else if(!NBTN)
{
NBTN=1;
kbd_col=2;
fsm_key=FSM_VERFY1;
} else if(!RSTBTN)
{
RSTBTN=1;
kbd_col=3;
fsm_key=FSM_VERFY1;
}
else
{
fsm_key=FSM_INIT;
}
}
break;
case 2:
if(!PBTN)
{
fsm_key=FSM_VERFY2;
}
else if(!NBTN)
{
fsm_key=FSM_VERFY2;
}
else if(!RSTBTN)
{
fsm_key=FSM_VERFY2;
}
else
{
fsm_key=FSM_INIT;
}
break;
case 3:
if(!PBTN)
{
key_val=kbd_col;
if(!alarm&&!pmode&&!nmode)
{
pmode=1;
istep=0;
}
}
else if(!NBTN)
{
key_val=kbd_col;
if(!alarm&&!nmode&&!pmode)
{
nmode=1;
istep=0;
}
}
else if(!RSTBTN)
{
key_val=kbd_col;
if(!rstmode) rstmode=1;
}
fsm_key=FSM_WAIT_RELEASE;
break;
case 4:
if(!keypress)
{
fsm_key=FSM_INIT;
}
break;
default:
fsm_key=FSM_INIT;
break;
}
}
data_out=filter2();
if(!RSTBTN)
{
if(disp_updata)
{
disp_updata=0;
dispdata(1);
}
}
if(istep==0)
{
keepcnt=20;
itimeover=600;
keepok=0;
btimeover=0;
if(pmode)
{
istep=1;
}
if(nmode)
{
istep=7;
}
}
else if(istep==1)
{
vHigh=0;
vLow=1;
vDir=0;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if(data_out>PP3_63k)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
istep=2;
}
if(btimeover)
{
itimeover=600;
btimeover=0;
istep=10;
}
}
}
else if(istep==2)
{
vHigh=0;
vLow=0;
vDir=0;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if(data_out>PP3_04k)
{
keepcnt=20;
keepok=0;
itimeover=600;
btimeover=0;
istep=3;
}
else
{
if((data_out<PP3_04k)||(data_out>PP3_63k))
{
istep=10;
}
}
if(btimeover)
{
btimeover=0;
itimeover=600;
istep=10;
}
}
}
else if(istep==3)
{
vHigh=0;
vLow=1;
vDir=0;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if(data_out>PP10_00k)
{
keepcnt=20;
keepok=0;
itimeover=600;
btimeover=0;
istep=4;
}
if(btimeover)
{
itimeover=600;
btimeover=0;
istep=10;
}
}
}
else if(istep==4)
{
vHigh=0;
vLow=1;
vDir=0;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if(data_out>PP20_00k)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
istep=5;
}
if(btimeover)
{
btimeover=0;
itimeover=600;
istep=10;
}
}
}
else if(istep==5)
{
vHigh=1;
vLow=0;
vDir=0;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if((data_out>PP10_00k)&&(data_out<PP21_00k))
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
istep=6;
}
else
{
if((data_out>PP21_00k)||(data_out<PP10_00k))
{
istep=10;
}
}
if(btimeover)
{
itimeover=600;
btimeover=0;
istep=10;
}
}
else
{
if((data_out>PP21_00k)||(data_out<PP10_00k))
{
istep=10;
}
}
}
else if(istep==6)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
vHigh=0;
vLow=0;
vDir=0;
lOk=1;
lErr=0;
buzzer=1;
delay1(50);
buzzer=0;
pmode=0;
istep=0;
}
else if(istep==7)
{
vHigh=0;
vLow=1;
vDir=1;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if(data_out<NP49)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
istep=8;
}
if(btimeover)
{
itimeover=600;
btimeover=0;
istep=10;
}
}
}
else if(istep==8)
{
vHigh=0;
vLow=1;
vDir=1;
lOk=0;
lErr=0;
buzzer=0;
if(keepok)
{
if((data_out<NP49)&&(data_out>NP588))
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
istep=9;
}
else
{
if((data_out>NP49)||(data_out<NP588))
{
istep=10;
}
}
if(btimeover)
{
btimeover=0;
itimeover=600;
istep=10;
}
}
else
{
if((data_out>NP49)||(data_out<NP588))
{
istep=10;
}
}
}
else if(istep==9)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
vHigh=0;
vLow=0;
vDir=0;
lOk=1;
lErr=0;
buzzer=1;
delay1(50);
buzzer=0;
nmode=0;
istep=0;
}
else if(istep==10)
{
keepcnt=600;
keepok=0;
itimeover=600;
btimeover=0;
vHigh=0;
vLow=0;
vDir=0;
lOk=0;
lErr=1;
buzzer=almpulse;
if(!NBTN||!PBTN)
{
alarm=20;
buzzer=0;
lErr=0;
istep=0;
pmode=0;
nmode=0;
}
}
else
{
istep=0;
}
lRun=pmode||nmode;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -