?? cmenu.i
字號:
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 + -