为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

一个实际使用的的LCD汉字显示多屏多层菜单 程序

2017-09-27 50页 doc 163KB 15阅读

用户头像

is_180829

暂无简介

举报
一个实际使用的的LCD汉字显示多屏多层菜单 程序一个实际使用的的LCD汉字显示多屏多层菜单 程序 一个实际使用的LCD汉字显示多屏多层菜单 #include #include #include #define INPUTSET256; #define DEBUG 0 //0:运行,1:调试 #define ENABLE_INTERRUPT 1//1:中断允许,0:中断禁止 //定义8155地址 #define I8155A0x7000 #define I8155B0x7200 #definePA1 #define PB2 #define PC3 //定义...
一个实际使用的的LCD汉字显示多屏多层菜单 程序
一个实际使用的的LCD汉字显示多屏多层菜单 程序 一个实际使用的LCD汉字显示多屏多层菜单 #include #include #include #define INPUTSET256; #define DEBUG 0 //0:运行,1:调试 #define ENABLE_INTERRUPT 1//1:中断允许,0:中断禁止 //定义8155地址 #define I8155A0x7000 #define I8155B0x7200 #definePA1 #define PB2 #define PC3 //定义25045地址 #define OUTNUMBER 0x01a1 #define INNUMBER 0x01a2 #define PASSWORD_ADDR 0x01a3 #define HIDE_PASSWORD_ADDR 0x01af //定义键盘扫描码 #defineBUTTON_START0x28 #define BUTTON_STOP0x48 #define BUTTON_SET0x84 #define BUTTON_OK0x88 #define BUTTON_SLAVE0x81 //0,1,2,3,4,5,6,7,8,9 unsigned char code keyscancode[]={0x82,0x11,0x12,0x14,0x21,0x22,0x24,0x41,0x42,0x44}; #include #include //new var unsigned char bdata bitvar; sbit keypush=bitvar^0; sbit rrtime_flag=bitvar^1;//读取运行参数标志 sbit showflag=bitvar^2; unsigned char keycode,tempkey,i,j; unsigned char menuitem=0x00; unsigned int runtime[32]; unsigned int xdata starttime[36]; unsigned int xdata stoptime[32]; unsigned int xdata betweentime[32]; unsigned char xdata runno1[36]; unsigned char xdata linkrun[4]; unsigned char xdata linkrunno1[4]; unsigned char xdata submenuitem=0; unsigned long xdata i8155out; unsigned char xdata main_temp,outputnumber,inputnumber; unsigned int xdata tempvar[9]; char xdata showstr[5]=" "; //new var end //定义DS12887地址 #define P12887SEC 0x7f00//12887秒地址 #define P12887SEC_ALM 0x7f01//12887秒报警地址 #define P12887MIN 0x7f02//12887分地址 #define P12887MIN_ALM 0x7f03//12887分报警地址 #define P12887HOUR 0x7f04//12887时地址 #define P12887HOUR_ALM 0x7f05//12887时报警地址 #define P12887WEEK 0x7f06//12887星期地址 #define P12887DAY 0x7f07//12887日期地址 #define P12887MONTH 0x7f08//12887月地址 #define P12887YEAR 0x7f09//12887年地址 #define P12887MCA 0x7f0a//寄存器a地址 #define P12887MCB 0x7f0b//寄存器a地址 #define P12887MCC 0x7f0c//寄存器a地址 #define P12887MCD 0x7f0d//寄存器a地址 #define P12887RAM 0x7f0e//12887不掉电RAM起始地址 void init_12887(); //DS12887初始化程序 void gettime_12887(); //取DS12887时间子程序(年月日时分) void settime_12887(); //设置DS12887时间子程序 void i8155_init(unsigned int memaddress,unsigned char command); //intel 8155 端口输出 //memaddress:8155基址; //portnum:端口号(1:PA、2:PB、3:PC) //portstatu:端口输出字 void i8155_outport(unsigned int memaddress,unsigned char portnum,unsigned char portstatu); //intel 8155 端口输入 //memaddress:8155基址; //portnum:端口号(1:PA、2:PB、3:PC) //返回值:端口状态 unsigned char i8155_inport(unsigned int memaddress,unsigned char portnum); void showinitscreen(); void init(); void timer0() interrupt 1 using 1 { unsigned char temp; //晶振为 11.0592MHZ 时计数 9216(0xdb00) 次为 10ms TH0=0xd8; TL0=0x00; temp=(XBYTE[0x7e00]&0x0f);//有键按下时 !=0x0f if(temp!=0x0f)//是否有键按下 { if(keypush==1) { keycode=~temp; if((XBYTE[0x7ee0]&0x0f)!=0x0f) { keycode=keycode&0x1f; } else if((XBYTE[0x7ed0]&0x0f)!=0x0f) { keycode=keycode&0x2f; } else if((XBYTE[0x7eb0]&0x0f)!=0x0f) { keycode=keycode&0x4f; } else if((XBYTE[0x7e30]&0x0f)!=0x0f) { keycode=keycode&0x8f; } } else { keypush=1; keycode=0; } } else { keypush=0; } } void ds12887_int1() interrupt 2 using 2 { rrtime_flag=0; ACC=XBYTE[P12887MCC]; //读寄存器C 清除中断请求标志IRQF } //************************************************************** // //主程序 // //************************************************************** void main() { i8155out=0x00; x25045_disable(); outputnumber=x25045_readbyte(OUTNUMBER); for(i=0;i { runtime=(int)0x00; runno1=0x00; starttime=x25045_readword(i*7); stoptime=x25045_readword(i*7+2); betweentime=x25045_readword(i*7+4); } x25045_init(); init(); TH0=0xd8; TL0=0x00; //初始化变量 while(1) { init_12887(); //*********************** #if DEBUG x25045_disable(); #else x25045_init(); #endif //*********************** TMOD=0x01; ET0=1; TR0=1; #if ENABLE_INTERRUPT EX1=1; PX1=1; PT0=0; #endif EA=1; //********************************** //加入限时运行功能 if((x25045_readbyte(0x01bb)==1)&&(menuitem!=0x20)&&(menuitem!=0x1b)) { tempkey=0; gettime_12887(); for(i=0;i<3;i++) { if(tempvar<=x25045_readbyte(0x01b5-3+i)) { tempkey++; } else { break; } } if(tempkey<3) { if(menuitem!=0x20) { showflag=0; } menuitem=0x20; } else { menuitem=0; } tempkey=0x50; i=0; } //********************************** //主循环开始 tm12864_reset(); x25045_resetwatchdog(); //键盘处理程序 if((keycode!=0)&&(keypush==0)) { i=0; while(i<10) { if(keycode==keyscancode) { tempkey=i; break; } else { tempkey=keycode; } i++; } } else { tempkey=0x50; } keycode=0; //屏幕显示处理 switch(menuitem) { case 0x00://自动运行状态 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } showinitscreen(); tm12864_writestr(0,0," ",0); tm12864_writestr(12,0," ",0); tm12864_writestr(0,4," ",0); tm12864_writestr(0,6," ",0); tm12864_writehz(4,6,zzyx,0); tm12864_writestr(12,6," ",0); if(tempkey==BUTTON_STOP)//进入“设置确认”菜单 { j=0; menuitem=0x01; showflag=0; } tempkey=0x50; break; case 0x01://设置确认菜单 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); tm12864_writestr(4,6," ",1); tm12864_writehz(0,6,mm,0); showflag=1; } showinitscreen(); if((j<6)&&(tempkey<0x0a)) { tm12864_writehz(0,6,mm,0); tm12864_writestr((j+4),6,"*",1); tempvar[j]=tempkey; j++; } if(j==6) { for(j=0;j<6;j++) { if(tempvar[j]!=x25045_readbyte(PASSWORD_ADDR+j)) { j=0; showflag=0; menuitem=0x00; break; } } tm12864_writestr(0,6," ",0); tm12864_writestr(6,6," ",0); tm12864_writehz(2,6,set,1); tm12864_writehz(10,6,yunxing,0); if(tempkey==BUTTON_OK) { menuitem=0x03; j=0; submenuitem=0; showflag=0; tempvar[0]=1; } } submenuitem=0; if(tempkey==BUTTON_START) { menuitem=0x00; showflag=0; } tempkey=0x50; break; case 0x02://运行确认菜单 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } showinitscreen(); switch(submenuitem) { case 0x00: 64_writehz(2,6,set,0); tm128 tm12864_writehz(10,6,yunxing,1); switch(tempkey) { case BUTTON_OK: menuitem=0x00; showflag=0; while(1){}; break; case BUTTON_STOP: case BUTTON_SLAVE: submenuitem=0x01; showflag=0; break; } break; case 0x01: tm12864_writehz(2,6,set,1); tm12864_writehz(10,6,yunxing,0); switch(tempkey) { case BUTTON_OK: menuitem=0x03; showflag=0; submenuitem=0x00; break; case BUTTON_START: case BUTTON_SLAVE: submenuitem=0; showflag=0; break; } break; } tempkey=0x50; break; case 0x03://设置菜单 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; j=0; } x25045_writestatu(0x00); // ******************************************************* //加入隐蔽菜单功能 if((j<6)&&(tempkey<0x0a)) { tempvar[j]=tempkey; j++; showstr[0]=j+0x30; showstr[1]='\0'; tm12864_writestr(15,7,showstr,0); tempkey=0x50; } if(j==6) { for(j=0;j<6;j++) { #if DEBUG tempvar[j]=x25045_readbyte(0x01a9+j); #else if(tempvar[j]!=x25045_readbyte(0x01a9+j)) { j=0; break; } #endif } if(tempkey==BUTTON_SET) { menuitem=0x1b; j=0; submenuitem=0; showflag=0; tempvar[0]=1; } } // ******************************************************* switch(submenuitem) { case 0x00: tm12864_writestr(0,0,"1 ",1); tm12864_writehz(2,0,scsd,1); tm12864_writestr(0,2,"2 ",0); tm12864_writehz(2,2,srsd,0); tm12864_writestr(0,4,"3 ",0); tm12864_writehz(2,4,lssd,0); tm12864_writestr(0,6,"4 ",0); tm12864_writehz(2,6,xtcs,0); break; case 0x01: tm12864_writestr(0,0,"1 ",0); tm12864_writehz(2,0,scsd,0); tm12864_writestr(0,2,"2 ",1); tm12864_writehz(2,2,srsd,1); tm12864_writestr(0,4,"3 ",0); tm12864_writehz(2,4,lssd,0); tm12864_writestr(0,6,"4 ",0); tm12864_writehz(2,6,xtcs,0); break; case 0x02: tm12864_writestr(0,0,"1 ",0); tm12864_writehz(2,0,scsd,0); tm12864_writestr(0,2,"2 ",0); tm12864_writehz(2,2,srsd,0); tm12864_writestr(0,4,"3 ",1); tm12864_writehz(2,4,lssd,1); tm12864_writestr(0,6,"4 ",0); tm12864_writehz(2,6,xtcs,0); break; case 0x03: tm12864_writestr(0,0,"1 ",0); tm12864_writehz(2,0,scsd,0); tm12864_writestr(0,2,"2 ",0); tm12864_writehz(2,2,srsd,0); tm12864_writestr(0,4,"3 ",0); tm12864_writehz(2,4,lssd,0); tm12864_writestr(0,6,"4 ",1); tm12864_writehz(2,6,xtcs,1); break; } switch(tempkey) { case BUTTON_START: menuitem=0x02; submenuitem=0; showflag=0; break; case BUTTON_SLAVE: if(submenuitem<0x03) { submenuitem++; } else { submenuitem=0x00; } break; case BUTTON_OK: menuitem=0x04+submenuitem; //如果密码与隐蔽选单密码相符则进入隐蔽选单 /* if(check_password(HIDEMENU)) { menuitem=0x20; }*/ submenuitem=0x00; tempvar[0]=0x00; showflag=0; break; } tempkey=0x50; break; case 0x04://输出设定菜单 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(0,0,xzhlh,0); tm12864_writestr(10,0," ",0); tm12864_writehz(14,0,hao,0); tm12864_writehz(0,2,gz,0); tm12864_writehz(10,2,fen,0); tm12864_writehz(14,2,miao,0); tm12864_writehz(0,4,tz,0); tm12864_writehz(14,4,miao,0); tm12864_writehz(0,6,jg,0);//汉字“间隔”尚未建立 tm12864_writehz(14,6,miao,0); if(submenuitem!=7) { tm12864_writehz(10,4,fen,0); tm12864_writehz(10,6,fen,0); } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<7) { submenuitem++; } else { showflag=0; submenuitem=0; tempvar[0]=0; } if((tempvar[0]>32)||(tempvar[0]==0)) { submenuitem=0; tempvar[0]=0; } else if(tempvar[2]>59) { submenuitem=2; tempvar[2]=0; } else if(tempvar[4]>59) { submenuitem=4; tempvar[4]=0; } else if(tempvar[6]>59) { submenuitem=6; tempvar[6]=0; } j=0; break; case BUTTON_STOP: submenuitem=0x00; menuitem=0x03; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取回路号 if((j<2)&&(tempkey<0x0a)) { tempvar[0]=tempvar[0]*0x0a+tempkey; j++; } showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,1); break; case 1://获取工作时间-分 showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,0); if(j==0) { if(tempvar[0]!=0) { tempvar[1]=x25045_readword((tempvar[0]*7-7)); tempvar[2]=tempvar[1]%60; tempvar[1]=tempvar[1]/60; tempvar[3]=x25045_readword((tempvar[0]*7-5)); tempvar[4]=tempvar[3]%60; tempvar[3]=tempvar[3]/60; tempvar[5]=x25045_readword((tempvar[0]*7-3)); tempvar[6]=tempvar[5]%60; tempvar[5]=tempvar[5]/60; showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,0); showstr[0]=(tempvar[3]/1000+0x30); showstr[1]=((tempvar[3]%1000)/100+0x30); showstr[2]=((tempvar[3]%100)/10+0x30); showstr[3]=(tempvar[3]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,4,showstr,0); showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,0); showstr[0]=(tempvar[5]/1000+0x30); showstr[1]=((tempvar[5]%1000)/100+0x30); showstr[2]=((tempvar[5]%100)/10+0x30); showstr[3]=(tempvar[5]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,6,showstr,0); showstr[0]=(tempvar[6]/10+0x30); showstr[1]=(tempvar[6]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,0); } else { tempvar[1]=0x00; tempvar[2]=0x00; tempvar[3]=0x00; tempvar[4]=0x00; tempvar[5]=0x00; tempvar[6]=0x00; } } if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=((tempvar[1]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[1]/1000+0x30); showstr[1]=((tempvar[1]%1000)/100+0x30); showstr[2]=((tempvar[1]%100)/10+0x30); showstr[3]=(tempvar[1]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,2,showstr,1); break; case 2://获取工作时间-秒 showstr[0]=(tempvar[1]/1000+0x30); showstr[1]=((tempvar[1]%1000)/100+0x30); showstr[2]=((tempvar[1]%100)/10+0x30); showstr[3]=(tempvar[1]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,2,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[2]=0; } tempvar[2]=tempvar[2]*0x0a+tempkey; j++; } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,1); break; case 3://获取停止时间-分 showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,0); if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[3]=0; } tempvar[3]=tempvar[3]*0x0a+tempkey; j++; } showstr[0]=(tempvar[3]/1000+0x30); showstr[1]=((tempvar[3]%1000)/100+0x30); showstr[2]=((tempvar[3]%100)/10+0x30); showstr[3]=(tempvar[3]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,4,showstr,1); break; case 4://获取停止时间-秒 showstr[0]=(tempvar[3]/1000+0x30); showstr[1]=((tempvar[3]%1000)/100+0x30); showstr[2]=((tempvar[3]%100)/10+0x30); showstr[3]=(tempvar[3]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[4]=0; } tempvar[4]=tempvar[4]*0x0a+tempkey; j++; } showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,1); break; case 5://获取间隔时间-分 showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,0); if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[5]=0; } tempvar[5]=tempvar[5]*0x0a+tempkey; j++; } showstr[0]=(tempvar[5]/1000+0x30); showstr[1]=((tempvar[5]%1000)/100+0x30); showstr[2]=((tempvar[5]%100)/10+0x30); showstr[3]=(tempvar[5]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,6,showstr,1); break; case 6://获取间隔时间-秒 showstr[0]=(tempvar[5]/1000+0x30); showstr[1]=((tempvar[5]%1000)/100+0x30); showstr[2]=((tempvar[5]%100)/10+0x30); showstr[3]=(tempvar[5]%10+0x30); showstr[4]='\0'; tm12864_writestr(6,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[6]=0; } tempvar[6]=tempvar[6]*0x0a+tempkey; j++; } showstr[0]=(tempvar[6]/10+0x30); showstr[1]=(tempvar[6]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,1); break; case 7://确认存储菜单 tm12864_writestr(12,6,showstr,0); tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { tempvar[1]=tempvar[1]*60; tempvar[1]=tempvar[1]+tempvar[2]; tempvar[3]=tempvar[3]*60; tempvar[3]=tempvar[3]+tempvar[4]; tempvar[5]=tempvar[5]*60; tempvar[5]=tempvar[5]+tempvar[6]; x25045_init(); //保存工作时间 x25045_writeenable(); x25045_writeword(tempvar[1],(tempvar[0]*7-7)); //保存停止时间 x25045_writeenable(); x25045_writeword(tempvar[3],(tempvar[0]*7-5)); //保存间隔时间 x25045_writeenable(); x25045_writeword(tempvar[5],(tempvar[0]*7-3)); submenuitem=0; showflag=0; tempvar[0]=0x00; j=0; } break; } tempkey=0x50; break; case 0x05://设置输入回路 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(2,0,sdsrhl,0); tm12864_writehz(0,2,xzhlh,0); tm12864_writehz(14,2,hao,0); tm12864_writehz(0,4,lj,0);//连接 if(submenuitem!=0x03) { tm12864_writehz(6,4,hschl,0);//号回路 } tm12864_writehz(0,6,gn,0);//功能 tm12864_writestr(4,6,": ",0); switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<3) { submenuitem++; } else { submenuitem=0; showflag=0; tm12864_writehz(6,4,hschl,0); tm12864_writestr(4,6,": ",0); tempvar[0]=0; } if((tempvar[0]==0)||(tempvar[0]>76)) { tempvar[0]=0; submenuitem=0; } else if((tempvar[1]==0)||((tempvar[1]>36)&&(tempvar[1]!=99))) { tempvar[1]=0; submenuitem=1; } j=0; break; case BUTTON_STOP: menuitem=0x03; submenuitem=0x01; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取回路号 if((j<2)&&(tempkey<0x0a)) { tempvar[0]=tempvar[0]*0x0a+tempkey; j++; } showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,1); break; case 1://获取输出回路号 showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,0); if(j==0) { if(tempvar[0]!=0) { tempvar[1]=x25045_readbyte(tempvar[0]*2-2+0x100); tempvar[2]=x25045_readbyte(tempvar[0]*2-1+0x100); if(tempvar[2]==1) { tm12864_writehz(6,6,qdsc,0); } else { tm12864_writehz(6,6,tzsc,0); } } else { tempvar[1]=0x00; tempvar[2]=0x00; } } if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=tempvar[1]*0x0a+tempkey; j++; } showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,4,showstr,1); break; case 2://获取功能 tm12864_writestr(4,4,showstr,0); if(tempvar[2]==1) { tm12864_writehz(6,6,qdsc,1); } else { tm12864_writehz(6,6,tzsc,1); } if(tempkey==BUTTON_SET) { if(tempvar[2]==0) { tempvar[2]=1; } else { tempvar[2]=0; } } break; case 3://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { //保存参数 x25045_init(); x25045_writeenable(); x25045_writebyte(tempvar[1],(0x100+tempvar[0]*2-2)); x25045_writeenable(); x25045_writebyte(tempvar[2],(0x100+tempvar[0]*2-1)); if(tempvar[1]==99)//加入指向联动回路处理 { x25045_writeenable(); x25045_writebyte(tempvar[0],0x00ff); } submenuitem=0; showflag=0; tempvar[0]=0; j=0; } break; } break; case 0x06://联锁功能选择 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(4,0,lssd,0); switch(submenuitem) { case 0x00: tm12864_writehz(0,2,ldzsd,1); tm12864_writehz(0,4,hszsd,0); break; case 0x01: tm12864_writehz(0,2,ldzsd,0); tm12864_writehz(0,4,hszsd,1); break; } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<1) { submenuitem++; } else { submenuitem=0; showflag=0; } break; case BUTTON_OK: menuitem=0x0b+submenuitem; submenuitem=0x00; showflag=0; for(i=0;i<9;i++) { tempvar=0; } j=0; break; case BUTTON_STOP: menuitem=0x03; submenuitem=0x02; showflag=0; break; } break; case 0x07://系统参数 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(4,0,xtcs,0); switch(submenuitem) { case 0x00: tm12864_writehz(0,2,srscds,1);//输入输出点数 tm12864_writehz(0,4,xtsj,0);//系统时间 tm12864_writehz(0,6,mm,0); break; case 0x01: tm12864_writehz(0,2,srscds,0);//输入输出点数 tm12864_writehz(0,4,xtsj,1);//系统时间 tm12864_writehz(0,6,mm,0); break; case 0x02: tm12864_writehz(0,2,srscds,0);//输入输出点数 tm12864_writehz(0,4,xtsj,0);//系统时间 tm12864_writehz(0,6,mm,1); break; } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<2) { submenuitem++; } else { submenuitem=0; showflag=0; } break; case BUTTON_OK: menuitem=0x08+submenuitem; submenuitem=0x00; showflag=0; tempvar[0]=0; if(menuitem==0x09) { gettime_12887(); } j=0; break; case BUTTON_STOP: menuitem=0x03; submenuitem=0x03; showflag=0; break; } break; case 0x08://输入输出点数 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(2,0,srscds,0); if(submenuitem!=0x02) { tm12864_writehz(0,4,srds,0);//输入点数 tm12864_writehz(0,6,scds,0);//输出点数 } tm12864_writehz(14,4,dian,0); tm12864_writehz(14,6,dian,0); switch(submenuitem) { case 0x00: if(j==0) { tempvar[1]=x25045_readbyte(INNUMBER); tempvar[2]=x25045_readbyte(OUTNUMBER); showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,0); } if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=tempvar[1]*0x0a+tempkey; j++; } showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,1); break; case 0x01: showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[2]=0; } tempvar[2]=tempvar[2]*0x0a+tempkey; j++; } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,1); break; case 0x02://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { //保存参数 x25045_init(); x25045_writeenable(); x25045_writebyte(tempvar[1],INNUMBER); x25045_writeenable(); x25045_writebyte(tempvar[2],OUTNUMBER); menuitem=0x07; submenuitem=0; showflag=0; tempvar[0]=0; j=0; } break; } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<2) { submenuitem++; } else { submenuitem=0; showflag=0; tempvar[0]=0; } if(tempvar[1]>12) { tempvar[1]=0; submenuitem=0; } else if((tempvar[2]>32)||(tempvar[2]==0)) { tempvar[2]=0; submenuitem=1; } j=0; break; case BUTTON_STOP: menuitem=0x07; submenuitem=0x00; showflag=0; tempvar[0]=0; j=0; break; } break; case 0x09://系统时间 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; showstr[0]=(tempvar[0]/1000+0x30); showstr[1]=((tempvar[0]%1000)/100+0x30); showstr[2]=((tempvar[0]%100)/10+0x30); showstr[3]=(tempvar[0]%10+0x30); showstr[4]='\0'; tm12864_writestr(0,4,showstr,0); showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(6,4,showstr,0); showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(10,4,showstr,0); showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(2,6,showstr,0); showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(6,6,showstr,0); } tm12864_writehz(4,0,xtsj,0); tm12864_writehz(12,4,ri,0); if(submenuitem!=5) { tm12864_writehz(4,4,nian,0); tm12864_writehz(8,4,yue,0); tm12864_writehz(4,6,shi,0); tm12864_writehz(8,6,fen,0); } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<5) { submenuitem++; } else { showflag=0; submenuitem=0; gettime_12887(); } if(tempvar[0]<2000) { tempvar[0]=2001; submenuitem=0; } else if((tempvar[1]>12)||(tempvar[1]==0)) { tempvar[1]=0; submenuitem=1; } else if((tempvar[2]>31)||(tempvar[2]==0)) { tempvar[2]=0; submenuitem=2; } else if(tempvar[3]>24) { tempvar[3]=0; submenuitem=3; } else if(tempvar[4]>59) { tempvar[4]=0; submenuitem=4; } j=0; break; case BUTTON_STOP: submenuitem=0x01; menuitem=0x07; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取年 if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[0]=0; } tempvar[0]=((tempvar[0]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[0]/1000+0x30); showstr[1]=((tempvar[0]%1000)/100+0x30); showstr[2]=((tempvar[0]%100)/10+0x30); showstr[3]=(tempvar[0]%10+0x30); showstr[4]='\0'; tm12864_writestr(0,4,showstr,1); break; case 1://获取月 showstr[0]=(tempvar[0]/1000+0x30); showstr[1]=((tempvar[0]%1000)/100+0x30); showstr[2]=((tempvar[0]%100)/10+0x30); showstr[3]=(tempvar[0]%10+0x30); showstr[4]='\0'; tm12864_writestr(0,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=((tempvar[1]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(6,4,showstr,1); break; case 2://获取日 showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(6,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[2]=0; } tempvar[2]=((tempvar[2]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(10,4,showstr,1); break; case 3://获取时 showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(10,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[3]=0; } tempvar[3]=((tempvar[3]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(2,6,showstr,1); break; case 4://获取分 showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(2,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[4]=0; } tempvar[4]=((tempvar[4]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(6,6,showstr,1); break; case 5://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { settime_12887(); menuitem=0x07; submenuitem=1; showflag=0; j=0; } break; } tempkey=0x50; break; break; case 0x0a://密码 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); } tm12864_writehz(2,0,ymm,0); tm12864_writestr(8,0,": ",0); if(submenuitem!=2) { tm12864_writehz(2,4,xmm,0); tm12864_writestr(8,4,": ",0); } switch(submenuitem) { case 0://获取旧密码 if(showflag==0) { tm12864_writestr(0,2," ",1); showflag=1; } if((j<6)&&(tempkey<0x0a)) { tm12864_writestr(j,2,"*",1); tempvar[j]=tempkey; j++; } break; case 1://获取新密码 tm12864_writestr(0,2,"******",0); if(showflag==0) { tm12864_writestr(0,6," ",1); showflag=1; } if((j<6)&&(tempkey<0x0a)) { tm12864_writestr(j,6,"*",1); tempvar[j]=tempkey; j++; } break; case 2://确认存储菜单 tm12864_writestr(12,6," ",0); tm12864_writehz(4,5,bmp1,0); showflag=1; if(tempkey==BUTTON_OK) { x25045_init(); for(i=0;i<6;i++) { x25045_writeenable(); x25045_writebyte(tempvar,(PASSWORD_ADDR+i)); tempvar=0; } menuitem=0x07; submenuitem=2; showflag=0; j=0; } break; } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<2) { if(submenuitem==0x00) { for(i=0;i<6;i++) { if(tempvar!=x25045_readbyte(PASSWORD_ADDR+i)) { goto jp; break; } } } submenuitem++; } else { submenuitem=0; } jp:showflag=0; j=0; break; case BUTTON_STOP: submenuitem=2; menuitem=0x07; showflag=0; break; } break; case 0x0b://联动回路设定 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(0,0,xzldz,0); tm12864_writestr(10,0," ",0); tm12864_writehz(14,0,zu,0); tm12864_writehz(0,2,xlhlld,0); tm12864_writehz(2,4,hao,0); tm12864_writehz(6,4,hao,0); tm12864_writehz(10,4,hao,0); tm12864_writehz(14,4,hao,0); tm12864_writehz(2,6,hao,0); tm12864_writehz(6,6,hao,0); tm12864_writehz(10,6,hao,0); tm12864_writehz(14,6,hao,0); if(submenuitem!=7) { } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<9) { submenuitem++; } else { showflag=0; submenuitem=0; tempvar[0]=0; } if(tempvar[0]>4) { tempvar[0]=0; submenuitem=0; } else { for(i=1;i<9;i++) { if(tempvar>32) { tempvar=0; submenuitem=i; break; } } } j=0; break; case BUTTON_STOP: submenuitem=0x00; menuitem=0x06; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取回路号 if((j<2)&&(tempkey<0x0a)) { tempvar[0]=tempvar[0]*0x0a+tempkey; j++; } showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,1); break; case 1://获取回路号1 showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,0); if(j==0) { if(tempvar[0]!=0) { for(i=1;i<9;i++) { tempvar=x25045_readbyte((0x01bc+(tempvar[0]-1)*9+i-1)); } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,4,showstr,0); showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,4,showstr,0); showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,0); showstr[0]=(tempvar[5]/10+0x30); showstr[1]=(tempvar[5]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,0); showstr[0]=(tempvar[6]/10+0x30); showstr[1]=(tempvar[6]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,0); showstr[0]=(tempvar[7]/10+0x30); showstr[1]=(tempvar[7]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,0); showstr[0]=(tempvar[8]/10+0x30); showstr[1]=(tempvar[8]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,0); } else { tempvar[1]=0x00; tempvar[2]=0x00; tempvar[3]=0x00; tempvar[4]=0x00; tempvar[5]=0x00; tempvar[6]=0x00; } } if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=((tempvar[1]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,4,showstr,1); break; case 2://获取回路号2 showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[2]=0; } tempvar[2]=tempvar[2]*0x0a+tempkey; j++; } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,4,showstr,1); break; case 3://获取回路号3 showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[3]=0; } tempvar[3]=tempvar[3]*0x0a+tempkey; j++; } showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,4,showstr,1); break; case 4://获取回路号4 showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[4]=0; } tempvar[4]=tempvar[4]*0x0a+tempkey; j++; } showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,1); break; case 5://获取回路号5 showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,4,showstr,0); if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[5]=0; } tempvar[5]=tempvar[5]*0x0a+tempkey; j++; } showstr[0]=(tempvar[5]/10+0x30); showstr[1]=(tempvar[5]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,1); break; case 6://获取回路号6 showstr[0]=(tempvar[5]/10+0x30); showstr[1]=(tempvar[5]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[6]=0; } tempvar[6]=tempvar[6]*0x0a+tempkey; j++; } showstr[0]=(tempvar[6]/10+0x30); showstr[1]=(tempvar[6]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,1); break; case 7://获取回路号7 showstr[0]=(tempvar[6]/10+0x30); showstr[1]=(tempvar[6]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[7]=0; } tempvar[7]=tempvar[7]*0x0a+tempkey; j++; } showstr[0]=(tempvar[7]/10+0x30); showstr[1]=(tempvar[7]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,1); break; case 8://获取回路号8 showstr[0]=(tempvar[7]/10+0x30); showstr[1]=(tempvar[7]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[8]=0; } tempvar[8]=tempvar[8]*0x0a+tempkey; j++; } showstr[0]=(tempvar[8]/10+0x30); showstr[1]=(tempvar[8]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,1); break; case 9://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { if(tempvar[0]!=0) { x25045_init(); //保存联动回路 for(i=0;i<8;i++) { x25045_writeenable(); x25045_writebyte(tempvar[i+1],(0x01bc+(tempvar[0]-1)*9+i)); } } submenuitem=0; showflag=0; tempvar[0]=0x00; j=0; } break; } tempkey=0x50; break; case 0x0c://互锁回路设定 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(0,0,xzhsz,0); tm12864_writestr(10,0," ",0); tm12864_writehz(14,0,zu,0); tm12864_writehz(0,2,dang,0); tm12864_writehz(4,2,hhlqd,0); tm12864_writehz(0,4,tzxlhl,0); tm12864_writehz(2,6,hao,0); tm12864_writehz(6,6,hao,0); tm12864_writehz(10,6,hao,0); tm12864_writehz(14,6,hao,0); if(submenuitem!=7) { } switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<6) { submenuitem++; } else { showflag=0; submenuitem=0; tempvar[0]=0; } if(tempvar[0]>6) { tempvar[0]=0; submenuitem=0; } else { for(i=1;i<6;i++) { if(tempvar>32) { tempvar=0; submenuitem=i; break; } } } j=0; break; case BUTTON_STOP: submenuitem=0x01; menuitem=0x06; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取互锁组 if((j<2)&&(tempkey<0x0a)) { tempvar[0]=tempvar[0]*0x0a+tempkey; j++; } showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,1); break; case 1://获取回路号1 showstr[0]=(tempvar[0]/0x0a+0x30); showstr[1]=(tempvar[0]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(12,0,showstr,0); if(j==0) { if(tempvar[0]!=0) { for(i=1;i<6;i++) { tempvar=x25045_readbyte((0x01e0+(tempvar[0]-1)*9+i-1)); } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,0); showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,0); showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,0); showstr[0]=(tempvar[5]/10+0x30); showstr[1]=(tempvar[5]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,0); } else { tempvar[1]=0x00; tempvar[2]=0x00; tempvar[3]=0x00; tempvar[4]=0x00; tempvar[5]=0x00; tempvar[6]=0x00; } } if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=((tempvar[1]*0x0a)+(int)tempkey); j++; } showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(2,2,showstr,1); break; case 2://获取回路号2 showstr[0]=(tempvar[1]/10+0x30); showstr[1]=(tempvar[1]%10+0x30); showstr[2]='\0'; tm12864_writestr(2,2,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[2]=0; } tempvar[2]=tempvar[2]*0x0a+tempkey; j++; } showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,1); break; case 3://获取回路号3 showstr[0]=(tempvar[2]/10+0x30); showstr[1]=(tempvar[2]%10+0x30); showstr[2]='\0'; tm12864_writestr(0,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[3]=0; } tempvar[3]=tempvar[3]*0x0a+tempkey; j++; } showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,1); break; case 4://获取回路号4 showstr[0]=(tempvar[3]/10+0x30); showstr[1]=(tempvar[3]%10+0x30); showstr[2]='\0'; tm12864_writestr(4,6,showstr,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[4]=0; } tempvar[4]=tempvar[4]*0x0a+tempkey; j++; } showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,1); break; case 5://获取回路号5 showstr[0]=(tempvar[4]/10+0x30); showstr[1]=(tempvar[4]%10+0x30); showstr[2]='\0'; tm12864_writestr(8,6,showstr,0); if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[5]=0; } tempvar[5]=tempvar[5]*0x0a+tempkey; j++; } showstr[0]=(tempvar[5]/10+0x30); showstr[1]=(tempvar[5]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,6,showstr,1); break; case 6://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { if(tempvar[0]!=0) { x25045_init(); //保存互锁回路 for(i=0;i<8;i++) { x25045_writeenable(); x25045_writebyte(tempvar[i+1],(0x01e0+(tempvar[0]-1)*9+i)); } } submenuitem=0; showflag=0; tempvar[0]=0x00; j=0; } break; } tempkey=0x50; break;; case 0x1a://手动处理 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(4,0,sdyx,0); tm12864_writehz(0,2,xzschl,0); tm12864_writehz(14,2,hao,0); if((j<2)&&(tempkey<0x0a)) { if(j==0) { tempvar[0]=0; } tempvar[0]=tempvar[0]*0x0a+tempkey; j++; } showstr[0]=(tempvar[0]/10+0x30); showstr[1]=(tempvar[0]%10+0x30); showstr[2]='\0'; tm12864_writestr(12,2,showstr,1); if((tempvar[0]!=0)&&(tempvar[0]<33)) { switch(tempkey) { case BUTTON_START: tm12864_writehz(6,6,qd,0); i8155out=i8155out|((unsigned long)0x00000001<<(tempvar[0]-1)); j=2; break; case BUTTON_STOP: tm12864_writehz(6,6,tz,0); i8155out=i8155out&(~((unsigned long)0x00000001<<(tempvar[0]-1))); j=2; break; case BUTTON_SET: tm12864_writestr(6,6," ",0); j=0; tempvar[0]=0; break; } } break; case 0x1b://隐蔽功能,尚未加入 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(0,0,ckgn,0); tm12864_writehz(0,2,cksj,0); tm12864_writehz(4,4,nian,0); tm12864_writehz(8,4,yue,0); tm12864_writehz(12,4,ri,0); tm12864_writehz(0,6,mm,0); //****************************************** switch(tempkey) { case BUTTON_SLAVE: if(submenuitem<5) { submenuitem++; } else { submenuitem=0; } if(submenuitem==4) { tm12864_writestr(6,6," ",1); } j=0; break; case BUTTON_STOP: menuitem=0x03; submenuitem=0x01; showflag=0; tempvar[0]=0; j=0; break; } switch(submenuitem) { case 0://获取功能 if(tempvar[0]==1) { tm12864_writehz(10,0,kai,1); } else { tm12864_writehz(10,0,guan,1); } if(tempkey==BUTTON_SET) { if(tempvar[0]==0) { tempvar[0]=1; } else { tempvar[0]=0; } } break; case 1://获取年 if(tempvar[0]==1) { tm12864_writehz(10,0,kai,0); } else { tm12864_writehz(10,0,guan,0); } if((j<4)&&(tempkey<0x0a)) { if(j==0) { tempvar[1]=0; } tempvar[1]=tempvar[1]*0x0a+tempkey; j++; } showstr[0]=(tempvar[1]/1000+0x30); showstr[1]=((tempvar[1]%1000)/100+0x30); showstr[2]=((tempvar[1]%100)/10+0x30); showstr[3]=(tempvar[1]%10+0x30); showstr[4]='\0'; tm12864_writestr(0,4,showstr,1); break; case 2://获取月 showstr[0]=(tempvar[1]/1000+0x30); showstr[1]=((tempvar[1]%1000)/100+0x30); showstr[2]=((tempvar[1]%100)/10+0x30); showstr[3]=(tempvar[1]%10+0x30); showstr[4]='\0'; tm12864_writestr(0,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { tempvar[2]=tempvar[2]*0x0a+tempkey; j++; } showstr[0]=(tempvar[2]/0x0a+0x30); showstr[1]=(tempvar[2]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(6,4,showstr,1); break; case 3://获取日 showstr[0]=(tempvar[2]/0x0a+0x30); showstr[1]=(tempvar[2]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(6,4,showstr,0); if((j<2)&&(tempkey<0x0a)) { tempvar[3]=tempvar[3]*0x0a+tempkey; j++; } showstr[0]=(tempvar[3]/0x0a+0x30); showstr[1]=(tempvar[3]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(10,4,showstr,1); break; case 4://获取密码 showstr[0]=(tempvar[3]/0x0a+0x30); showstr[1]=(tempvar[3]%0x0a+0x30); showstr[2]='\0'; tm12864_writestr(10,4,showstr,0); if((j<6)&&(tempkey<0x0a)) { tm12864_writestr(j+6,6,"*",1); tempvar[j+4]=tempkey; j++; } break; case 5://确认存储菜单 tm12864_writehz(4,5,bmp1,0); if(tempkey==BUTTON_OK) { //保存参数 x25045_init(); x25045_writeenable(); x25045_writebyte(tempvar[0],(0x1bb)); x25045_writeenable(); x25045_writeword(tempvar[1],(0x1b5)); x25045_writeenable(); x25045_writebyte(tempvar[2],(0x1b7)); x25045_writeenable(); x25045_writebyte(tempvar[3],(0x1b8)); x25045_init(); for(i=0;i<6;i++) { x25045_writeenable(); x25045_writebyte(tempvar[i+4],(0x01a9+i)); tempvar=0; } submenuitem=0; showflag=0; tempvar[0]=0; j=0; } break; } //****************************************** break; case 0x20: // ******************************************************* //加入隐蔽菜单功能 tm12864_reset(); if(showflag==0) { tm12864_fillscreen(0x00); showflag=1; } tm12864_writehz(4,2,sbgz,0); if((j<6)&&(tempkey<0x0a)) { tempvar[j]=tempkey; j++; showstr[0]=j+0x30; showstr[1]='\0'; tm12864_writestr(15,7,showstr,0); tempkey=0x50; } if(j==6) { for(j=0;j<6;j++) { #if DEBUG tempvar[j]=x25045_readbyte(0x01a9+j); #else if(tempvar[j]!=x25045_readbyte(0x01a9+j)) { j=0; break; } #endif } if(tempkey==BUTTON_SET) { menuitem=0x1b; j=0; submenuitem=0; showflag=0; tempvar[0]=1; } } // ******************************************************* break; case 0xb1://菜单循环处理 menuitem=0x01; showflag=0; break; default: break; } tempkey=0x50; //屏幕显示处理结束 //自动运行 if(menuitem<2) { //************************ //获取输入,确定运行模式(手动/自动) main_temp=x25045_readbyte(0x00ff)-1; if(main_temp<6) { tempkey=(~i8155_inport(I8155A,PC))>>main_temp; } else { tempkey=(~i8155_inport(I8155B,PC))>>(main_temp-6); } if((tempkey&0x01)==1) { if(x25045_readbyte(0x0100+main_temp*2+1)==0) { menuitem=0x1a; showflag=0; } } else { if(x25045_readbyte(0x0100+main_temp*2+1)==1) { menuitem=0x1a; showflag=0; } } //************************ if(rrtime_flag==0)//获取运行参数 { for(i=0;i { runtime++; } rrtime_flag=1; //获取输入 main_temp=~i8155_inport(I8155B,PC); inputnumber=x25045_readbyte(INNUMBER); if(main_temp!=0x00) { for(i=6;i { if(((main_temp>>(i-6))&0x01)==1) { tempkey=x25045_readbyte(0x100+i*2)-1; if(tempkey<32) { runno1[tempkey]=1; if(x25045_readbyte(0x100+i*2+1)==1)//start { runtime[tempkey]=0; } else { runtime[tempkey]=starttime[tempkey]; } } else if(tempkey<36) { linkrun[tempkey-32]=1; } } } } if(inputnumber>6) { inputnumber=6; } main_temp=~i8155_inport(I8155A,PC); if(main_temp!=0x00) { for(i=0;i { tempkey=x25045_readbyte(0x100+i*2)-1; if(((main_temp>>i)&0x01)==1) { if(tempkey<32) { runno1[tempkey]=1; if(x25045_readbyte(0x100+i*2+1)==1) { runtime[tempkey]=0; } else { runtime[tempkey]=starttime[tempkey]; } } else if(tempkey<36) { if(x25045_readbyte(0x100+i*2+1)==1) { linkrun[tempkey-32]=1; } else { linkrun[tempkey-32]=2; } } } else { if(tempkey>31) { linkrun[tempkey-32]=0; } } } } //加入联动回路处理 for(i=0;i<4;i++) { //第 i 组联动回路处理 tempkey=x25045_readbyte(0x01bc+i*9); if(linkrun==1) { if(linkrunno1!=1) {//第1次 循环,如果输入信号存在,则令所有联动回路处于起始状态; if((runtime[tempkey]>=starttime[tempkey])||(runno1[tempkey]!=1)) { for(tempkey=0;tempkey<8;tempkey++) { tempvar[6]=x25045_readbyte(0x01bc+i*9+tempkey); if((tempvar[6]!=0)&&(tempvar<33)) { runtime[tempvar[6]-1]=0; runno1[tempvar[6]-1]=0; } } } linkrunno1=1; } else {//第2次循环后,如果输入信号仍旧存在,且电机处于运行状态,则令电机运行时间=0; for(tempkey=0;tempkey<8;tempkey++) { tempvar[6]=x25045_readbyte(0x01bc+i*9+tempkey); if((tempvar[6]!=0)&&(tempvar<33)) { if(runno1[tempvar[6]-1]==1) { runtime[tempvar[6]-1]=0; } } } } } else if(linkrun==2)//停止 {// if(linkrunno1!=2) {//第1次循环,如果输入信号存在,则令所有联动回路处于起始停止状态; if((runtime[tempkey]=starttime[tempvar[6]-1])) { runno1[tempvar[6]-1]=0; runtime[tempvar[6]-1]=0; } } } } else if(linkrun==0)//如果无输入信号,则复位联动运行次数 { linkrunno1=0; } } //联动回路处理结束 } else { //自动运行 for(i=0;i { if(runno1==0)//第一次运行 { main_temp=(i*7)+4; if(runtime>betweentime) { i8155out=i8155out&(~((unsigned long)0x00000001< runtime=0x00; runno1=1; } } else { if(runtime { i8155out=i8155out|((unsigned long)0x00000001< } else if(runtime>(starttime+stoptime)) { i8155out=i8155out&(~((unsigned long)0x00000001< runtime=0x00; } else { i8155out=i8155out&(~((unsigned long)0x00000001< } } } } //互锁回路处理 for(i=0;i<6;i++) { tempkey=x25045_readbyte(0x01e0+i*5); if((tempkey!=0)&&(tempkey<33)) { if((runtime[tempkey]>main_temp; } else { tempkey=(~i8155_inport(I8155B,PC))>>(main_temp-6); } if((tempkey&0x01)==1) { if(x25045_readbyte(0x0100+main_temp*2+1)==1) { menuitem=0x0; showflag=0; } } else { if(x25045_readbyte(0x0100+main_temp*2+1)==0) { menuitem=0; showflag=0; } } if(menuitem==0) { i8155out=(long)0; } //************************ } else { i8155out=(long)0x00; for(i=0;i<32;i++) { runtime=0x00; } } tempkey=0x50; i8155_init(I8155A,0x03); i8155_init(I8155B,0x03); //outportall(); i8155_outport(I8155A,PA,((unsigned char)i8155out)); i8155_outport(I8155A,PB,((unsigned char)(i8155out>>8))); i8155_outport(I8155B,PA,((unsigned char)(i8155out>>16))); i8155_outport(I8155B,PB,((unsigned char)(i8155out>>24))); } } void i8155_init(unsigned int memaddress,unsigned char command) { /* 8155初始化 */ XBYTE[memaddress+0x100]=command; /*设置8155各口功能 */ } //intel 8155 端口输出 //memaddress:8155基址; //portnum:端口号(1:PA、2:PB、3:PC) //portstatu:端口输出字 void i8155_outport(unsigned int memaddress,unsigned char portnum,unsigned char portsdata) { XBYTE[(memaddress+0x100+portnum)]=portsdata; } //intel 8155 端口输入 //memaddress:8155基址; //portnum:端口号(1:PA、2:PB、3:PC) //返回值:端口状态 unsigned char i8155_inport(unsigned int memaddress,unsigned char portnum) { return(XBYTE[(memaddress+0x100+portnum)]); } //初始化 void init() { tm12864_reset(); tm12864_fillscreen(0x00); x25045_writestatu(0x0C); i8155_init(I8155A,0x03);//初始化8155Apa,pb输出,pc输入; i8155_init(I8155B,0x03);//初始化8155B pa,pb输出,pc输入 } void showinitscreen() { unsigned char initi; //显示初始屏幕 tm12864_writestr(4,0,"HJD 95m",0); //显示平方符号 for(initi=0;initi<16;initi++) { if(initi< tm12864_writedata(88+initi,0,p2[initi]); else tm12864_writedata(88-8+initi,1,p2[initi]); } //显示平方符号结束 tm12864_writehz(0,2,gyjdccsb,0); } /******************************************************************* 初始化12887子程序 *******************************************************************/ void init_12887() { XBYTE[P12887MCA]=0x2F; //0 010 1111 //0 允许读写时标寄存器 //010 启动DS12887内部晶振工作,00X 晶振停止工作 //1111 中断周期时间设为500ms ACC=XBYTE[P12887MCC]; //读寄存器C 清除中断请求标志IRQF ACC=XBYTE[P12887MCD]; //读寄存器D 置VRT=1,内部资源可用 // XBYTE[P12887MCB]=0x06; //0 000 0 1 1 0 禁止中断 //P12887SEC_ALM= 0xff;//秒报警 XBYTE[P12887MCB]=0x16; //0 001 0 1 1 0 //0 启动芯片正常工作,为1时停止工作 //001 允许更新周期结束中断有效(UIE=1) //0 不许方波输出 //1 时标以BIN码示 //1 24小时制 //0 不进行夏令时转换 } /******************************************************************* 读取12887时间子程序(年月日时分) *******************************************************************/ void gettime_12887() { unsigned char uip; do { uip=XBYTE[P12887MCA]; uip=uip>>7; } while(uip); //判UIP位,直到UIP=0方可操作时标寄存器 tempvar[0]=XBYTE[P12887YEAR]; if(tempvar[0]>99) { tempvar[0]=2001; } else { tempvar[0]=tempvar[0]+2000; } tempvar[1]=XBYTE[P12887MONTH]; if(tempvar[1]>12) tempvar[1]=1; tempvar[2]=XBYTE[P12887DAY]; if(tempvar[2]>31) tempvar[2]=1; tempvar[3]=XBYTE[P12887HOUR]; if(tempvar[3]>23) tempvar[3]=0; tempvar[4]=XBYTE[P12887MIN]; if(tempvar[4]>59) tempvar[4]=0; tempvar[5]=XBYTE[P12887SEC]; if(tempvar[5]>59) tempvar[5]=0; } /******************************************************************* 设置12887时间子程序 *******************************************************************/ void settime_12887() { XBYTE[P12887MCB] =0x80; //SET=1,芯片停止工作,此时可编程时标寄存器 XBYTE[P12887YEAR] =(unsigned char)(tempvar[0]-2000); XBYTE[P12887MONTH]=(unsigned char)tempvar[1]; XBYTE[P12887DAY] =(unsigned char)tempvar[2]; XBYTE[P12887HOUR] =(unsigned char)tempvar[3]; XBYTE[P12887MIN] =(unsigned char)tempvar[4]; XBYTE[P12887SEC] =(unsigned char)tempvar[5]; init_12887(); }
/
本文档为【一个实际使用的的LCD汉字显示多屏多层菜单 程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索