⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.i

📁 一个充电控制器的完整单片机程序
💻 I
字号:
#line 1 "control.c" /0    #line 1 "D:\KEIL\C51\INC\ABSACC.H" /0                 #line 24 "D:\KEIL\C51\INC\ABSACC.H" /1         #line 29 "D:\KEIL\C51\INC\ABSACC.H" /0       #line 4 "control.c" /0   #line 1 "D:\KEIL\C51\INC\STDLIB.H" /0        typedef unsigned int size_t;         typedef char wchar_t;    #pragma SAVE #pragma REGPARMS  extern int    abs  (int   val); extern long  labs  (long  val);  extern float atof (char *s1); extern long  atol (char *s1); extern int   atoi (char *s1); extern int   rand (); extern void  srand (int);  extern float         strtod  (char *, char **); extern long          strtol  (char *, char **, unsigned char); extern unsigned long strtoul (char *, char **, unsigned char);    extern int  init_mempool          (void xdata *p, unsigned int size); extern void xdata *malloc  (unsigned int size); extern void free                  (void xdata *p); extern void xdata *realloc (void xdata *p, unsigned int size); extern void xdata *calloc  (unsigned int size, unsigned int len);  #pragma RESTORE  #line 5 "control.c" /0   #line 1 "D:\KEIL\C51\INC\ATMEL\AT89X52.H" /0       sfr P0      = 0x80; sfr SP      = 0x81; sfr DPL     = 0x82; sfr DPH     = 0x83; sfr PCON    = 0x87; sfr TCON    = 0x88; sfr TMOD    = 0x89; sfr TL0     = 0x8A; sfr TL1     = 0x8B; sfr TH0     = 0x8C; sfr TH1     = 0x8D; sfr P1      = 0x90; sfr SCON    = 0x98; sfr SBUF    = 0x99; sfr P2      = 0xA0; sfr IE      = 0xA8; sfr P3      = 0xB0; sfr IP      = 0xB8; sfr T2CON   = 0xC8; sfr T2MOD   = 0xC9; sfr RCAP2L  = 0xCA; sfr RCAP2H  = 0xCB; sfr TL2     = 0xCC; sfr TH2     = 0xCD; sfr PSW     = 0xD0; sfr ACC     = 0xE0; sfr B       = 0xF0;   sbit P0_0 = 0x80; sbit P0_1 = 0x81; sbit P0_2 = 0x82; sbit P0_3 = 0x83; sbit P0_4 = 0x84; sbit P0_5 = 0x85; sbit P0_6 = 0x86; sbit P0_7 = 0x87;             sbit IT0  = 0x88; sbit IE0  = 0x89; sbit IT1  = 0x8A; sbit IE1  = 0x8B; sbit TR0  = 0x8C; sbit TF0  = 0x8D; sbit TR1  = 0x8E; sbit TF1  = 0x8F;                sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; sbit P1_3 = 0x93; sbit P1_4 = 0x94; sbit P1_5 = 0x95; sbit P1_6 = 0x96; sbit P1_7 = 0x97;  sbit T2   = 0x90;         sbit T2EX = 0x91;           sbit RI   = 0x98; sbit TI   = 0x99; sbit RB8  = 0x9A; sbit TB8  = 0x9B; sbit REN  = 0x9C; sbit SM2  = 0x9D; sbit SM1  = 0x9E; sbit SM0  = 0x9F;   sbit P2_0 = 0xA0; sbit P2_1 = 0xA1; sbit P2_2 = 0xA2; sbit P2_3 = 0xA3; sbit P2_4 = 0xA4; sbit P2_5 = 0xA5; sbit P2_6 = 0xA6; sbit P2_7 = 0xA7;   sbit EX0  = 0xA8;         sbit ET0  = 0xA9;         sbit EX1  = 0xAA;         sbit ET1  = 0xAB;         sbit ES   = 0xAC;         sbit ET2  = 0xAD;          sbit EA   = 0xAF;           sbit P3_0 = 0xB0; sbit P3_1 = 0xB1; sbit P3_2 = 0xB2; sbit P3_3 = 0xB3; sbit P3_4 = 0xB4; sbit P3_5 = 0xB5; sbit P3_6 = 0xB6; sbit P3_7 = 0xB7;  sbit RXD  = 0xB0;         sbit TXD  = 0xB1;         sbit INT0 = 0xB2;         sbit INT1 = 0xB3;         sbit T0   = 0xB4;         sbit T1   = 0xB5;         sbit WR   = 0xB6;         sbit RD   = 0xB7;           sbit PX0  = 0xB8; sbit PT0  = 0xB9; sbit PX1  = 0xBA; sbit PT1  = 0xBB; sbit PS   = 0xBC; sbit PT2  = 0xBD;   sbit CP_RL2= 0xC8;        sbit C_T2 = 0xC9;         sbit TR2  = 0xCA;         sbit EXEN2= 0xCB;         sbit TCLK = 0xCC;         sbit RCLK = 0xCD;         sbit EXF2 = 0xCE;         sbit TF2  = 0xCF;               sbit P    = 0xD0; sbit FL   = 0xD1; sbit OV   = 0xD2; sbit RS0  = 0xD3; sbit RS1  = 0xD4; sbit F0   = 0xD5; sbit AC   = 0xD6; sbit CY   = 0xD7;            sbit BUSYFLAG = ACC^7;    #line 6 "control.c" /0   #line 1 "D:\KEIL\C51\INC\INTRINS.H" /0      extern void          _nop_     (void); extern bit           _testbit_ (bit); extern unsigned char _cror_    (unsigned char, unsigned char); extern unsigned int  _iror_    (unsigned int,  unsigned char); extern unsigned long _lror_    (unsigned long, unsigned char); extern unsigned char _crol_    (unsigned char, unsigned char); extern unsigned int  _irol_    (unsigned int,  unsigned char); extern unsigned long _lrol_    (unsigned long, unsigned char); extern unsigned char _chkfloat_(float);   #line 7 "control.c" /0    #line 1 "charger.h" /0                                    typedef union { unsigned char b[2]; unsigned int i; }word;     struct workdata { unsigned char date[3];   unsigned int work[18]; struct workdata xdata *next; struct workdata xdata *up; }; typedef struct workdata daydata; typedef daydata xdata *link ;   struct rate { unsigned int volatage;  unsigned int temperature;  unsigned int discharge;  unsigned int charge; };      extern void getadin(void); extern void account(void); extern void save(void); extern void control(void); extern void overloadctl(void); extern void init_history_buffer(void); extern void init_rate_workpoint(unsigned char n); extern unsigned char umod(unsigned int v,unsigned int c);    extern void delay(unsigned int i);     extern void firstscr(void); extern void menu(void); extern void keyrst(unsigned char m);     extern  unsigned int tlc1543(unsigned char port);         extern void setup12887(unsigned char *p); extern void read12887(unsigned char *p); extern void start12887(void);                void text(unsigned char sta,unsigned char *string);  void WD_LCD(unsigned char ch);  void WC_LCD(unsigned char comand);  void clear(void);         extern unsigned int xdata adin[10]; extern daydata xdata today; extern unsigned int xdata sys[13]; extern struct rate xdata crate; extern char xdata just; extern unsigned int xdata adtemp; extern char idata controlstate;    extern unsigned int idata tlong; extern unsigned int idata t50ms;    extern code unsigned char *adinhz[10]; extern code unsigned char *hishz[18]; extern code unsigned char *sethz[13];   extern code unsigned int stab[5][4]; extern code unsigned int dtab[4][7]; extern code unsigned char *unit[4];  extern code unsigned char uadin[9]; extern code unsigned char uhis[18]; extern code unsigned char uset[12]; extern unsigned int xdata password;   #line 9 "control.c" /0                   extern daydata xdata looplink[0x80];  void init_history_buffer(void) { unsigned char data i;  for(i=0;i<0x80-1;i++) { looplink[i].next=&looplink[i+1]; looplink[i+1].up=&looplink[i];  P1_6=!P1_6;; } looplink[0x80-1].next=&looplink[0]; looplink[0].up=&looplink[0x80-1];  today.next=&looplink[0]; today.up=&looplink[0x80-1];   today.up->date[0]=0;  today.up->date[1]=0;  today.up->date[2]=0;   P1_6=!P1_6;; }  void init_rate_workpoint(unsigned char n) { unsigned char data i;  if(n<4)  for(i=0;i<12;i++)  { if(i<7) {  sys[i]=dtab[n][i]; } else { if(i==11)  sys[12]=stab[4][n]; else sys[i]=stab[i-7][n]; } }  i=45;  crate.temperature = i*100; crate.volatage = i*sys[12];  crate.discharge = i*sys[8]/4; crate.charge = i*sys[9]/4;  if(sys[6]>sys[8])sys[6]=sys[8];  P1_6=!P1_6;; }         void getadin(void) { unsigned char data i; unsigned long data tmp; unsigned long xdata *s;  unsigned int xdata *t;  for(i=0;i<10;i++)  if(i!=7) { unsigned char data c;   tmp=0;  for(c=0;c<10;c++)tmp+=tlc1543(i);   P1_6=!P1_6;;  tmp /= 10;  if(i<6) { tmp *= crate.charge; tmp /= 4096;	adin[i]=(unsigned int)tmp;	 } if(i==6) { tmp *= crate.discharge; tmp /= 4096;	adin[6]=(unsigned int)tmp; } if(i==8) { tmp *= crate.temperature; tmp /= 4096;	adin[7]=(unsigned int)tmp;  adtemp=(unsigned int)tmp;   if(sys[11]<3730&&sys[11]>1730) if(just>-10&&just<10)adin[7]+=just;   } if(i==9) { tmp *= crate.volatage; tmp /= 4096;	adin[8]=(unsigned int)tmp;	 } }  for(i=0;i<9;i++) { if(i>6)  if(adin[i]<today.work[2*i+1]||today.work[2*i+1]==0) today.work[i*2+1]=adin[i];  if(adin[i]>today.work[2*i])today.work[i*2]=adin[i]; }  s=0xDB28; for(i=0;i<7;i++)*s+++=(unsigned long)adin[i]; t=0xDB24; (*t)++;  P1_6=!P1_6;; }  unsigned char umod(unsigned int v,unsigned int c) { return c=v-(v/c)*c; }  void account(void) { static bit bdata cc; char data i; if(umod(tlong,60)>50)  { if(!cc) { unsigned long xdata *s; unsigned long xdata *Ah;  unsigned int xdata *t; t=0xDB24; s=0xDB28; Ah=0xDB44; for(i=0;i<9;i++) if(i<7) {   unsigned long data ta; if(*t!=0)*Ah+=*s/(unsigned long)(*t);  else return; ta=(unsigned long)(*Ah/60); today.work[i*2+1]=(unsigned int)ta; *s++=0; Ah++;  P1_6=!P1_6;; } cc=1;	*t=0; } } else cc=0; }                          bit bdata boostflag;  #pragma DISABLE  void control(void) { static bit bdata motoropen,exe,ffo; static unsigned char idata switchchar=0xff;    unsigned int data ofv,cfv; unsigned char data fk;  if(umod(t50ms,40)>20)  {if(exe)return;} else {exe=0; return;}  exe=1;   if(adin[7]>2980)  { cfv=sys[2]*10-((adin[7]-2980)*sys[10])/1000; ofv=sys[3]*10-((adin[7]-2980)*sys[10])/1000; } else { cfv=sys[2]*10+((2980-adin[7])*sys[10])/1000; ofv=sys[3]*10+((2980-adin[7])*sys[10])/1000; }  if(controlstate==0x17)fk=0;  if(adin[8] > sys[0]*10) { boostflag=0;	controlstate=0x15; if(switchchar!=0xff) { fk=1; while(switchchar==(switchchar|fk))fk<<=1; switchchar|=fk;	switchchar|=0xC0; }else controlstate=0x17; } else { if(boostflag) { controlstate=0x18;  switchchar|=0xC0; if((switchchar&0x3F) !=0x00) { fk=1; while(switchchar==(switchchar&~fk))fk<<=1; switchchar&=~fk; } if(adin[8]< sys[4]*10) { motoropen=1;  if(adin[8]<sys[5]*10) {controlstate=0x2;	switchchar&=0x7F;}  } } else	  { if(adin[8] >cfv)  { ffo=0; motoropen=0;		controlstate=0x17; if(switchchar!=0xff) { fk=1;	controlstate=0x12; while(switchchar==(switchchar|fk))fk<<=1; switchchar|=fk;	switchchar|=0xC0; } }  else { if(switchchar==0xff)controlstate=0x17; else controlstate=0x12; if(ffo) if((switchchar&0x3F) !=0x00) { fk=1; while(switchchar==(switchchar&~fk))fk<<=1; switchchar&=~fk;	switchchar|=0xC0; } if(adin[8] < ofv)  { ffo=1; if(adin[8] < sys[1]*10) { boostflag=1;	controlstate=0x18;  } } } } }  if(motoropen) if(adin[8] <cfv)  {	if(umod(t50ms,15)<7)controlstate=0xf;	switchchar &=0xBF;}  else {switchchar |=0x40;motoropen=0;}    ((unsigned char volatile xdata *) 0)[0x6001]=switchchar;   P1_6=!P1_6;; } void overloadctl(void) { if(adin[6]>(sys[6]*10)) { if(P3_3) {controlstate=0x13;_nop_();P3_3=0;} else P3_3=1; }else P3_3=1; }     void save(void) { unsigned char data i; static unsigned char idata day[3];  link p; if(day[2]==0||day[2]>31) { unsigned char xdata *s; s=0xDB90; read12887(s); day[0]=s[0];  day[1]=s[1];  day[2]=s[2];  }  if(today.date[2]!=day[2]) { unsigned long xdata *Ah; Ah=0xDB44; p=today.next;  if(today.work[16]!=0)  { for(i=0;i<18;i++)  { if(i<3)p->date[i]=today.date[i]; p->work[i]=today.work[i]; today.work[i]=0;  } p->date[0]=day[0]; p->date[1]=day[1]; p->date[2]=day[2]; today.next=p->next;  today.up=p;  today.next->date[0]=0;  today.next->date[1]=0;  today.next->date[2]=0;  } for(i=0;i<7;i++)*Ah++=0;  day[0]=0;  day[1]=0;  day[2]=0;  }  P1_6=!P1_6;; } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -