📄 lcd多级菜单.txt
字号:
}
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 + -