一个实际使用的的LCD汉字显示多屏多层菜单_第1页
一个实际使用的的LCD汉字显示多屏多层菜单_第2页
一个实际使用的的LCD汉字显示多屏多层菜单_第3页
一个实际使用的的LCD汉字显示多屏多层菜单_第4页
一个实际使用的的LCD汉字显示多屏多层菜单_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一个实际使用的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

2、 #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; #inclu

3、de #include  /new var unsigned char bdata bitvar; sbit keypush=bitvar0; sbit rrtime_flag=bitvar1;/读取运行参数标志 sbit showflag=bitvar2; unsigned char keycode,tempkey,i,j; unsigned char menuitem=0x00; unsigned int runtime32; unsigned int xdata starttime36; unsigned int xdata stoptime32; unsigned int x

4、data betweentime32; unsigned char xdata runno136; unsigned char xdata linkrun4; unsigned char xdata linkrunno14; unsigned char xdata submenuitem=0; unsigned long xdata i8155out; unsigned char xdata main_temp,outputnumber,inputnumber; unsigned int xdata tempvar9; char xdata showstr5="  

5、;  " /new var end /定义DS12887地址 #define P12887SEC        0x7f00/12887秒地址 #define P12887SEC_ALM     0x7f01/12887秒报警地址 #define P12887MIN      0x7f02/12887分地址 #define P12887MIN_ALM     0x7f03/12

6、887分报警地址 #define P12887HOUR      0x7f04/12887时地址 #define P12887HOUR_ALM    0x7f05/12887时报警地址 #define P12887WEEK      0x7f06/12887星期地址 #define P12887DAY      0x7f07/12887日期地址 #define P12887MONTH   

7、;   0x7f08/12887月地址 #define P12887YEAR      0x7f09/12887年地址 #define P12887MCA      0x7f0a/寄存器a地址 #define P12887MCB      0x7f0b/寄存器a地址 #define P12887MCC         0x7f0c/寄存器a地址 #

8、define P12887MCD         0x7f0d/寄存器a地址 #define P12887RAM         0x7f0e/12887不掉电RAM起始地址 void  init_12887();                  

9、 /DS12887初始化程序 void  gettime_12887();                /取DS12887时间子程序(年月日时分) void  settime_12887();                /设置DS12887时间子程序 void i8155_

10、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) /返回值:端口

11、状态 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=(XBYTE0x7e00&0x0f);/有键按下时 !=0x0f if(temp!=0x0f)/是否有键按下 if(keyp

12、ush=1) keycode=temp; if(XBYTE0x7ee0&0x0f)!=0x0f) keycode=keycode&0x1f; else if(XBYTE0x7ed0&0x0f)!=0x0f) keycode=keycode&0x2f; else if(XBYTE0x7eb0&0x0f)!=0x0f) keycode=keycode&0x4f; else if(XBYTE0x7e30&0x0f)!=0x0f) keycode=keycode&0x8f; else keypush=1; keycode=0; else

