📄 3192uc.c
字号:
#include<reg52.h>
#include<absacc.h>
#include<init.h>
#define uchar unsigned char
#define uint unsigned int
/********************************************************************************/
/************ Main Function ************/
/********************************************************************************/
void main(void)
{
initial();
array[0]=0;array[1]=10;array[2]=0;array[3]=1;
while(RL1);
BINTBCD(ENL,ENH);
while(RL0);
while(1){
CHKT();
}
while(1);
}
void CHKT(void)
{
if(SAMOK){
SAMOK=0;
ADJDLY=0;
while(!SAMOK);
SAMOK=0;
TMPL=AD_RESULTL+ABSDL;
TMPH=AD_RESULTH+ABSDH;
BINTBCD(TMPL,TMPH);
if(TMPH>=0x80){SIGN=0;POL=1;}
else{SIGN=1;POL=0;}
}
}
/********************************************************************************/
/************ Initiation programme Function ************/
/********************************************************************************/
void initial(void)
{
//uint bcdth;
uchar i,j;
j=4;
DARK=0;
for(i=18;i>0;i--)array_r1[i+36]=DEFAULT_PID[i];
for(i=18;i>0;i--)array_r0[i]=DEFAULT1[i];
for(i=18;i>0;i--)WRU3(array_r0[i],i+1);
ENH=RDSU3(0X07);
ENL=RDSU3(0X08);
COMMDLY1=255;
COMMDLY2=200;
TMOD =0X21;
RCAP2H=0XFF;
RCAP2L=0XFA;
T2CON =0X34;
SCON =0X50;
PCON =0X80;
IP =0X01;
IE =0X03;
TL0 =0X33;
TH0 =0XFE;
IT0 =1;
T2mS =4;
T05Sec =500/20;
T1min =120;
CLONDLY=3;
CLONDLYF =1;
COMM_OPEN_F=0;
POL=1;
DGTCNT=1;
TR0=1;
EA=1;
}
void BINTBCD(uchar x,uchar y)
{
uint i;
i=0;
if(y>=0x80)y=y-0x80;
else {
if(x>0x00){x=(0xff-x)+1;y=0x7f-y;}
else {x=0x00;y=0x80-y;}
}
i=i+y;i<<=8;i=i+x;
if(i>=10000){array[0]=1;i=i-10000;}
else array[0]=0;
array[1]=i/1000;
if(array[1]>0x00)i=i-array[1]*1000;
array[2]=i/100;
if(array[2]>0x00)i=i-array[2]*100;
array[3]=i/10;
}
/********************************************************************************/
/************ Timer0 ISR ************/
/********************************************************************************/
void intt0(void) interrupt 1 using 1
{
TL0=0x33;
TH0=0x0FE;
T2mS--;
if(T2mS==0){
T2mS=4;
P0=0XFF;
DARK=0;
P0=P0&DGT[DGTCNT-1];
P0=P0&(0XF0|array[DGTCNT-1]);
DGTCNT++;
if(DGTCNT>=5)DGTCNT=1;
if(!((DGTCNT==0X02)&&(array[0]==0X00)))
DARK=1;
}
}
/********************************************************************************/
/************ Exterior Interrupt0 ISR ************/
/********************************************************************************/
void INT_7135(void) interrupt 0 using 1
{
uint admid;
uchar SAMV;
if(!AD_D5){ //选通信号有无决定是否输出
if(TRAN_EFFIC_F){
SAMV=P1&0X0F;
switch(AD_FACTORIAL)
{
case 1:
{
admid=0x0000;
admid=admid+SAMV;
admid=admid+AD_MID_L;
AD_MID_L=admid&0x00ff;
AD_MID_H=AD_MID_H+(admid>>8);
};break;
case 2:
{
admid=0x0000;
admid=admid+SAMV*10;
admid=admid+AD_MID_L;
AD_MID_L=admid&0x00ff;
AD_MID_H=AD_MID_H+(admid>>8);
};break;
case 3:
{
admid=0x0000;
admid=admid+SAMV*100;
admid=admid+AD_MID_L;
AD_MID_L=admid&0x00ff;
AD_MID_H=AD_MID_H+(admid>>8);
};break;
case 4:
{
admid=0x0000;
admid=admid+SAMV*1000;
admid=admid+AD_MID_L;
AD_MID_L=admid&0x00ff;
AD_MID_H=AD_MID_H+(admid>>8);
};break;
default:break;
}
AD_FACTORIAL--;
if(AD_FACTORIAL==0){
TRAN_EFFIC_F=0;
if(AD_POL) //是负的值吗?(AD-POL 1 为正,0 为负)
{
AD_RESULTH=0x80+AD_MID_H;
AD_RESULTL=AD_MID_L;
}
else{
if(AD_MID_L>0){
AD_RESULTH=0X7F-AD_MID_H;
AD_RESULTL=(0XFF-AD_MID_L)+1;
}
else{
AD_RESULTH=0x80-AD_MID_H;
AD_RESULTL=AD_MID_L;
}
}
SAMOK=1;
ENDLT=~ENDLT;
}
}
}
else{
TRAN_EFFIC_F=1; //开始转化标志置高
AD_FACTORIAL=4; // AD因子数
if(!DB1){AD_MID_H=0;AD_MID_L=0;} //万位是否为零
else{AD_MID_H=0x27; AD_MID_L=0x10; } //万位送1
}
}
/********************************************************************************/
/************ Read data from 93c46 funcation ************/
/********************************************************************************/
uchar RDSU3(uchar x)
{
uchar y;
INSB();
WRBYTE(x|0x80);
y=RDBYTE();
CS=1;
return (y);
}
/********************************************************************************/
/************ Write data to 93c46 funcation ************/
/********************************************************************************/
void WRU3(uchar x,uchar y)
{
INSB();
WRBYTE(0X30);
INSB();
WRBYTE(0X40|y);
WRBYTE(x);
SK=0;
CS=1;
while(!DOI);
CS=0;
INSB();
WRBYTE(0X00);
SK=0;
CS=1;
}
/********************************************************************************/
/************ start EEPROM funcation ************/
/********************************************************************************/
void INSB(void)
{
SK=0;
DOI=0;
CS=1;
SK=1;
SK=0;
DOI=1;
SK=1;
SK=0;
CS=0;
}
/********************************************************************************/
/************ write 8bit funcation ************/
/********************************************************************************/
void WRBYTE(uchar x)
{
uchar i;
i=8;
while(i--){
DI=(bit)(x&0x80);
x<<=1;
SK=1;
SK=0;
}
}
/********************************************************************************/
/************ read 8 data funcation ************/
/********************************************************************************/
uchar RDBYTE(void)
{
uchar x;
uchar j=8;
x=0;
while(j--)
{
DOI=1;
x<<=1;
SK=1;
SK=0;
if (DOI) x|=0x01;
}
return x;
}
/*void CTR(void)
{
EN1H=ENH;
EN1L=ENL;
EN1F=ENF;
if((SETTH<TMPH)|((SETTL<TMPL)&(SETTH=TMPH)))CTR0();
else{
PIDCASEL=SETTL-TMPL;
PIDCASEH=SETTH-TMPH;
if(SETTH>TMPH)CTRMAX();
else{
ENH=PIDCASEH;
ENL=PIDCASEL;
ENF=0;
}
}
CTR1();
}
void CTR0(void)
{
PIDCASEL=TMPL-SETTL;
PIDCASEH=TMPH-SETTH;
if(TMPH>SETTH)CTRMIN();
else{
ENH=PIDCASEH;
ENL=PIDCASEL;
ENF=1;
}
}
void CTR1(void)
{
PIDF=ENF;
PID1F=EN1F;
F0=1;
ADDF(&ENL,&EN1L); //L(R0),1L(R1)
DENH=PIDCASET;
DENL=PIDCASEH;
DENF=F0;
}
void CTRMAX(void)
{
if(MAXMIN>=4){
PNH=0X00;
PNL=0X65;
}
ECTR();
}
void CTRMIN(void)
{
if(MAXMIN>=4){
PNH=0X00;
PNL=0X00;
}
ECTR();
}
void ECTR(void)
{
EA=0;
PWMBAK=PNL;
if(PNH>0)PWMBAK=0X65;
if(PNL>=0x65)PWMBAK=0X65;
EA=1;
}
void ADDF(uchar *x,uchar *y)
{
while(1)
{
if(F0){
if(PID1F^PIDF){
PIDCASEH=(*x)+(*y);
PIDCASET=(*(x+1))+(*(y+1));
F0=PIDF;
break;
}
if(*(x+1)<*(y+1)){
PIDCASEH=(*y)-(*x);
PIDCASET=(*(y+1))-(*(x+1));
F0=~PIDF;
break;
}
PIDCASEH=(*x)-(*y);
PIDCASET=(*(x+1))-(*(y+1));
F0=PIDF;
break;
}
if(PID1F^PIDF)
{
if((*(x+1)<*(y+1))){
PIDCASEH=(*y)-(*x);
PIDCASET=(*(y+1))-(*(x+1));
F0=PID1F;
break;
}
PIDCASEH=(*x)-(*y);
PIDCASET=(*(x+1))-(*(y+1));
F0=PID1F;
break;
}
PIDCASEH=(*x)+(*y);
PIDCASET=(*(x+1))-(*(y+1));
F0=PIDF;
break;
}
}
void ready(void)
{
uchar i;
SETDGT=5;
while(1){
if(!NEWKeyF)STADLY2();
KEYDOWN=1;
NEWKeyF=0;
if(BX3>0x00)STADLY2();
if(BY0!=0x40)STADLY1();
if(ADJDLY)STADLY5();
i=18;
while(i--){
array_r0[i]=DEFAULT1[i];
}
WRU3();
break;
}
}
void STADLY2(void)
{
if(!SAMOK)STADLY();
else{
SAMOK=0;
while(SETDGT--){
STADLY();
}
ADJDLY=0;
while(!SAMOK);
SAMOK=0;
TMPL=AD_RESULTL+ABSDL;
TMPH=AD_RESULTH+ABSDH;
if(TMPH>=0x80){
SIGN=0;
BINTBCD(TMPL,(TMPH-0x80));
}
else{
SIGN=1;
if(TMPL>0X00)BINTBCD(((0XFF-TMPL)+1),(0X7F-TMPH));
else BINTBCD(0X00,(0X80-TMPH));
}
}
}*/
/*void BINTBCD(uchar x,uchar y)
{
uint i;
i=0;
i=i+y;
i<<=8;
i=i+x;
if(i>=10000){
array[0]=1;
i=i-10000;
}
else array[0]=0;
//array[0]=i/10000;
//if(array[0]!=0x00)i=i-array[0]*10000;
array[1]=i/1000;
if(array[1]>0x00)i=i-array[1]*1000;
array[2]=i/100;
if(array[2]>0x00)i=i-array[2]*100;
array[3]=i/10;
}
uint BCDTBIN(void)
{
uint i;
uchar j;
i=0;
for(j=0;j<=3;j++){
i=i+array[j];
i=i*10;
}
return (i);
} */
/* while(j--){
array[j]=RRL[j];
}
SIGN=0;
if((KEYBUF0&0X80)==0X80)SIGN=1;
KEYBUF0&=0X7F;
bcdth=BCDTBIN();
LRNGL=bcdth&0x00ff;
LRNGH=bcdth>>8;
if(SIGN)LRNGH=0X80-LRNGH;
else LRNGH=0X80+LRNGH;
j=4;
while(j--){
array[j]=RRH[j];
}
SIGN=0;
if((KEYBUF0&0X80)==0X80)SIGN=1;
KEYBUF0&=0X7F;
bcdth=BCDTBIN();
HRNGL=bcdth&0x00ff;
HRNGH=bcdth>>8;
if(SIGN)HRNGH=0X80-HRNGH;
else HRNGH=0X80+HRNGH;
array[0]=0;array[1]=2;array[2]=0;array[3]=9;
POL=1;
DGTCNT=1;
TR0=1;
EA=1;
/* P1&=0x3F;
SK=0;
i=18;
j=0;
while(i--){
array_r0[i]=RDSU3(j);
j++;
}
start();
}
/********************************************************************************/
/************ Delay Funcation ************/
/********************************************************************************/
/*void delay(uint y)
{
uchar n;
while(y--){
n=200;
while(n--)
{;}
}
return;
} */
/*void intt0(void) interrupt 1 using 1
{
TL0=0x33;
TH0=0x0FE;
while(1){
T2mS--;
if(T2mS>0)break;
T2mS=2*TIMES;
T20ms--;
if(T20ms>0){
KEY();
}
T20ms=20/TIMES;
if(PUMP|DSHEAT)CLCK3();
if(HTONDLYF)
{
HTONDLY--;
if(HTONDLY>0)CLCKxxx();
HTONDLYF=0;
}
T2Sec--;
if(T2Sec>0)CLCK2();
T2Sec=100;
CTR();
if(PWMBAK==0)CLCK3();
HEAT=0;
PWMON=PWMBAK;
}
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -