lcd的多屏多层菜单程序.docx

上传人:b****6 文档编号:4696583 上传时间:2022-12-07 格式:DOCX 页数:56 大小:27.17KB
下载 相关 举报
lcd的多屏多层菜单程序.docx_第1页
第1页 / 共56页
lcd的多屏多层菜单程序.docx_第2页
第2页 / 共56页
lcd的多屏多层菜单程序.docx_第3页
第3页 / 共56页
lcd的多屏多层菜单程序.docx_第4页
第4页 / 共56页
lcd的多屏多层菜单程序.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

lcd的多屏多层菜单程序.docx

《lcd的多屏多层菜单程序.docx》由会员分享,可在线阅读,更多相关《lcd的多屏多层菜单程序.docx(56页珍藏版)》请在冰豆网上搜索。

lcd的多屏多层菜单程序.docx

lcd的多屏多层菜单程序

#include

#include

#include

#defineINPUTSET256;

#defineDEBUG 0 //0:

运行,1:

调试

#defineENABLE_INTERRUPT1//1:

中断允许,0:

中断禁止

//定义8155地址

#defineI8155A0x7000

#defineI8155B0x7200

#definePA1

#definePB2

#definePC3

//定义25045地址

#defineOUTNUMBER0x01a1

#defineINNUMBER0x01a2

#definePASSWORD_ADDR0x01a3

#defineHIDE_PASSWORD_ADDR0x01af

//定义键盘扫描码

#defineBUTTON_START0x28

#defineBUTTON_STOP0x48

#defineBUTTON_SET0x84

#defineBUTTON_OK0x88

#defineBUTTON_SLAVE0x81

//0,1,2,3,4,5,6,7,8,9

unsignedcharcodekeyscancode[]={0x82,0x11,0x12,0x14,0x21,0x22,0x24,0x41,0x42,0x44};

#include

#include

//newvar

unsignedcharbdatabitvar;

sbitkeypush=bitvar^0;

sbitrrtime_flag=bitvar^1;//读取运行参数标志

sbitshowflag=bitvar^2;

unsignedcharkeycode,tempkey,i,j;

unsignedcharmenuitem=0x00;

unsignedintruntime[32];

unsignedintxdatastarttime[36];

unsignedintxdatastoptime[32];

unsignedintxdatabetweentime[32];

unsignedcharxdatarunno1[36];

unsignedcharxdatalinkrun[4];

unsignedcharxdatalinkrunno1[4];

unsignedcharxdatasubmenuitem=0;

unsignedlongxdatai8155out;

unsignedcharxdatamain_temp,outputnumber,inputnumber;

unsignedintxdatatempvar[9];

charxdatashowstr[5]="  ";

//newvarend

//定义DS12887地址

#defineP12887SEC    0x7f00//12887秒地址

#defineP12887SEC_ALM  0x7f01//12887秒报警地址

#defineP12887MIN   0x7f02//12887分地址

#defineP12887MIN_ALM  0x7f03//12887分报警地址

#defineP12887HOUR   0x7f04//12887时地址

#defineP12887HOUR_ALM  0x7f05//12887时报警地址

#defineP12887WEEK   0x7f06//12887星期地址

#defineP12887DAY   0x7f07//12887日期地址

#defineP12887MONTH   0x7f08//12887月地址

#defineP12887YEAR   0x7f09//12887年地址

#defineP12887MCA   0x7f0a//寄存器a地址

#defineP12887MCB   0x7f0b//寄存器a地址

#defineP12887MCC    0x7f0c//寄存器a地址

#defineP12887MCD    0x7f0d//寄存器a地址

#defineP12887RAM    0x7f0e//12887不掉电RAM起始地址

void init_12887();         //DS12887初始化程序

void gettime_12887();        //取DS12887时间子程序(年月日时分)

void settime_12887();        //设置DS12887时间子程序

voidi8155_init(unsignedintmemaddress,unsignedcharcommand);

//intel8155端口输出

//memaddress:

8155基址;

//portnum:

端口号(1:

PA、2:

PB、3:

PC)

//portstatu:

端口输出字

voidi8155_outport(unsignedintmemaddress,unsignedcharportnum,unsignedcharportstatu);

//intel8155端口输入

//memaddress:

8155基址;

//portnum:

端口号(1:

PA、2:

PB、3:

PC)

//返回值:

端口状态

unsignedchari8155_inport(unsignedintmemaddress,unsignedcharportnum);

voidshowinitscreen();

voidinit();

voidtimer0()interrupt1using1

{

unsignedchartemp;

//晶振为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;

}

elseif((XBYTE[0x7ed0]&0x0f)!

=0x0f)

{

keycode=keycode&0x2f;

}

elseif((XBYTE[0x7eb0]&0x0f)!

=0x0f)

{

keycode=keycode&0x4f;

}

elseif((XBYTE[0x7e30]&0x0f)!

=0x0f)

{

keycode=keycode&0x8f;

}

}

else

{

keypush=1;

keycode=0;

}

}

else

{

keypush=0;

}

}

voidds12887_int1()interrupt2using2

{

rrtime_flag=0;

ACC=XBYTE[P12887MCC];     //读寄存器C清除中断请求标志IRQF

}

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

//

//主程序

//

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

voidmain()

{

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();

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

#ifDEBUG

x25045_disable();

#else

x25045_init();

#endif

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

TMOD=0x01;

ET0=1;

TR0=1;

#ifENABLE_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)

  {

  case0x00:

//自动运行状态

  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;

  case0x01:

//设置确认菜单

  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;

  case0x02:

//运行确认菜单

  tm12864_reset();

  if(showflag==0)

  {

tm12864_fillscreen(0x00);

showflag=1;

}

showinitscreen();

  switch(submenuitem)

  {

  case0x00:

tm12864_writehz(2,6,set,0);

tm12864_writehz(10,6,yunxing,1);

switch(tempkey)

{

caseBUTTON_OK:

  menuitem=0x00;

  showflag=0;

  while

(1){};

  break;

  caseBUTTON_STOP:

  caseBUTTON_SLAVE:

  submenuitem=0x01;

  showflag=0;

  break;

  }

break;

case0x01:

tm12864_writehz(2,6,set,1);

tm12864_writehz(10,6,yunxing,0);

switch(tempkey)

{

caseBUTTON_OK:

  menuitem=0x03;

  showflag=0;

  submenuitem=0x00;

  break;

  caseBUTTON_START:

  caseBUTTON_SLAVE:

  submenuitem=0;

  showflag=0;

  break;

  }

break;

}

    tempkey=0x50;

  break;

  case0x03:

//设置菜单

  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++)

{

#ifDEBUG

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)

  {

  case0x00:

  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;

  case0x01:

  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;

  case0x02:

  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;

  case0x03:

  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)

  {

  caseBUTTON_START:

  menuitem=0x02;

  submenuitem=0;

  showflag=0;

  break;

  caseBUTTON_SLAVE:

  if(submenuitem<0x03)

  {

  submenuitem++;

  }

  else

  {

  submenuitem=0x00;

  }

  break;

  caseBUTTON_OK:

  menuitem=0x04+submenuitem;

  //如果密码与隐蔽选单密码相符则进入隐蔽选单

  /*

  if(check_password(HIDEMENU))

  {

  menuitem=0x20;

  }*/

  submenuitem=0x00;

  tempvar[0]=0x00;

  showflag=0;

  break;

  }

  tempkey=0x50;

  break;

  case0x04:

//输出设定菜单

  tm12864_reset();

  if(showflag==0)

  {

tm12864_fillscreen(0x00);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1