13、keypush=0; void ds12887_int1() interrupt 2 using 2 rrtime_flag=0; ACC=XBYTEP12887MCC;           /读寄存器C 清除中断请求标志IRQF /* / /主程序 / /* void main() i8155out=0x00; x25045_disable(); outputnumber=x25045_readbyte(OUTNUMBER); for(i=0;i runtime=(int)0x00; runn

14、o1=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; PX

15、1=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

16、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;    br

17、eak;       else       tempkey=keycode;       i+;          else       tempkey=0x50;       keycode=0;    /屏幕显示处理    switch(menuitem)     

18、  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," 

19、               ",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; showf

20、lag=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)

21、; showflag=1; showinitscreen(); if(j<6)&&(tempkey<0x0a) tm12864_writehz(0,6,mm,0); tm12864_writestr(j+4),6,"*",1); tempvarj=tempkey; j+; if(j=6) for(j=0;j<6;j+) if(tempvarj!=x25045_readbyte(PASSWORD_ADDR+j) j=0; showflag=0; menuitem=0x00; break; tm12864_writestr(0,6,"

22、  ",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

23、=0;        showflag=0;        tempvar0=1;               submenuitem=0;        if(tempkey=BUTTON_START)         

24、0;     menuitem=0x00;        showflag=0;               tempkey=0x50; break;    case 0x02:/运行确认菜单    tm12864_reset();    if(showflag=0)    tm12864_fill

25、screen(0x00); showflag=1; showinitscreen();    switch(submenuitem)       case 0x00: tm12864_writehz(2,6,set,0); tm12864_writehz(10,6,yunxing,1); switch(tempkey) case BUTTON_OK:    menuitem=0x00;    showflag=0;    while(1);    brea

26、k;    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;  

27、  showflag=0;    submenuitem=0x00;    break;    case BUTTON_START:    case BUTTON_SLAVE:    submenuitem=0;    showflag=0;    break;    break;        tempkey=0x50;    break; &#

28、160;  case 0x03:/设置菜单    tm12864_reset();    if(showflag=0)    tm12864_fillscreen(0x00); showflag=1; j=0;    x25045_writestatu(0x00);        / *        /加入隐蔽菜单功能 if(j<6)&&(tempkey<0

29、x0a) tempvarj=tempkey; j+; showstr0=j+0x30; showstr1='0' tm12864_writestr(15,7,showstr,0); tempkey=0x50;        if(j=6) for(j=0;j<6;j+) #if DEBUG tempvarj=x25045_readbyte(0x01a9+j); #else if(tempvarj!=x25045_readbyte(0x01a9+j) j=0; break; #endif if(tempkey=BU

30、TTON_SET)        menuitem=0x1b;        j=0;        submenuitem=0;        showflag=0;        tempvar0=1;         

31、60;            / *    switch(submenuitem)       case 0x00:    tm12864_writestr(0,0,"1 ",1);    tm12864_writehz(2,0,scsd,1);    tm12864_writestr(0,2,"2 ",0);   

32、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,&qu

33、ot;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);

34、    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_wr

35、itestr(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,scs

36、d,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);  

37、60; break;       switch(tempkey)       case BUTTON_START:    menuitem=0x02;    submenuitem=0;    showflag=0;    break;    case BUTTON_SLAVE:    if(submenuitem<0x03)       submen

38、uitem+;       else       submenuitem=0x00;       break;    case BUTTON_OK:    menuitem=0x04+submenuitem;    /如果密码与隐蔽选单密码相符则进入隐蔽选单    /*    if(check_password(HIDEMENU)     

39、0; menuitem=0x20;    */    submenuitem=0x00;    tempvar0=0x00;    showflag=0;    break;       tempkey=0x50;    break;    case 0x04:/输出设定菜单    tm12864_reset();    if(showflag=0)   

40、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_writeh

41、z(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; tempvar0=0; if(tempvar0>32)|(tempvar0=0) submenuitem=0; tempvar0

42、=0; else if(tempvar2>59) submenuitem=2; tempvar2=0; else if(tempvar4>59) submenuitem=4; tempvar4=0; else if(tempvar6>59) submenuitem=6; tempvar6=0; j=0; break; case BUTTON_STOP: submenuitem=0x00; menuitem=0x03; showflag=0; tempvar0=0; j=0; break; switch(submenuitem) case 0:/获取回路号 if(j<2)

43、&&(tempkey<0x0a) tempvar0=tempvar0*0x0a+tempkey; j+; showstr0=(tempvar0/0x0a+0x30); showstr1=(tempvar0%0x0a+0x30); showstr2='0' tm12864_writestr(12,0,showstr,1); break; case 1:/获取工作时间-分 showstr0=(tempvar0/0x0a+0x30); showstr1=(tempvar0%0x0a+0x30); showstr2='0' tm12864_writ

44、estr(12,0,showstr,0); if(j=0) if(tempvar0!=0) tempvar1=x25045_readword(tempvar0*7-7); tempvar2=tempvar1%60; tempvar1=tempvar1/60; tempvar3=x25045_readword(tempvar0*7-5); tempvar4=tempvar3%60; tempvar3=tempvar3/60; tempvar5=x25045_readword(tempvar0*7-3); tempvar6=tempvar5%60; tempvar5=tempvar5/60; sh

45、owstr0=(tempvar2/10+0x30); showstr1=(tempvar2%10+0x30); showstr2='0' tm12864_writestr(12,2,showstr,0); showstr0=(tempvar3/1000+0x30); showstr1=(tempvar3%1000)/100+0x30); showstr2=(tempvar3%100)/10+0x30); showstr3=(tempvar3%10+0x30); showstr4='0' tm12864_writestr(6,4,showstr,0); shows

