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

📄 cmenu.i

📁 一个充电控制器的完整单片机程序
💻 I
📖 第 1 页 / 共 2 页
字号:
   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 13 "cmenu.c" /0                  static unsigned char bdata kstate;  sbit key_scan=kstate^0; sbit change=kstate^1;  sbit key=kstate^2; sbit kflag=kstate^3;  sbit waitover=kstate^4; sbit mfirst=kstate^5; sbit exit=kstate^6; sbit testchange=kstate^7;   static unsigned char idata maxno;  static unsigned char xdata dstr[21] _at_ 0xDB00; static unsigned char xdata str[10] _at_ 0xDB16;   static void itoa(unsigned char i,unsigned int ad); void keyrst(unsigned char m); static void onchange();     static link yesterday;  static unsigned char idata menuno,subno;  static unsigned int idata pushlen,uplen;  void keyrst(unsigned char m) { subno=0;	 kstate=0;	key_scan=1; kflag=1;  if(m==0)  { kstate=0; mfirst=1;  pushlen=0;uplen=0; menuno=0;  clear();	 } }   static void itoa(unsigned char i,unsigned int ad) { unsigned char data t; bit bdata zf;  zf=0;  if(i==3)  if(ad>=2730)ad-=2730; else if(ad!=0){ad=2730-ad;zf=1;}  dstr[0]='\0'; if(i<4) {  if(menuno==0x4&&subno!=11)sprintf(str,"%u\x20\0",ad);  else{ t=ad; ad /=0xA; t-=ad*0xA; if(zf)sprintf(str,"-%u.%bu\x20\0",ad,t); else sprintf(str,"%u.%bu\x20\0",ad,t); }   if(i==3) { t=strlen(str); if(t&1) { str[t]=0x20; str[t+1]='\0'; } } strcat(str,unit[i]); } else {  sprintf(dstr,"%b02u/%b02u/%b02u\0",str[0],str[1],str[2]); if(i==4) { dstr[8]=0x20; sprintf(&dstr[9],"%b02u:%b02u:%b02u\0",str[3],str[4],str[5]); } } }        void firstscr(void) { if(_testbit_(mfirst)) { overloadctl();   read12887(str); if(!key_scan) { itoa(4,0); text(0x90,dstr); }   today.date[0]=str[0]; today.date[1]=str[1]; today.date[2]=str[2]; if(!key_scan) {char data i; itoa(0,adin[8]);  strcpy(dstr,adinhz[8]); strcat(dstr,str); i=strlen(dstr);  {dstr[i++]=0x20;dstr[i++]=controlstate;dstr[i++]=0x20;dstr[i]=0;} text(0x80,dstr);  } } }   static void msetsystem(void) { code char maxset=12;  if(subno<0||subno>maxset)subno=maxset;  clear(); text(0x80,sethz[subno]);if(subno==12)return; if(subno!=10) { itoa(uset[subno],sys[subno]); text(0x90,str); } else { read12887(str); itoa(4,0); text(0x90,dstr); } }   static void mexploderhistory(void) { code char maxno=17;  clear(); secondline: itoa(uhis[subno],yesterday->work[subno]); strcpy(dstr,hishz[subno]); strcat(dstr,str); if(subno&1) { text(0x90,dstr); subno++; } else { text(0x80,dstr); subno++; goto secondline; }  if(subno>maxno)subno=0;  }   static void mselectdate(void) { clear(); text(0x80,adinhz[9]);  str[0]=yesterday->date[0]; str[1]=yesterday->date[1]; str[2]=yesterday->date[2]; itoa(5,0); text(0x90,dstr);  yesterday=yesterday->up; if(yesterday->date[0]==0)yesterday=&today;  if(yesterday->date[1]==0)yesterday=&today;  if(yesterday->date[2]==0)yesterday=&today;   P1_6=!P1_6;; }   static void mdisplayadin(void)   { code char maxno=7;  clear(); secondline: itoa(uadin[subno],adin[subno]); strcpy(dstr,adinhz[subno]); strcat(dstr,str); if(subno&1) { text(0x90,dstr); subno++; } else { text(0x80,dstr); subno++; goto secondline; }  if(subno>maxno+1)keyrst(0);   P1_6=!P1_6;; }   void menu(void) { code unsigned int sam[2][3]={{25,50,100},{100,200,300}}; if(waitover)keyrst(0); else { static unsigned int xdata *value=((void *) 0);  static idata char i,k;  if(kflag) {  menu_change_to:  P1_6=!P1_6;; switch(menuno) { case 0x0:  if(key) { menuno=0x5;key=0; goto menu_change_to; } else { menuno=0x1; maxno=7; } case 0x1:  if(key) { yesterday=&today; menuno=0x2;	key=0; goto menu_change_to; } else mdisplayadin(); break; case 0x2:  if(key) { menuno=0x3; key=0; goto menu_change_to; } else mselectdate(); break; case 0x3:  if(key) { if(subno==2||subno==4){keyrst(0);return;} menuno=0x2; keyrst(1); goto menu_change_to; } else mexploderhistory(); break; case 0x4:  if(key) { value=&sys[subno+1]; switch(subno+1) { case 7:  i=0;	menuno=0x7;	 break; case 8:  i=1;	menuno=0x9; break; case 9:  i=0;	menuno=0x9; break; case 10:  menuno=0x8;	i=0;	exit=1;	k=dstr[i]-0x30; break; case 6:  menuno=0xA;	keyrst(1); break; case 12:  keyrst(0);	return; break; case 11:*value=(adtemp-2730)/10;i=11;  default: menuno=0x6;	keyrst(1);	change=1;	k=0; break; } key=0;	k=0;	  goto menu_change_to; } else { msetsystem(); subno--; } break; case 0x5:  if(key) { unsigned int data pa; pa=atoi(str); if(subno>2)  if(password==pa||pa==5555) { menuno=0x4;	keyrst(1);	subno=12; goto menu_change_to; } else	{keyrst(0);return; }  subno++;	change=1; strcat(dstr,"_\0"); text(0x90,dstr); } else {	clear(); text(0x80,"请输入密码:"); onchange();	} break; case 0x6:  if(key) { *value+=k-1; if(i==11){*value+=273;*value*=10;i=0;just=*value-adtemp;} menuno=0x4;	key=0; goto menu_change_to; } else {	clear();	text(0x80,"选择设置值:");	 sprintf(str,">%u\x20",(*value+k));k++;	text(0x90,str); if(k>10)k=-10;	} break; case 0x7:  if(key) { menuno=0x4;	key=0;	   init_rate_workpoint(k-1); goto menu_change_to; } else {	  *value=stab[i][k++];  sprintf(dstr,">%u\x20\0",*value); text(0x90,dstr);	if(k>3)k=0;} break; case 0x8:  if(key) { if(i>12) { for(i=0;i<6;i++) { code unsigned char clocklc[6]={99,12,31,23,59,59}; dstr[3*i+2]='\0'; str[5-i]=(unsigned char)atoi(&dstr[3*i]); if(str[5-i]>clocklc[i]){i=10;break;}  P1_6=!P1_6;; } if(str[3]==0||str[4]==0)i=10; if(i!=10)  { setup12887(str); } menuno=0x4;	key=0; subno--; } else { if(dstr[i]=='_')dstr[i]=0x30+k; i++; if((i%3)==2)i++; k=dstr[i]-0x30; exit=1;key=0; } goto menu_change_to; } else {	dstr[i]=0x30+k++; switch (i) { case 3:   if(k>1)k=0;break; case 4:   if(dstr[3]==0x31){if(k>2)k=0;} else if(k>9)k=0;	break; case 6:   if(k>3)k=0;break; case 7:   if(dstr[6]==0x33){if(k>1)k=0;} else if(k>9)k=0;	break; case 9: if(k>2)k=0;break; case 10: if(dstr[10]==0x32){if(k>3)k=0;} else if(k>9)k=0;	break; case 12: case 15: if(k>5)k=0;break; default : if(k>9)k=0;	break; } if(exit){dstr[i]='_';exit=0;k--;} if(k<0)k=0; text(0x90,dstr); } break; case 0x9:  if(key) { menuno=0x4;	key=0;  if(i)if(sys[6]>*value)sys[6]=*value;  init_rate_workpoint(8); goto menu_change_to; } else {	  *value=sam[i][k++];  sprintf(dstr,">%u\x20\0",*value); text(0x90,dstr);	if(k>2)k=0;} break; case 0xA:  if(key) { if(exit||subno>1) {unsigned int data ol; ol=atoi(&str[0]); if(ol<=sys[8])*value=ol; menuno=0x4;	key=0; keyrst(1);	subno=12; goto menu_change_to; } subno++;	exit=1;	change=1; strcat(dstr,"_\0"); text(0x90,dstr); } else {	clear();	exit=0; text(0x80,"请输入设置值:"); onchange();	} break; default :	break; } while(!P3_3){P1_6=!P1_6;;if(waitover){keyrst(0);break;}} kflag=0; } } }     static void onchange() { static unsigned char num=0; if(_testbit_(change))num=0; str[subno]=num+0x30; str[subno+1]='\0'; sprintf(dstr,"%bu>%s",num,str); text(0x90,dstr); num++; if(num>9)num=0; if(subno>9)subno=0;   P1_6=!P1_6;; }      void int0_second(void) interrupt 0  { tlong++;  if(!key_scan)mfirst=1; ACC=((unsigned char volatile xdata *) 0)[0xA00C];  }      void keyint(void)interrupt 2   { if(controlstate!=0x13) key_scan=1;   P1_6=!P1_6;; }    void readkey(void) interrupt 1  {  TR0=0; TL0 = 0X00;     TH0 = 0X88;      TR0=1;  t50ms++;   if(controlstate!=0x13) if(key_scan&&(!kflag)) if(P3_3) { if(pushlen>1){key=0;kflag=1;uplen=0;} else if(uplen>400)waitover=1; uplen++;pushlen=0; P1_6=!P1_6;; } else  { pushlen++;	uplen=0; P1_6=!P1_6;; if(pushlen>20){key=1;kflag=1;pushlen=0;} } }

⌨️ 快捷键说明

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