




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 看图猜安全警示标志
- 臂丛阻滞临床应用
- 药物烧灼治疗方案
- 营养餐创业计划书
- 2025年注册会计师考试《会计》合并财务报表实战演练与综合练习试题
- 2025年安全评价师职业资格考试重点难点案例分析模拟试题
- 2025年瑜伽教练资格证考试题库:瑜伽教练教学方法与试题解析
- 2025年大学辅导员考试:班级管理策略与班级管理创新实践案例分析与应用总结技巧试题库
- 2025年消防安全知识培训考试题库:消防设施操作消防安全法规学习试题试卷
- 新高中物理基础知识
- 2025年上半年山西交控集团所属路桥集团交投集团招聘800人易考易错模拟试题(共500题)试卷后附参考答案
- 同等学力申硕-H001356法学学科综合知识考点汇编
- 外周静脉血管解剖知识
- JJF1033-2023计量标准考核规范
- 《教育强国建设规划纲要(2024-2035年)》解读与培训
- 《会计职业规划》课件
- 员工离职面谈记录表范本
- 2025年青岛市技师学院招考聘用48人高频重点提升(共500题)附带答案详解
- 2024年08月澳门2024年中国银行澳门分行校园招考笔试历年参考题库附带答案详解
- 110KV-GIS设备技术要求
- GA/T 1740.2-2024旅游景区安全防范要求第2部分:湖泊型
评论
0/150
提交评论