46、tr0=(tempvar4/10+0x30); showstr1=(tempvar4%10+0x30); showstr2='0' tm12864_writestr(12,4,showstr,0); showstr0=(tempvar5/1000+0x30); showstr1=(tempvar5%1000)/100+0x30); showstr2=(tempvar5%100)/10+0x30); showstr3=(tempvar5%10+0x30); showstr4='0' tm12864_writestr(6,6,showstr,0); showstr0

47、=(tempvar6/10+0x30); showstr1=(tempvar6%10+0x30); showstr2='0' tm12864_writestr(12,6,showstr,0); else tempvar1=0x00; tempvar2=0x00; tempvar3=0x00; tempvar4=0x00; tempvar5=0x00; tempvar6=0x00; if(j<4)&&(tempkey<0x0a) if(j=0) tempvar1=0; tempvar1=(tempvar1*0x0a)+(int)tempkey); j+

48、; showstr0=(tempvar1/1000+0x30); showstr1=(tempvar1%1000)/100+0x30); showstr2=(tempvar1%100)/10+0x30); showstr3=(tempvar1%10+0x30); showstr4='0' tm12864_writestr(6,2,showstr,1); break; case 2:/获取工作时间-秒 showstr0=(tempvar1/1000+0x30); showstr1=(tempvar1%1000)/100+0x30); showstr2=(tempvar1%100)

49、/10+0x30); showstr3=(tempvar1%10+0x30); showstr4='0' tm12864_writestr(6,2,showstr,0); if(j<2)&&(tempkey<0x0a) if(j=0) tempvar2=0; tempvar2=tempvar2*0x0a+tempkey; j+; showstr0=(tempvar2/10+0x30); showstr1=(tempvar2%10+0x30); showstr2='0' tm12864_writestr(12,2,showstr,1);

50、 break; case 3:/获取停止时间-分 showstr0=(tempvar2/10+0x30); showstr1=(tempvar2%10+0x30); showstr2='0' tm12864_writestr(12,2,showstr,0); if(j<4)&&(tempkey<0x0a) if(j=0) tempvar3=0; tempvar3=tempvar3*0x0a+tempkey; j+; showstr0=(tempvar3/1000+0x30); showstr1=(tempvar3%1000)/100+0x30); s

51、howstr2=(tempvar3%100)/10+0x30); showstr3=(tempvar3%10+0x30); showstr4='0' tm12864_writestr(6,4,showstr,1); break; case 4:/获取停止时间-秒 showstr0=(tempvar3/1000+0x30); showstr1=(tempvar3%1000)/100+0x30); showstr2=(tempvar3%100)/10+0x30); showstr3=(tempvar3%10+0x30); showstr4='0' tm12864_w

52、ritestr(6,4,showstr,0); if(j<2)&&(tempkey<0x0a) if(j=0) tempvar4=0; tempvar4=tempvar4*0x0a+tempkey; j+; showstr0=(tempvar4/10+0x30); showstr1=(tempvar4%10+0x30); showstr2='0' tm12864_writestr(12,4,showstr,1); break; case 5:/获取间隔时间-分 showstr0=(tempvar4/10+0x30); showstr1=(tempva

53、r4%10+0x30); showstr2='0' tm12864_writestr(12,4,showstr,0); if(j<4)&&(tempkey<0x0a) if(j=0) tempvar5=0; tempvar5=tempvar5*0x0a+tempkey; j+; showstr0=(tempvar5/1000+0x30); showstr1=(tempvar5%1000)/100+0x30); showstr2=(tempvar5%100)/10+0x30); showstr3=(tempvar5%10+0x30); showstr4

54、='0' tm12864_writestr(6,6,showstr,1); break; case 6:/获取间隔时间-秒 showstr0=(tempvar5/1000+0x30); showstr1=(tempvar5%1000)/100+0x30); showstr2=(tempvar5%100)/10+0x30); showstr3=(tempvar5%10+0x30); showstr4='0' tm12864_writestr(6,6,showstr,0); if(j<2)&&(tempkey<0x0a) if(j=0)

55、tempvar6=0; tempvar6=tempvar6*0x0a+tempkey; j+; showstr0=(tempvar6/10+0x30); showstr1=(tempvar6%10+0x30); showstr2='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) tempvar1=tempvar1*60; tempvar1=t

56、empvar1+tempvar2; tempvar3=tempvar3*60; tempvar3=tempvar3+tempvar4; tempvar5=tempvar5*60; tempvar5=tempvar5+tempvar6;    x25045_init(); /保存工作时间 x25045_writeenable(); x25045_writeword(tempvar1,(tempvar0*7-7); /保存停止时间 x25045_writeenable(); x25045_writeword(tempvar3,(tempvar0*7-5); /保存间隔时间 x2

57、5045_writeenable(); x25045_writeword(tempvar5,(tempvar0*7-3); submenuitem=0; showflag=0; tempvar0=0x00; j=0; break;        tempkey=0x50;    break;    case 0x05:/设置输入回路    tm12864_reset();    if(showflag=0)    tm12864_fil

58、lscreen(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

59、_SLAVE: if(submenuitem<3) submenuitem+; else submenuitem=0; showflag=0; tm12864_writehz(6,4,hschl,0); tm12864_writestr(4,6,":          ",0); tempvar0=0; if(tempvar0=0)|(tempvar0>76) tempvar0=0; submenuitem=0; else if(tempvar1=0)|(tempvar1&

60、gt;36)&&(tempvar1!=99) tempvar1=0; submenuitem=1; j=0; break; case BUTTON_STOP: menuitem=0x03; submenuitem=0x01; showflag=0; tempvar0=0; j=0; break; switch(submenuitem) case 0:/获取回路号 if(j<2)&&(tempkey<0x0a) tempvar0=tempvar0*0x0a+tempkey; j+; showstr0=(tempvar0/0x0a+0x30); show

61、str1=(tempvar0%0x0a+0x30); showstr2='0' tm12864_writestr(12,2,showstr,1); break; case 1:/获取输出回路号 showstr0=(tempvar0/0x0a+0x30); showstr1=(tempvar0%0x0a+0x30); showstr2='0' tm12864_writestr(12,2,showstr,0); if(j=0) if(tempvar0!=0) tempvar1=x25045_readbyte(tempvar0*2-2+0x100); tempvar2

62、=x25045_readbyte(tempvar0*2-1+0x100); if(tempvar2=1) tm12864_writehz(6,6,qdsc,0); else tm12864_writehz(6,6,tzsc,0); else tempvar1=0x00; tempvar2=0x00; if(j<4)&&(tempkey<0x0a) if(j=0) tempvar1=0; tempvar1=tempvar1*0x0a+tempkey; j+; showstr0=(tempvar1/10+0x30); showstr1=(tempvar1%10+0x30); showstr2='0' tm12864_writestr(4,4,showstr,1); break; case 2:/获取功能 tm12864_writestr(4,4,showstr,0); if(tempvar2=1) tm12864_writehz(6,6,qdsc,1); else tm12

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论