📄 menu.lst
字号:
C51 COMPILER V7.08 MENU 10/30/2007 10:36:26 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN menu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE menu.c DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h> /* standard I/O .h-file */
2 #include <reg51f.h>
3 #include <absacc.h>
4 #include <main.h>
5 #include <time.h>
6 #include "lcd.h"
7 #include "x5045.h"
8
9 unsigned char xdata LEDState, //LED灯、液晶背光状态变量
10 ArrayLine, //显示屏变量
11 ScrLine, //反白显示行变量
12 JD_ticker, //接地计时变量(10毫秒)
13 Ticker, //按键等用的计时变量;
14 ESCTicker, //背光计数器清零
15 F_back; //需不需要返回上一级的标志,
16 //0xAA----需要返回
17 //0x55----不需要返回
18
19 unsigned char code P_first[][16]= //一级菜单
20 {
21 " 1、一级菜单1 ",
22 " 2、一级菜单2 ",
23 " 3、一级菜单3 ",
24 " 4、一级菜单4 ",
25 " 5、一级菜单5 ",
26 " 6、一级菜单6 "
27 };
28 //*********************************************************
29 //时子程序
30 //********************************************************
31 void Delay1(time)
32 unsigned int time;
33 {
34 1 while(time--);
35 1 }
36 //***********************************************
37 //键盘识别子程序
38 //***********************************************
39 unsigned char GetKey(time)
40 unsigned char time;
41 {
42 1 unsigned char xdata keyvalue;
43 1 keyvalue = KEY_ADDR; //判键 #define KEY_ADDR XBYTE[0X4000] 读取按键值
44 1 if(keyvalue!=0xff)
45 1 {
46 2 if(Ticker > time) //time按键以后的延时时间
47 2 {
48 3 LEDState=LEDState|0x80; //有按键点亮背光
49 3 LED=LEDState;
50 3 Ticker = 0; //按键延时计数器清零
51 3 ESCTicker=0; //背光关闭计时器清零
52 3 return(keyvalue);
53 3 }
54 2 else
55 2 {
C51 COMPILER V7.08 MENU 10/30/2007 10:36:26 PAGE 2
56 3 keyvalue = 0xff;
57 3 return(keyvalue);
58 3 }
59 2 }
60 1 else
61 1 {
62 2 Ticker = 0;
63 2 return(0xff);
64 2 }
65 1 }
66 //*********************************************************
67 //一级菜单显示
68 //*********************************************************
69 void d_first(void) //一级菜单显示
70 { unsigned char key_value;
71 1 ArrayLine=0;
72 1 ScrLine=0;
73 1 while(1)
74 1 {
75 2 ReverseLine(ScrLine);
76 2 PrintStr(0,0,P_first[ArrayLine]);
77 2 PrintStr(1,0,P_first[ArrayLine+1]);
78 2 PrintStr(2,0,P_first[ArrayLine+2]);
79 2 PrintStr(3,0,P_first[ArrayLine+3]);
80 2 while(1)
81 2 {
82 3 key_value=GetKey(12);
83 3 if(key_value!=0xff) //按键松开之后
84 3 break;
85 3 }
86 2 switch(key_value)
87 2 {
88 3 /* 当按向上键和加号键时向上移动*/
89 3 case UP:
90 3 case PLUS:
91 3 if (ArrayLine==0) //当数组指针在第一行时,只有此时才考虑到最后一行
92 3 {//ArrayLine 显示屏变量
93 4 if (ScrLine<=0) //如果屏幕指针在第一行则到最后一行
94 4 {
95 5 ScrLine = 3; //ScrLine 反白显示行变量
96 5 ArrayLine = ARRAYLINE; //#define ARRAYLINE 2 一级菜单长度减4
97 5 }
98 4 else //如果屏幕指针没有在最后一行则向上移动
99 4 ScrLine--;
100 4 }
101 3 else //如果数组指针不在第一行
102 3 {
103 4 if (ScrLine<=0) //如果屏幕指针在第一行,则要向上滚屏
104 4 ArrayLine--;
105 4 else
106 4 ScrLine--; //如果屏幕指针不在第一行,则向上移动
107 4 }
108 3 break;
109 3 case DOWN: //向下的逻辑与向上的逻辑相反
110 3 case SUB:
111 3 if (ArrayLine>=ARRAYLINE) //#define ARRAYLINE 2
112 3 {
113 4 if (ScrLine>=3)
114 4 {
115 5 ScrLine = 0;
116 5 ArrayLine = 0;
117 5 }
C51 COMPILER V7.08 MENU 10/30/2007 10:36:26 PAGE 3
118 4 else
119 4 ScrLine++;
120 4 }
121 3 else
122 3 {
123 4 if (ScrLine>=3)
124 4 ArrayLine++;
125 4 else
126 4 ScrLine++;
127 4 }
128 3 break;
129 3 case ENTER:
130 3 d_second(ArrayLine+ScrLine); //进入菜单项对应的二级菜单
131 3 break;
132 3 case ESC:
133 3 InitLcd();
134 3 return;
135 3 }
136 2 }
137 1 }
138
139 //************************************************************
140 //二级菜单
141 //************************************************************
142 void d_second(second_num)
143 unsigned char second_num;
144 {
145 1 switch(second_num)
146 1 { case 0:
147 2 //d_realdata();
148 2 break;
149 2 case 1:
150 2 //d_save();
151 2 break;
152 2 case 2:
153 2 //d_sysset();
154 2 break;
155 2 case 3:
156 2 //d_sprint();
157 2 break;
158 2 case 4:
159 2 //d_sysdebug();
160 2 break;
161 2 case 5:
162 2 //d_revsion();
163 2 break;
164 2 }
165 1 }
166
167 //*****************************************************************
168 //主屏显示
169 //*****************************************************************
170 void welcome(void)
171 { unsigned char xdata key_value,secb,seca,temp[9];//;,bb
172 1 struct DATE d_date;
173 1 struct TIME t_time;
174 1 while(1)
175 1 {
176 2 F_back = 0x55; //在主屏,不需要返回. F_baCK=0X55标识需要返回标志
177 2 key_value=GetKey(12);
178 2 LED=LED&0xf3;
179 2 if(key_value==ENTER) //按确认键进入主菜单
C51 COMPILER V7.08 MENU 10/30/2007 10:36:26 PAGE 4
180 2 {
181 3 F_back = 0xaa; //标识需要返回标志
182 3 LED=LED&0xfc;
183 3 d_first();
184 3 }
185 2 secb=SECOND; //每秒刷新一次时间
186 2 watchdog();
187 2 if(seca!=secb)
188 2 {
189 3 seca=secb;
190 3 GetTime(&t_time);
191 3 GetDate(&d_date);
192 3 if((d_date.year>99)||(d_date.mon>12)||(d_date.day>31)||(t_time.hour>23)||(t_time.min>59)||(t_time.sec>5
-9))
193 3 {
194 4 //repair_time();
195 4 InitLcd();
196 4 PrintStr(1,2,"时钟出错"); //时钟出错后把年月日时分秒设为默认值后进入时钟设置界面
197 4 Delay1(5000);
198 4 InitLcd();
199 4 }
200 3 PrintStr(1,0," 菜单程序调试 ");
201 3 PrintStr(2,6," ");
202 3 PrintStr(2,0," ");
203 3 PrintStr(0,0," 实验程序 ");
204 3 PrintStr(3,6," ");
205 3 PrintStr(3,0," ");
206 3
207 3 temp[0] = d_date.year/10 + 0x30;
208 3 temp[1] = d_date.year%10 + 0x30;
209 3 temp[2] = '-';
210 3 temp[3] = d_date.mon/10 + 0x30;
211 3 temp[4] = d_date.mon%10 + 0x30;
212 3 temp[5] = '-';
213 3 temp[6] = d_date.day/10 + 0x30;
214 3 temp[7] = d_date.day%10 + 0x30;
215 3 temp[8] = 0;
216 3 PrintStr(2,2,temp);
217 3
218 3 temp[0] = t_time.hour/10 + 0x30;
219 3 temp[1] = t_time.hour%10 + 0x30;
220 3 temp[2] = ':';
221 3 temp[3] = t_time.min/10 + 0x30;
222 3 temp[4] = t_time.min%10 + 0x30;
223 3 temp[5] = ':';
224 3 temp[6] = t_time.sec/10 + 0x30;
225 3 temp[7] = t_time.sec%10 + 0x30;
226 3 temp[8] = 0;
227 3 PrintStr(3,2,temp);
228 3 }
229 2 }
230 1 }
231 void main()
232 {
233 1 welcome();
234 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 758 ----
CONSTANT SIZE = 144 ----
XDATA SIZE = 7 13
C51 COMPILER V7.08 MENU 10/30/2007 10:36:26 PAGE 5
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -