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

📄 lcd多级菜单.txt

📁 c51经典子程序代码全集
💻 TXT
📖 第 1 页 / 共 4 页
字号:
} 
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;  

原程序6 [huxiangming] [57次] 01-11-16 下午 10:43:28 
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<outputnumber;i++) 
   { 
   runtime++; 
   } 
   rrtime_flag=1; 
   //获取输入 

main_temp=~i8155_inport(I8155B,PC); 
inputnumber=x25045_readbyte(INNUMBER); 
if(main_temp!=0x00) 
{ 
for(i=6;i<inputnumber;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<inputnumber;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[tempkey])&&(runno1[tempkey]==1)) 
   { 
   tempvar[7]=tempkey; 
   for(tempkey=0;tempkey<8;tempkey++) 
   { 
   tempvar[6]=x25045_readbyte(0x01bc+i*9+tempkey); 
   if((tempvar[6]!=0)&&(tempvar<33)) 
   { 
   runtime[tempvar[6]-1]=starttime[tempvar[6]-1]-starttime[tempvar[7]; 
   } 
   } 
   } 
   linkrunno1=2; 
   } 
   else 
   {//第2次循环后,如果输入信号仍旧存在,且电机处于运行状态,则令电机运行时间
=0; 
   for(tempkey=0;tempkey<8;tempkey++) 
   { 
   tempvar[6]=x25045_readbyte(0x01bc+i*9+tempkey); 
   if((tempvar[6]!=0)&&(tempvar<33)&&(runtime[tempvar[6]-1]>=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<outputnumber;i++) 
{ 
if(runno1==0)//第一次运行 
{ 
main_temp=(i*7)+4; 
if(runtime>betweentime) 
{ 
i8155out=i8155out&(~((unsigned long)0x00000001<<i)); 
runtime=0x00; 
runno1=1; 
} 
} 
else 
{ 
if(runtime<starttime) 
{ 
i8155out=i8155out|((unsigned long)0x00000001<<i); 
} 
else if(runtime>(starttime+stoptime)) 
{ 
i8155out=i8155out&(~((unsigned long)0x00000001<<i)); 
runtime=0x00; 
} 
else 
{ 
i8155out=i8155out&(~((unsigned long)0x00000001<<i)); 
} 
} 
} 
} 
//互锁回路处理 
   for(i=0;i<6;i++) 
   { 
   tempkey=x25045_readbyte(0x01e0+i*5); 
   if((tempkey!=0)&&(tempkey<33)) 
   { 
   if((runtime[tempkey]<starttime[tempkey])&&(runno1[tempkey]==1)) 
   { 
   for(tempkey=0;tempkey<4;tempkey++) 
   { 
   tempvar[6]=x25045_readbyte(0x01e0+i*5+tempkey); 
   if((tempvar[6]!=0)&&(tempvar<33)) 
   { 
   runtime[tempvar[6]=starttime[tempvar[6]; 
   runno1[tempvar[6]=1; 
   } 
   } 
   } 
   } 
   } 
   //互锁回路处理结束 
i=0; 
   } 
   else if(menuitem==0x1a)//手动处理 
   { 
       //************************ 
   //获取输入,确定运行模式(手动/自动) 
   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)==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); 

}  

原程序7 [huxiangming] [61次] 01-11-16 下午 10:44:06 






/******************************************************************* 

                      初始化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(); 
} 



 

 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2002 

⌨️ 快捷键说明

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