📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 //宏定义
3 #define KEY_ENTER 0x01
4 #define KEY_MOVE 0x02
5 #define KEY_DOWN 0x03
6 #define KEY_UP 0x04
7 #define KEY_SET 0x05
8 #define KEY_ESC 0x06
9 //----------------------------------------------------
10
11 typedef unsigned char uchar;
12
13 //全局变量声明
14 extern unsigned char xdata KEY_BUF;
15 extern unsigned char xdata XPOS;//XPOS为0~7
16 extern unsigned char xdata YPOS;//YPOS为0~127
17 extern bit FB_FLAG;//反白标志位
18 //-----------------------------------------------------------------------
19 //函数声明
20 extern void lcm_init(); //键盘初始化
21 extern void clearscreen(); //清屏
22 extern void putchar(unsigned int singlecharnum);//输出一个字符
23 extern void putstr(unsigned int *STR);
24 void init_frame(unsigned int *STRTAB[]);
25
26 void main_disp();//参数显示
27 void main_bset();//系统设置
28 void main_adset();//保护设置
29 void main_record();//操作日志
30 void main_order();//电容状态
31 void main_error();//故障处理
32
33 //-----------------------------------------------------------------------
34
35 //全局变量定义
36 unsigned char xdata selenum;//选择的字符串号,16位
37 unsigned char xdata i; //第二行显示的字符串号
38 unsigned char xdata fbchar; //fbchar为反白字节,4时第一行反白,2时第二行反白,1时最后一行反白
39 unsigned char xdata TOTALNUM;//该页共有几个选项
40 //------------------------------------------------------------------------------------------
41
42 //字符串定义
43 unsigned int code CLEAR[] = {0x0000,0x0000,0x0000,0x0000,0x00ff};//清楚故障
44 unsigned int code STR0maintitle[] = {0x801A,0x801B,0x801C,0x801D,0x00ff};//功能菜单
45 unsigned int code STR1_disp[] = {0x0001,0x801E,0x801F,0x8020,0x8021,0x00ff};//1参数显示
46 unsigned int code STR2_bset[] = {0x0002,0x8022,0x8023,0x8024,0x8025,0x00ff};//2系统设置
47 unsigned int code STR3_adset[] = {0x0003,0x800F,0x8026,0x8027,0x8028,0x00ff};//3保护设置
48 unsigned int code STR4_capastate[] = {0x0004,0x802D,0x802E,0x8024,0x8025,0x00ff};//4电容状态
49 unsigned int code STR5_record[] = {0x0005,0x8029,0x802A,0x802B,0x802C,0x00ff}; //5操作日志
50 unsigned int code STR6_error[] = {0x0006,0x802F,0x8030,0x8031,0x8032,0x00ff}; //6故障查询
51 unsigned int * code STRMAINTAB[7] = {STR0maintitle,STR1_disp,STR2_bset,STR3_adset,STR4_capastate,STR5_reco
-rd,STR6_error};
52 //--------------------------------------------------------------------------------------------------------
------
53
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 2
54 //显示两行
55 void display2list(unsigned int *STRTABLE[])
56 {
57 1 bit fblist_1,fblist_2;
58 1
59 1 if(fbchar==4)
60 1 {
61 2 selenum=1; //字符串号
62 2 fblist_1=1;
63 2 fblist_2=0;
64 2 }
65 1 else if(fbchar==2)
66 1 {
67 2 selenum=2;
68 2 fblist_1=0;
69 2 fblist_2=1;
70 2 }
71 1
72 1 XPOS=0;
73 1 YPOS=0;
74 1 FB_FLAG=0;
75 1 putstr(STRTABLE[0]);
76 1
77 1 XPOS=2;
78 1 YPOS=0;
79 1 FB_FLAG=fblist_1;
80 1 putstr(STRTABLE[1]);//显示第1行
81 1
82 1 XPOS=4;
83 1 YPOS=0;
84 1 FB_FLAG=fblist_2; //显示第2行
85 1 putstr(STRTABLE[2]);
86 1 }
87 //-------------------------------------------------------------------------
88 //两行选项上移
89 /*void list2_key_up_move(unsigned int *STRTAB[])
90 {
91 fbchar=4;
92 display2list(STRTAB);
93 KEY_BUF=0xff;
94 }
95 //--------------------------------------------------------------------------
96 //两行选项下移
97 void list2_key_down_move(unsigned int *STRTAB[])
98 {
99 fbchar=2;
100 display2list(STRTAB);
101 KEY_BUF=0xff;
102 }
103 *///-----------------------------------------------------------------------
104
105 //显示一屏的3行,通过改变全局变量fbchar,i有不同的显示效果,并改变全局变量selenum,
106 void display3list(unsigned int *STRTABLE[])
107 {
108 1 bit fblist1,fblist2,fblist3;
109 1
110 1 if(fbchar==4) //反白第一行
111 1 {
112 2 selenum=i;
113 2 fblist1=1;
114 2 fblist2=0;
115 2 fblist3=0;
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 3
116 2 }//通过反白情况,改变全局变量selenum
117 1 else if(fbchar==2) //反白第二行
118 1 {
119 2 selenum=i+1;
120 2 fblist1=0;
121 2 fblist2=1;
122 2 fblist3=0;
123 2 }
124 1 else if(fbchar==1) //发白第三行
125 1 {
126 2 selenum=i+2;
127 2 fblist1=0;
128 2 fblist2=0;
129 2 fblist3=1;
130 2 }
131 1 else if(fbchar==0) //没有反白
132 1 {
133 2 fblist1=0;
134 2 fblist2=0;
135 2 fblist3=0;
136 2 }
137 1 XPOS = 0;
138 1 YPOS = 28;
139 1 FB_FLAG = 0;
140 1 putstr(STRTABLE[0]);//每页第一行为标题
141 1
142 1 if(i == 1)
143 1 {//第一页,打印向下的箭头
144 2 YPOS = 96;
145 2 putchar(0x0017);//空格
146 2 YPOS += 8;
147 2 putchar(0x0019);//下箭头
148 2 }
149 1 else if(i == (TOTALNUM-2))
150 1 {//最后一页,打印向上的箭头
151 2 YPOS = 96;
152 2 putchar(0x0017);//空格
153 2 YPOS += 8;
154 2 putchar(0x0018);//上箭头
155 2 }
156 1 else
157 1 {//打印向上和向下的箭头
158 2 YPOS = 96;
159 2 putchar(0x0018);
160 2 YPOS += 8;
161 2 putchar(0x0019);
162 2 }
163 1
164 1 XPOS = 2;
165 1 YPOS = 24;
166 1 FB_FLAG = fblist1;
167 1 putstr(STRTABLE[i]);//显示第二行
168 1
169 1 XPOS = 4;
170 1 YPOS = 24;
171 1 FB_FLAG = fblist2;
172 1 putstr(STRTABLE[i+1]);//显示第三行
173 1
174 1 XPOS = 6;
175 1 YPOS = 24;
176 1 FB_FLAG = fblist3;
177 1 putstr(STRTABLE[i+2]);//显示第四行
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 4
178 1 }
179
180 //-------------------------------------------------------------
181 //三行选项上移
182 void key_up_move(unsigned int *STRTAB[])//按上移键,反白上移,若为第一条则不动,输入:字符串地址列表*STRTA
-B[]
183 {
184 1 if(fbchar==4)
185 1 {
186 2 if(i!=1)
187 2 i--;
188 2 }
189 1 else fbchar<<=1;
190 1 display3list(STRTAB);
191 1 KEY_BUF=0xff;
192 1 }
193 //-------------------------------------------------------------------------------------
194 //三行选项下移
195 void key_down_move(unsigned int *STRTAB[],unsigned char num)//按下移键,反白下移,若为最后一条则不动,
196 {
197 1 if(fbchar==1) //输入:字符串地址列表数组*STRTAB[],选项总数num,
198 1 {
199 2 if(i!=(num-2))
200 2 i++;
201 2 }
202 1 else
203 1 fbchar>>=1;
204 1 display3list(STRTAB);
205 1 KEY_BUF=0xff;
206 1 }
207 //-------------------------------------
208
209 //按下ENTER键,进入各分支
210 void key_enter_move()//按enter键,进入各分支
211 {
212 1 if(selenum==0x01)
213 1 main_disp();//显示
214 1 else if(selenum==0x02)
215 1 main_bset();//基本设置
216 1 else if(selenum==0x03)
217 1 // main_adset();//保护设置
218 1 // else if(selenum==0x04)
219 1 // main_record();//操作日志
220 1 // else if(selenum==0x05)
221 1 {
222 2 KEY_BUF=0xff;
223 2 // main_capastate();
224 2 }//命令
225 1 else if(selenum==0x06)
226 1 // main_error(); //故障处理
227 1 KEY_BUF=0xff;
228 1 }
229 //-------------------------------------
230
231 //初始页面,第一屏,反白项第一项
232 void init_frame(unsigned int *STRTAB[])
233 {
234 1 i=1;
235 1 fbchar=4;
236 1 if(TOTALNUM==2)
237 1 display2list(STRTAB);
238 1 else
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 5
239 1 display3list(STRTAB);
240 1 }
241
242 //-----------------------------------------------------------------------------
243
244 main()
245 {
246 1 unsigned char remfbchar,remselenum,mremi,tcounter=0;
247 1 TOTALNUM=6;
248 1
249 1 EA = 1; //开总中断
250 1 EX0 = 1; //允许外部中断0中断
251 1
252 1 lcm_init();
253 1 clearscreen();
254 1
255 1 KEY_BUF = 0xff;
256 1 // i = 1;
257 1 // fbchar = 4;
258 1 init_frame(STRMAINTAB);
259 1
260 1 while(1)
261 1 {
262 2 if(KEY_BUF == KEY_UP)
263 2 key_up_move(STRMAINTAB);
264 2 else if(KEY_BUF == KEY_DOWN)
265 2 key_down_move(STRMAINTAB,TOTALNUM);
266 2 else if(KEY_BUF == KEY_ENTER)
267 2 {
268 3 remfbchar=fbchar;
269 3 remselenum=selenum;
270 3 mremi=i;
271 3 key_enter_move();
272 3 TOTALNUM=6;
273 3 selenum=remselenum;
274 3 fbchar=remfbchar;
275 3 i=mremi;
276 3 clearscreen();
277 3 display3list(STRMAINTAB);
278 3 }
279 2 else if(KEY_BUF == KEY_ESC)
280 2 {
281 3 // i = remi;
282 3 init_frame(STRMAINTAB);
283 3 XPOS=2;
284 3 YPOS=80;
285 3 FB_FLAG=0;
286 3 // putstr(CLEAR);
287 3 KEY_BUF=0xff;
288 3 }
289 2 //can_common();
290 2 }
291 1 }
292
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 810 ----
CONSTANT SIZE = 113 ----
XDATA SIZE = 4 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
C51 COMPILER V7.01 MAIN 09/23/2008 14:27:38 PAGE 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -